我有一个shell脚本,其输出是一个变量。我通过配方中的bash资源运行该shell脚本。我希望能够通过我的厨师模板访问该变量。反正有吗?
bash resource:
"My script which outputs a variable"
EOF
我想将此变量输出到template
资源。
答案 0 :(得分:0)
如果要在多个配方中使用,请将输出另存为节点属性。
ruby_block 'get output' do
block do
node.default['return_val']=`/tmp/test.sh`
end
end
template '/tmp/new.sh' do
source 'test.erb'
owner 'root'
group 'root'
mode '0644'
variables( lazy {{:config_var => node['return_val']}})
end
厨房产量: -
* ruby_block[get output] action run
- execute the ruby block reload client config
* template[/tmp/new.sh] action create
- create new file /tmp/new.sh
- update content in file /tmp/new.sh from none to 2c9c1f
--- /tmp/new.sh 2016-08-05 13:20:21.678786687 +0000
+++ /tmp/.chef-new.sh20160805-12338-81wvgw 2016-08-05 13:20:21.678786687 +0000
@@ -1 +1,2 @@
+mrigesh
- change mode from '' to '0644'
- change owner from '' to 'root'
- change group from '' to 'root'
- restore selinux security context
答案 1 :(得分:0)
要对@Mrigesh发布的内容进行细化:
资源本身没有输出或返回值,因此您需要使用较低级别的帮助程序来捕获命令输出。我们为您提供了一个名为shell_out!()
的优秀API。最简单的选择是这样的
template '/whatever' do
# other stuff here
variables lazy { {config_var: shell_out!('bash /myscript.sh').stdout} }
end
这也使用lazy{}
帮助程序来确保命令在收敛时而不是编译时运行,根据您的方案可能不需要。
答案 2 :(得分:0)
有一种更简单的方法,也许不太优雅,但经过了测试。 在您放置的模板中
some_value = <%= `some_bash_command`.strip %>
即您可能要根据计算机上的默认路由选择dynds_iface,将其选择为您简单放置的模板:
dyndns_iface = <%= `ip r|awk '/default via/ {print $5}'`.strip %>
在这里打勾。它获取命令的shell输出。剥离只是删除不必要的空白。