- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近刚开始使用chef
。我收集到的属性存储在一个名为node
的大型整体哈希中,可用于您的配方和模板。
似乎有多种定义属性的方法
直接在配方本身
在属性文件下-例如attributes/default.rb
在传递给chef-solo
调用的JSON对象中。例如chef-solo -j web.json
鉴于以上3,我很好奇
这些都是可以定义属性的方法吗?
这里的优先顺序是什么?我假设这些方法之一取代其他方法
#3(JSON
方法)仅对chef-solo
有效吗?
我看到同时定义了node
和default
哈希。有什么不同?我最好的猜测是,在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/
最近开始学习MongoDB。今天老师教了我们 mongoexport 命令。在练习时,我遇到了一个典型的问题,包括教练在内的其他同学都没有遇到过。我在我的 Windows 10 机器上使用 Mongo
我是 JSON Schema 的新手,读过什么是 JSON Schema 等等。但我不知道如何将 JSON Schema 链接到 JSON 以针对该 JSON Schema 进行验证。谁能解释一下?
在 xml 中,我可以在另一个 xml 文件中包含一个文件并使用它。如果您的软件从 xml 获取配置文件但没有任何方法来分离配置,如 apache/ngnix(nginx.conf - site-av
我有一个 JSON 对象,其中包含一个本身是 JSON 对象的字符串。我如何反序列化它? 我希望能够做类似的事情: #[derive(Deserialize)] struct B { c: S
考虑以下 JSON { "a": "{\"b\": 12, \"c\": \"test\"}" } 我想定义一个泛型读取 Reads[Outer[T]]对于这种序列化的 Json import
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 11 个月前关闭。 Improve
我的旧项目在 MySQL 中有 Standard JSON 格式的数据。 对于我在 JS (Node.js) 和 DynamoDB 中的全新项目,关于 Standard JSON格式: 是否建议将其转
JSON 值字符串、数字、true、false、null 是否是有效的 JSON? 即,是 true 一个有效的 JSON 文档?还是必须是数组/对象? 一些验证器接受这个(例如 http://jso
我有一个 JSON 字符串,其中一个字段是文本字段。这个文本字段可以包含用户在 UI 中输入的文本,如果他们输入的文本是 JSON 文本,也许是为了说明一些编码,我需要对他们的文本进行编码,以便它不会
我正在通过 IBM MQ 调用处理数据,当由 ColdFusion 10 (10,0,11,285437) 序列化时,0 将作为 +0.0 返回,它会导致无效的 JSON并且无法反序列化。 stPol
我正在从三个数组中生成一个散列,然后尝试构建一个 json。我通过 json object has array 成功了。 require 'json' A = [['A1', 'A2', 'A3'],
我从 API 接收 JSON,响应可以是 30 种类型之一。每种类型都有一组唯一的字段,但所有响应都有一个字段 type 说明它是哪种类型。 我的方法是使用serde .我为每种响应类型创建一个结构并
我正在下载一个 JSON 文件,我已将其检查为带有“https://jsonlint.com”的有效 JSON 到文档目录。然后我打开文件并再次检查,结果显示为无效的 JSON。这怎么可能????这是
我正在尝试根据从 API 接收到的数据动态创建一个 JSON 对象。 收到的示例数据:将数据解码到下面给出的 CiItems 结构中 { "class_name": "test", "
我想从字符串转换为对象。 来自 {"key1": "{\n \"key2\": \"value2\",\n \"key3\": {\n \"key4\": \"value4\"\n }\n
目前我正在使用以下代码将嵌套的 json 转换为扁平化的 json: import ( "fmt" "github.com/nytlabs/gojsonexplode" ) func
我有一个使用来自第三方 API 的数据的应用程序。我需要将 json 解码为一个结构,这需要该结构具有“传入”json 字段的 json 标签。传出的 json 字段具有不同的命名约定,因此我需要不同
我想使用 JSON 架构来验证某些值。我有两个对象,称它们为 trackedItems 和 trackedItemGroups。 trackedItemGroups 是组名称和 trackedItem
考虑以下案例类模式, case class Y (a: String, b: String) case class X (dummy: String, b: Y) 字段b是可选的,我的一些数据集没有字
我正在存储 cat ~/path/to/file/blah | 的输出jq tojson 在一个变量中,稍后在带有 JSON 内容的 curl POST 中使用。它运作良好,但它删除了所有换行符。我知
我是一名优秀的程序员,十分优秀!