如何在 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
如果我的数组中有属性,我该如何创建多个目录?
从 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