Java 如何打印或调试属性
我创建了一个带有属性的Chef cookbook,然后尝试将代码提升到节点,并传递附加属性和/或覆盖默认值Java 如何打印或调试属性,java,ruby,attributes,chef-infra,Java,Ruby,Attributes,Chef Infra,我创建了一个带有属性的Chef cookbook,然后尝试将代码提升到节点,并传递附加属性和/或覆盖默认值 是否可以打印属性树以查看加载了哪些属性以及覆盖了哪些属性?您可以使用节点.debug\u value显示单个属性。这将在每个级别打印该属性的值。但是,在每个属性的每个级别执行此操作都比较困难(我不确定如何执行此操作)。此外,由于ohai提供的大量属性,我不确定您是否愿意这样做 如果您的厨师跑步正确完成,您可以执行刀节点显示-l(小写l)。这将向您显示实际值,但它提供了大量数据,并且不会告诉
是否可以打印属性树以查看加载了哪些属性以及覆盖了哪些属性?您可以使用
节点.debug\u value
显示单个属性。这将在每个级别打印该属性的值。但是,在每个属性的每个级别执行此操作都比较困难(我不确定如何执行此操作)。此外,由于ohai提供的大量属性,我不确定您是否愿意这样做
如果您的厨师跑步正确完成,您可以执行
刀节点显示-l
(小写l)。这将向您显示实际值,但它提供了大量数据,并且不会告诉您哪些值是默认值、正常值、覆盖值等。要从聚合的Chef内部获取整个属性树,而不是通过Chef服务器获取,这在solo环境中是无用的,以一种有用的形式查看。有关详细信息,请参阅“”
要获得打印精美的日志,您可以使用Chef's JSON库的精美打印机:
output="#{Chef::JSONCompat.to_json_pretty(node.to_hash)}"
log output
或者将一个本地文件写入您的客户端:
output="#{Chef::JSONCompat.to_json_pretty(node.to_hash)}"
file '/tmp/node.json' do
content output
end
请注意,这是聚合节点,因此您不会获得使用节点.debug_value
可以获得的默认/override/etc.级别,但是如果您实际上不知道属性的名称/路径,或者需要循环使用多个属性,则这可能是您的朋友
您将得到一个巨大的结果,看起来像这个高度精简的示例:
{
"chef_type": "node",
"name": "node.example.com",
"chef_environment": "_default",
"build-essential": {
"compile_time": false
},
"homebrew": {
"owner": null,
"auto-update": true,
...
},
"recipe": [
"example"
],
"run_list": [
"recipe[example]"
]
}
“”拥有漂亮的打印机指针。通过@keen给出答案,这将以YAML格式生成更具可读性的输出
output = node.to_yaml
file '/var/node.yaml' do
content output
end
有时,在设置变量之后,从节点读取变量可能很容易
knife node edit <hostname-here> -a
刀节点编辑-a
@Tensibai的问题是公平的,Cherry正在尝试对厨师引导进行故障排除。你提供的链接是基本的,如果我是厨师的初学者,我会发现很难找到答案。这不是一个新的SO用户,所以如果你不喜欢这个问题,请直接投下一票。4个关于同一主题的问题是一个相当大的问题。在回顾之后,现在只剩下一个问题了,我的第一条评论没有什么兴趣,但是关于属性优先级的链接仍然有效。所以我怀疑是否要移除它。周一将重写所有@markoconnor(因为我在电话上没有完成,所以不确定“戳”)以扩展@Tejay的答案,并提供一些示例-对于node['minecraft']['properties']
使用node.debug_值('minecraft','properties')
了解更多详细信息-