如何在Chef食谱中正确遍历role_multi_module.json的员工JSON数组?
Chef食谱遍历员工数组的正确方法
原代码的问题
- 变量名错误:循环中定义的迭代变量是
employee,但引用时误写为employees,导致逻辑异常。 - 资源属性覆盖:在同一个
execute资源内循环赋值command,Chef的声明式模型会保留最后一次赋值的结果,所以最终只会执行第二个员工的echo命令。
正确实现方式
方式一:合并命令一次性执行
将所有员工的echo命令用分号拼接,通过一个execute资源完成所有输出:
execute 'test-multi-module' do command node['role_multi_module']['employees'].map do |employee| "echo #{employee['name']} #{employee['email']}" end.join('; ') end
方式二:为每个员工创建独立执行资源
通过循环生成多个execute资源,每个资源对应一个员工,确保每个命令都能执行:
node['role_multi_module']['employees'].each do |employee| execute "test-multi-module-#{employee['name']}" do command "echo #{employee['name']} #{employee['email']}" end end
内容的提问来源于stack exchange,提问作者Shyam
相关产品推荐
相关产品推荐

