我似乎错过了与Chef明显不同的东西。我想在我的cookbook可以访问的节点(文件路径)上设置一个属性。这是因为某个文件位于不同节点的不同位置。
我假设这将是一个JSON / RB文件或配方,所以我可以将其视为代码,检查版本控制等。
像How can I edit a chef attribute of an ec2 node using knife这样的解决方案 - 将其作为Knife命令,但如上所述,我宁愿拥有类似食谱或文件的东西(似乎更有形:-))
像How to set Node Attributes on a Chef Client?这样的解决方案建议了一个配方,但是我在运行列表中指定了我的节点特定的recipe(类似
knife bootstrap serverX ...-r unstall_jboss::serverX_setup,install_jboss::small_nfr_server...
我宁愿不使用环境,因为此信息特定于节点,而不是环境。
谢谢 - 就像我说的那样,我觉得我错过了一些明显的东西
答案 0 :(得分:6)
A)问题的原始解决方案:
用刀和文件:
knife node edit <nodename>
与knife node show <nodename> -F json > nodename.json
相同,使用您喜欢的编辑器编辑json文件,然后knife node from file nodename.json
。
在此
的配方中在食谱中你可以做node.set['My']['Attribute'] = "/path/to/file"
B)另一种可以更有用的方法:
围绕实际install_jboss
编写包装器食谱。
这包括:
depends 'install_jboss'
(请参阅metadata文档中的depends语法)include_recipe 'install_jboss:small_nfr_server'
在包装器default.rb
中调用包装的食谱配方,此时包装器中的属性优先于install_jboss
食谱中的属性。答案 1 :(得分:2)
为节点设置某些特定属性而不打扰其他属性(对自动化很有用)的方法描述here:
knife exec -E 'nodes.find("name:example.com") {|n| n.default["custom"]["attribute"]="value"; n.save}'