这是代码,我想在收敛时执行它以在运行时获取变量值:
属性/default.rb:
default['dir_list'] = []
recipes / defailt.rb
node['dir_list'].each do |dir|
directory dir.to_s do
group 'root'
owner 'root'
mode '755'
recursive true
action :create
end
end
食谱/list_dir.rb:
node.default['dir_list'] = ['/usr/dir1', '/usr/dir2', /usr/dir3']
run_list :
这里是第一个配方list_dir.rb,设置具有默认创建的3个目录的变量。
问题出在这里,default.rb没有设置这些目录,因为这些值是在编译时获取的。
无论如何,我们可以在运行时设置node ['dir_list']并在default.rb上执行代码。
在这里,我试图通过在运行时提供目录列表来动态创建多个目录。因此,请提供在运行时调用目录资源的最佳方法。
答案 0 :(得分:0)
无论如何,我们可以在运行时设置节点['dir_list']
确定可以,这里是chef documenation的专家
可以在食谱(或食谱)中定义属性,然后将其用于覆盖节点上的默认设置。在Chef Infra Client运行期间加载食谱时,会将这些属性与节点上已经存在的属性进行比较。首先根据食谱顺序加载属性文件中定义的属性。对于每个食谱,首先加载default.rb文件中的属性,然后按词法排序顺序加载其他属性文件(如果存在)。当Cookbook属性优先于默认属性时,Chef Infra Client在节点上运行Chef Infra Client时将应用这些新设置和值。
您可以使用attribute types之一来设置\更改配方中的节点属性。有关更多信息,请参见change attributes。
例如,配方中节点对象的默认属性:
node.default['apache']['dir'] = '/etc/apache2'
一些注意事项: