Chef infra chef-节点级别上设置的属性的优先级

Chef infra chef-节点级别上设置的属性的优先级,chef-infra,knife,Chef Infra,Knife,也许我遗漏了文档中的某些内容,但在阅读了在多个位置定义属性时使用的顺序后,我不明白在节点级别设置的属性在等式中的位置 在可以设置和覆盖属性的1到15个级别中,它提到了配方、环境、角色、属性文件,但似乎从来没有提到在节点上定义的属性会发生什么情况,比如通过刀节点编辑… 看起来您只能在节点上定义普通类型的属性?正常属性仅针对列表中的优先级7和8提及。。。属性文件和配方 因此,如果我在节点上设置一个属性,该属性也是在环境和角色级别上定义的,那么谁获胜?有一个属性。如果您在Chef服务器上编辑一个节点对

也许我遗漏了文档中的某些内容,但在阅读了在多个位置定义属性时使用的顺序后,我不明白在节点级别设置的属性在等式中的位置

在可以设置和覆盖属性的1到15个级别中,它提到了配方、环境、角色、属性文件,但似乎从来没有提到在节点上定义的属性会发生什么情况,比如通过
刀节点编辑…

看起来您只能在节点上定义普通类型的属性?正常属性仅针对列表中的优先级7和8提及。。。属性文件和配方

因此,如果我在节点上设置一个属性,该属性也是在环境和角色级别上定义的,那么谁获胜?

有一个属性。如果您在Chef服务器上编辑一个节点对象,或者为节点属性提供一个JSON文件(
-j
选项给Chef solo或Chef client),这些都是“节点”级别。这与从配方中设置属性的级别相同。要实现这一点,您可以使用属性方法(node.normal等)轻松设置配方中的任何级别的节点属性,自动除外。在节点对象本身(在Chef服务器中)上,可以设置默认、正常和覆盖,但不能设置强制默认或强制覆盖,也不能设置自动

我们告诉人们的一般原则是始终使用默认属性:

  • default['thing']='thang'
    -在食谱的属性文件中
  • 节点。配方中的默认值['thing']='thang'
  • “default”:{“thing”:“thang”}
    -在节点对象的JSON中
  • 默认属性(“thing”=>“thang”)
    -在角色()中
  • 通常避免
    环境
    设置属性
  • 当您需要在其他优先级的其他位置设置属性时,您就知道了。:)

    这似乎是武断的过度设计;最初只有节点对象/配方和属性文件,它们只是Ruby哈希。然后我们添加了角色和环境。在某种程度上,也需要设置“默认”值,因为各种组织原因,这些值可以轻易、任意地被覆盖,现在我们有了您今天看到的矩阵。我们现在非常满意,并且认为它为各种各样的Chef用例提供了最大的灵活性

    注意


    这个问题不是重复的-这个问题与cookbook版本有关,这个问题与节点属性优先级有关


    还请注意,由于配方是Ruby的,并且由客户机执行,因此您可以编写库以有趣的方式操作属性。一个例子是。

    在这里回答我自己的问题,以防其他人偶然发现这个问题。厨师医生说有15个优先级别……错了。有16个。如果您编辑一个JSON节点,您可以在那里设置普通属性。这些值取代配方中设置的相同键/值对(具有force_默认值),而不是cookbook属性文件中设置的正常值。此外,Chef文档还暗示您可以在各种类型上设置节点JSON属性。您不能。它只接受普通类型。如果您尝试使用另一种类型,则在使用“刀子编辑节点…”时,它将在保存时从配置中自动删除。此问题不是重复的-此问题与cookbook版本有关,此问题与节点属性优先级有关。您好。。。谢谢你提供的信息,但是你告诉我的不是我在测试时看到的。当我尝试“刀编辑节点…”并尝试设置任何类型的属性键/值对(非正常类型)时,在vim中保存更改后,我只得到输出“节点未更新,跳过节点保存”。当我试图定义默认或覆盖对时,有时也会出现Yajl::ParseError。这是第11.8.2节。您能否给出一个节点json的要点或示例,其中键/值属性设置为正常、默认、覆盖等。。正如“属性优先级”文档页面所示,是否可能?谢谢。好的,没关系。。。我找到了答案,这很烦人默认情况下,“编辑”命令不编辑“自动”、“默认”或“覆盖”属性,为此,必须将-a或--all标志传递给“编辑”命令,这将允许您编辑节点上当前设置的所有属性。文档表明--all仅控制显示的内容。。并不是说它阻止您添加/编辑节点JSON,除非使用。请注意,您不能编辑节点对象上的自动属性。这些都是在chef client运行时由ohai的插件(内置或您自己的)生成的。好的,谢谢。。关于这个话题的最后一个问题。。如果查看和编辑所有节点属性类型的唯一方法是传递--all参数,该参数还列出来自ohai的节点自动信息。如何从服务器备份本地存储在SCM中的节点JSON,而无需下载带有自动信息的JSON。如果它是动态的,实际上不需要存储/备份吗?谢谢。使用刀子下载子命令(在Chef 11中提供,或通过刀子essentials gem)下载JSON对象。自动属性将由节点在还原后下次运行时覆盖。