我尝试从我的ruby块中获取一个变量,但是Chef并没有在这个块之外识别我的变量。如何从ruby块中检索任何变量?提前谢谢。
ruby_block 'fetch_path' do
block do
current_path = `sudo cat /var/chef/cache/revision`
new_path = current_path.to_s.split(',').last.split('"').drop(1).first
Chef::Log.info("### Your Current Directory: '#{new_path}' ###")
end
end
Chef::Log.info("### Your Current Directory: '#{new_path}' ###")
在块中我可以得到一个值,但是,在块之外 - 没有。
答案 0 :(得分:0)
这里有两件事。
首先,您的第二个Chef::Log.info
将在编译阶段运行,此时您的ruby_block
尚未收敛。见here about it。你可以在1)和2)的日志前加上一个先运行的女巫。
其次,存在范围问题,当您在块中定义变量时,它仅在此块中可用。
在大厨中,您可以使用node.run_state['variable']
作为可在所有食谱中使用的全局变量,在没有用例的情况下很难展示它。
附注:您不应该使用反引号``
构造来执行命令,而是更喜欢使用食谱DSL中的shell_out。