厨师 - 从ruby块获取变量

时间:2016-09-08 08:49:52

标签: ruby chef

我尝试从我的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}' ###") 

在块中我可以得到一个值,但是,在块之外 - 没有。

1 个答案:

答案 0 :(得分:0)

这里有两件事。

首先,您的第二个Chef::Log.info将在编译阶段运行,此时您的ruby_block尚未收敛。见here about it。你可以在1)和2)的日志前加上一个先运行的女巫。

其次,存在范围问题,当您在块中定义变量时,它仅在此块中可用。

在大厨中,您可以使用node.run_state['variable']作为可在所有食谱中使用的全局变量,在没有用例的情况下很难展示它。

附注:您不应该使用反引号``构造来执行命令,而是更喜欢使用食谱DSL中的shell_out