我有一个厨师食谱,我想获取 node['cfn']['environment'] 下的所有属性并将它们写入 yml 文件。我可以做这样的事情(它工作正常):
content = {
"environment_class" => node['cfn']['environment']['environment_class'],
"node_id" => node['cfn']['environment']['node_id'],
"reporting_prefix" => node['cfn']['environment']['reporting_prefix'],
"cfn_signal_url" => node['cfn']['environment']['signal_url']
}
yml_string = YAML::dump(content)
file "/etc/configuration/environment/platform.yml" do
mode 0644
action :create
content "#{yml_string}"
end
Run Code Online (Sandbox Code Playgroud)
但我不喜欢我必须明确列出属性的名称。如果稍后我添加一个新属性,如果它自动包含在写出的 yml 文件中,那就太好了。所以我尝试了这样的事情:
yml_string = node['cfn']['environment'].to_yaml
Run Code Online (Sandbox Code Playgroud)
但是因为节点实际上是一个 Mash,所以我得到了一个像这样的 platform.yml 文件(它包含很多我不想要的意外嵌套):
--- !ruby/object:Chef::Node::Attribute
normal:
tags: []
cfn:
environment: &25793640
reporting_prefix: Platform2
signal_url: https://cloudformation-waitcondition-us-east-1.s3.amazonaws.com/...
environment_class: Dev
node_id: i-908adf9
...
Run Code Online (Sandbox Code Playgroud)
但我想要的是这个:
----
reporting_prefix: Platform2
signal_url: https://cloudformation-waitcondition-us-east-1.s3.amazonaws.com/...
environment_class: Dev
node_id: i-908adf9
Run Code Online (Sandbox Code Playgroud)
如何在不按名称显式列出属性的情况下实现所需的 yml 输出?
这将解决问题:
yml_string = YAML::dump(node['cfn']['environment'].to_hash)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6759 次 |
| 最近记录: |