chef-infra - 如何在 Chef 中使用 foreach 创建目录(带属性)
问题描述
如果我的数组中有属性,如何创建多个目录?
从我用下面的示例代码测试过的厨师目录资源文档中,这是可行的。但是,如果数组包含属性,我会遇到麻烦,而且我不太确定如何查看它在做什么。
%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
解决方案
问题是因为资源的 name 属性只有一个 ( 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
推荐阅读
- javascript - Javascript/JSON/nodejs:将一组值随机分配给一组玩家而不给玩家自己输入的值的最佳方法
- javascript - 测试一个函数是否在另一个函数 Jest 中被调用
- python - 在模拟的导入类上调用断言的函数失败
- amazon-web-services - 验证失败:[在 {/} 中遇到不支持的属性:[EnvironmentVariables]]
- python - 输入不兼容
- javascript - 可以在从 UI 以角度上传之前压缩大文件吗?
- python-3.x - 如何过滤 Series.split() 返回的 Series 中的列表项
- c# - 将服务实例作为方法参数传递
- google-chrome - 飞行前请求仅在 Chrome 上返回 404
- openssl - Raspberry Pi 4 上的 Ubuntu 20.04 上的 asio.ssl 错误“初始化时关闭”