如何在Chef节点上设置属性?

时间:2015-09-24 09:47:27

标签: chef knife

我似乎错过了与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...

我宁愿不使用环境,因为此信息特定于节点,而不是环境。

谢谢 - 就像我说的那样,我觉得我错过了一些明显的东西

2 个答案:

答案 0 :(得分:6)

A)问题的原始解决方案:

  1. 用刀和文件:

    knife node edit <nodename>knife node show <nodename> -F json > nodename.json相同,使用您喜欢的编辑器编辑json文件,然后knife node from file nodename.json

  2. 在此

    的配方中

    在食谱中你可以做node.set['My']['Attribute'] = "/path/to/file"

  3. B)另一种可以更有用的方法:

    围绕实际install_jboss编写包装器食谱。 这包括:

    • 添加depends 'install_jboss'(请参阅metadata文档中的depends语法)
    • 在属性文件中设置您想要的属性(警告是否有从其他文件中插入的属性,您必须在之后重新加载包装的cookbook属性文件,或者在您的包装器中重新定义它们)
    • 使用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}'