gpt4 book ai didi

json - 在Chef中使用属性

转载 作者:行者123 更新时间:2023-12-01 03:40:47 25 4
gpt4 key购买 nike

最近刚开始使用chef。我收集到的属性存储在一个名为node的大型整体哈希中,可用于您的配方和模板。

似乎有多种定义属性的方法


直接在配方本身
在属性文件下-例如attributes/default.rb
在传递给chef-solo调用的JSON对象中。例如chef-solo -j web.json


鉴于以上3,我很好奇


这些都是可以定义属性的方法吗?
这里的优先顺序是什么?我假设这些方法之一取代其他方法
#3(JSON方法)仅对chef-solo有效吗?
我看到同时定义了nodedefault哈希。有什么不同?我最好的猜测是,在default中定义的attributes/default.rb哈希被合并到node哈希中?


谢谢!

最佳答案

您的最后一个问题可能是最容易回答的问题。在属性文件中,您不必键入“ node”,因此可以在attributes / default.rb中输入以下内容:


default['foo']['bar']['baz'] = 'qux'

与食谱/whatever.rb中的内容完全相同:

node.default['foo']['bar']['baz'] = 'qux'

回想一下,对于配方和属性使用不同的语法会令人困惑,但是这种设计选择可以追溯到非常古老的Chef版本。


-j选项可用于chef-client或chef-solo,并且都将设置属性。请注意,这些将是“正常”属性,这些属性在节点对象中保持不变,通常不建议使用。但是,服务器上的“ run_list”,“ chef_environment”和“ tags”是通过这种方式实现的。通常不建议使用其他“常规”属性,并避免在配方(或属性)文件中使用node.normal['foo'] = 'bar'node.set['foo'] = 'bar'。区别在于,如果从配方中删除node.normal行,则节点上的旧设置将保留,而如果您从配方中删除node.default设置,则当您在节点上运行Chef-client时,该设置将保留被删除。


Chef-Client运行中要实现此目的的原因是,在运行开始时,客户端发出GET以从服务器获取其旧节点文档。然后,它擦除默认,覆盖和自动(ohai)属性,同时保留“普通”属性。默认,覆盖和自动属性的行为最有意义-您可以在运行开始时重新开始,然后构造所有状态,如果不在配方中,则在那里看不到任何值。但是,通常run_list是在节点上设置的,而节点通常不会管理自己的run_list。为了使run_list持久存在,这是一个常规属性。

不幸的是,选择“普通”一词是很不幸的,选择“ node.set”设置“普通”属性也是不幸的。尽管这些看起来似乎是用于设置属性的明显选择,但用户应避免使用这些属性。再次的问题是,它们首先运行,并且对于run_list是必需的和必需的。通常只保留默认和覆盖属性。通常,您可以使用默认属性完成大部分工作,应该优先使用默认属性。


这里有一个很大的优先级图:


https://docs.chef.io/attributes.html#attribute-precedence

这是属性优先级的最终真理来源。


该图描述了可以定义属性的所有不同方式。


Chef Attributes的问题在于,他们已经有机成长,并且萌芽了许多选择,以帮助那些将自己描绘成一个角落的用户。通常,您永远不需要触摸自动,正常,force_default或force_override属性级别。您还应该避免在配方代码中设置属性。您应该将配方中的设置属性移动到属性文件。剩下的就是这些用于设置属性的地方:


在初始-j参数中(设置普通属性,应限制使用此参数来设置run_state,而使用此参数通常会产生气味)
在角色文件中作为默认或覆盖优先级级别(尽管请小心这一点,因为角色没有版本化,如果您多次触摸这些属性,将会导致生产问题)
在Cookbook属性文件中作为默认值或覆盖优先级(在此处应设置大多数属性)
在环境文件中作为默认值或优先级(在数据中心中的DNS服务器等设置中很有用,尽管您也可以为此使用角色和/或食谱)


您也可以在配方中设置属性,但是这样做时,您总是会在通过Chef配方运行的两阶段编译-融合解析器中获得下一课。如果您有需要相互通信的配方,则最好使用node.run_state,它只是一个哈希,不会写为节点属性。您可以将node.run_state [:foo] ='bar'放在一个配方中,然后在另一个配方中读取它。您可能会看到设置属性的配方,因此您应该意识到这一点。

希望有帮助。

关于json - 在Chef中使用属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31057926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com