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

mat*_*ake 3 chef-infra knife

我似乎在厨师身上缺少明显的东西。我想在我的食谱可以访问的节点上设置一个属性(文件路径),这是因为某个文件位于不同节点上的不同位置。

我假设这将在JSON / RB文件或配方中,因此我可以将其视为代码,检入版本控制等。

诸如如何使用刀来编辑ec2节点的Chef属性之类的解决方案-将其作为Knife命令使用,但如上所述,我宁愿有类似配方或文件的内容(似乎更明显:-)

诸如如何在Chef客户端上设置节点属性的解决方案建议一个食谱,但是我是否要在运行列表中指定特定于节点的食谱(类似

knife bootstrap serverX ...-r unstall_jboss::serverX_setup,install_jboss::small_nfr_server...
Run Code Online (Sandbox Code Playgroud)

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

谢谢-就像我说的,我觉得我缺少明显的东西

Ten*_*bai 6

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

  1. 带刀和锉刀:

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

  2. 在这个食谱中

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


B)可能更有用的另一种方法:

在实际情况下写包装食谱install_jboss。这涉及:

  • 添加一个depends 'install_jboss'(请参见元数据 文档中的depends语法)
  • 在属性文件中设置所需的属性(警告是否存在其他属性插值,您必须在之后重新加载已包装的食谱属性文件,或者在包装器中重新定义它们)
  • 使用include_recipe 'install_jboss:small_nfr_server'调用包装器中包装好的食谱,此时,包装器中default.rb的属性优先于install_jboss食谱中的属性。


HUB*_*HUB 5

一种为节点设置某些特定属性而不干扰此处描述的其他属性(对自动化有用)的方法:

knife exec -E 'nodes.find("name:example.com") {|n| n.default["custom"]["attribute"]="value"; n.save}'
Run Code Online (Sandbox Code Playgroud)