【问题标题】:chef-client override runlist does not update attributes on the serverchef-client 覆盖运行列表不更新服务器上的属性
【发布时间】:2017-01-19 02:00:23
【问题描述】:

我有一本带有属性的食谱。我从这本食谱中添加了一个配方来运行节点列表。我在该节点上运行 chef-client 并在 Chef 服务器上查看属性及其值。 后来我对食谱属性进行了更改,上传了食谱,使用-o 选项运行了特定的食谱。我没有看到厨师服务器上属性的更新值。

我在某处读到 -o 选项不会更新厨师服务器。那么是不是我们不应该频繁使用 -o 选项而只将其用于开发目的。

如果食谱总是通过 -o 选项运行,则在服务器上的节点属性上看不到属性和配方(我认为这很糟糕?)。

谢谢 阿莫德

【问题讨论】:

    标签: chef-infra


    【解决方案1】:

    虽然我同意您可能做错了的观点,但如果您需要覆盖运行列表,实现它的一种方法是:

    一) 创建 /etc/chef/alternative.json,下面的内容填充您的替代运行列表:

    {"run_list":[]}

    b) 确保您拥有节点的“真实”运行列表,例如/etc/chef/first-boot.json

    c) 定期运行以下命令刷新统计信息

    厨师客户端-j /etc/chef/empty.json

    d) 当你真的想收敛节点时,使用:

    chef-client -j /etc/chef/first-boot.json

    【讨论】:

      【解决方案2】:

      -o 选项允许使用与平时完全不同的运行列表进行主厨运行,因此不会将其保存到主厨服务器。

      如果您需要定期使用-o 运行,您可能做错了。 使您的配方具有幂等性或对其进行更改,以便可以在某处使用标志(节点属性或数据包项)启用它以进行运行,而无需修改节点运行列表

      如果没有用例,很难就如何解决这个问题给出正确的建议。

      【讨论】:

      • 谢谢。我很感激你的回答。但我正在寻找关于为什么它不起作用的详细答案。从服务器我不知道是否有人使用 -o 运行了配方(虽然它确实影响了节点,但它不会通知服务器。鬼鬼祟祟?)。我知道 -o 不保存数据。但问题是,为什么要这样设计。这对我有误导,所以它可能是一个糟糕的设计。我并不是要解决任何特定的用例。再次感谢。
      • 厨师-客户选项的文档是here。 -o 背后的想法是运行特定的配方,可能是在完整运行之前修复 chef-client conf,或者只是运行综合更新程序配方,或者在完整的运行列表运行中无法处理的一次性修改。
      • -o 的全部意义在于允许一次性覆盖运行列表。因此,假设您不想保存数据。为什么不呢?你“通常”会运行一堆将数据保存在节点上的配方。如果允许您的“一次性”运行列表生成node.save,那么您的所有正常节点数据都将丢失。 -o 的目的是为您提供避免这种情况的方法。这样您就可以在不损坏节点数据的情况下运行一次性的事情(例如修复错误)。
      猜你喜欢
      • 2020-06-28
      • 1970-01-01
      • 2016-04-24
      • 2016-02-29
      • 2018-07-30
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多