【问题标题】:what is the precedence for chef/knife bootstrap json attributes厨师/刀引导json属性的优先级是什么
【发布时间】:2014-10-01 21:03:27
【问题描述】:

Chef 属性优先级的文档在这里:https://docs.getchef.com/chef_overview_attributes.html

但是,文档并没有真正解释对通过刀引导命令的 -j 标志传递的属性应用什么级别。

我问的原因是因为我正在传递属性,而其中一些属性没有正确应用到我的运行中。

【问题讨论】:

  • 你能发布你的刀命令吗?您传入的 json 格式对于获得正确的结果很重要。

标签: ruby chef-infra knife


【解决方案1】:

通过-j传入的东西被设置为节点数据,即normal/set级别。

【讨论】:

  • 和平常一样,只是一个别名。该级别通常称为normal,但用于访问它的API 是node.set
  • 您会建议什么作为正确的调试过程来找出为什么没有从该 json 标志中提取属性并将其应用于运行?我已经检查了链中的属性,并且所有内容都设置为默认值。
  • 在你的配方文件中:require 'pp'; pp node.debug_value('some', 'attribute', 'path')
  • 好的,所以我的问题与传入的错误属性无关,而是与 Chef 在编译阶段如何处理属性有关。你是怎么做到的:node["attribute"] = node["other_attribute"]?我尝试过使用 lambdas 和延迟属性加载,但是当我传入一个普通属性时 node["other_attribute"] 已设置但 node["attribute"] 未设置 - 它被锁定在我在属性文件中设置的位置。
【解决方案2】:

正如@coderanger 所指出的,如果您正确格式化您的json,它们应该处于set 级别。如果您的 Json 格式不正确,它根本不会设置值,但可能不会给您错误。

对于故障排除,您可以使用node.debug_value 查看整个属性树。

或者,如果您想要一个快捷方式,请使用spicerack cookbook's print_attribute_debug 配方来获取并打印它。整个食谱仍然很不成熟,但 README 提供了使用细节,并且非常适合用于调试目的。

【讨论】:

  • 它与格式化无关,不可能通过-j(或任何其他设置节点数据的方法)将事物设置为正常以外的级别。
  • 对不起,我显然没有说得很清楚。我的观点是,如果 Jason 的格式不正确,则根本不会设置属性。但如果它的格式正确,Jason 也不会抛出错误。
猜你喜欢
  • 2014-01-26
  • 2017-11-18
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多