You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chef中如何使用foreach遍历含属性的数组创建多个目录?

Chef遍历含属性的路径数组创建目录的解决方法

错误原因

  • 循环内的directory资源未显式指定path参数,Chef默认将资源名称作为创建路径,你循环内的资源名固定为for storing local binaries,程序不会读取你遍历得到的path变量值。
  • Chef中同一Recipe内的资源名称必须唯一,重复名称的资源只会执行第一个,后续重复资源会被直接跳过,因此不会生成多个目录也不会抛出错误。
  • 额外优化建议:读取属性值时不要使用node.default[:user_home],直接使用node[:user_home]即可,node.default是属性的默认层级,仅在设置属性默认值时使用,读取时直接取合并后的节点属性值更稳妥。

修复代码(循环版本)

["#{node[:user_home]}/.local", "#{node[:user_home]}/.local/bin"].each do |path|
  # 资源名用路径保证唯一,同时Chef默认将资源名作为path参数值
  directory path do
    owner 'chefuser'
    group 'chefuser'
    mode '0755'
    action :create
  end
end

简化方案(无需循环)

如果你只需要创建多层嵌套目录,不需要单独给每层设置权限的话,可以直接使用recursive参数自动创建不存在的父目录:

directory "#{node[:user_home]}/.local/bin" do
  owner 'chefuser'
  group 'chefuser'
  mode '0755'
  recursive true
  action :create
end

内容的提问来源于stack exchange,提问作者user17021867

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:06:04