如何在 Chef 中使用 foreach 创建目录(带属性)

How to create directories using foreach in chef (with attributes)

如果我的数组中有属性,我该如何创建多个目录?

从 chef 目录资源文档中,我已经使用下面的示例代码进行了测试,并且可以正常工作。但是,如果数组包含属性,我就会遇到麻烦,而且我不太确定如何查看它在做什么。

%w( /foo /foo/bar /foo/bar/baz ).each do |path|

我打印了所有变量并观察到 ​​node.default[:user_home] 为 /home/chefuser

# this creates /home/chefuser/.local
directory 'for storing local binaries' do
  path "#{node.default[:user_home]}/.local"
  owner 'chefuser'
  group 'chefuser'
  mode '0755'
  action :create
end

# this does not create /home/chefuser/.local or /home/chefuser/.local/bin (however it doesn't fail)                                                                                                                                                                                                      
["#{node.default[:user_home]}/.local", "#{node.default[:user_home]}/.local/bin"].each do |path|                                                                                                                                                directory 'for storing local binaries' do                                                                                                                                                                                                    
    owner 'chefuser'
    group 'chefuser'
    mode '0755'
    action :create
  end
end

问题是因为资源的名称 属性 只有一个 (for storing local binaries),它不会遍历作为数组传递的属性。

要使此 foreach 循环正常工作,您需要在资源中使用循环变量 path

将其用作“资源名称”的示例:

[
  "#{node.default['user_home']}/.local",
  "#{node.default['user_home']}/.local/bin"
].each do |path|
  directory path do                                                                                                                                                                                                    
    owner 'chefuser'
    group 'chefuser'
    mode '0755'
    action :create
  end
end