【问题标题】:How To Set An Attribute on a Chef Node?如何在 Chef 节点上设置属性?
【发布时间】:2018-02-02 07:29:30
【问题描述】:

Chef 似乎遗漏了一些明显的东西。我想在我的食谱可以访问的节点(文件路径)上设置一个属性。这是因为某个文件位于不同节点的不同位置。

我假设这将在 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? 之类的解决方案建议了一个配方,但是我是否在我的运行列表中指定了特定于节点的收据(类似于

knife bootstrap serverX ...-r unstall_jboss::serverX_setup,install_jboss::small_nfr_server...

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

谢谢 - 就像我说的,我觉得我遗漏了一些明显的东西

【问题讨论】:

    标签: chef-infra knife


    【解决方案1】:

    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"


    B) 另一种更实用的方法:

    围绕您的实际 install_jboss 编写包装食谱。 这涉及:

    • 添加 depends 'install_jboss'(请参阅 metadata 文档中的依赖语法)
    • 在属性文件中设置您希望的属性(警告如果有从其他插入的属性,您必须在之后重新加载包装的说明书属性文件,或者在包装器中重新定义它们)
    • 使用include_recipe 'install_jboss:small_nfr_server' 调用包装器default.rb 中的包装菜谱食谱,此时包装器中的属性优先于install_jboss 菜谱中的属性。

    【讨论】:

    • 谢谢。我是否需要每个节点拥有这些包装说明书之一,或者每个节点只需要一个属性文件?我是否明确调用了节点的正确包装说明书/属性文件,或者当我对节点运行刀引导时可以自动拾取它?
    • 我会为每种类型的节点做一本食谱,所以如果你将来必须制作 2 个具有相同设置的节点,一切都准备好了;)
    • 您仍然必须为节点提供正确的运行列表。目前节点和说明书之间没有神奇的关联(通常耦合到节点名称是一个糟糕的用例)
    • 谢谢。我正在部署许多服务器,这些服务器之间可能存在(小)差异。从你所说的听起来厨师只有一个“坏案例”来处理这种情况?
    • 服务器的标准化远远超出了您的目标,没有任何配置管理系统可以处理得很好。 IP,主机名,可以从chef中的ohai属性派生,并允许参数化模板文件进行配置。但我猜不出你所说的差异
    【解决方案2】:

    一种在不干扰其他属性的情况下为节点设置特定属性的方法(对自动化很有用)描述here

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

    【讨论】:

      猜你喜欢
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多