我有一个厨师食谱,我想要采取节点['cfn'] ['环境']下的所有属性,并将它们写入一个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
但我不喜欢我必须明确列出属性的名称。 如果后来我添加一个新的属性,它会很好,如果它自动包含在写出的XML文件。 所以我尝试了这样的事情:
yml_string = node['cfn']['environment'].to_yaml
但是因为节点实际上是一个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 ...
但是我想要的是这样的:
---- reporting_prefix: Platform2 signal_url: https://cloudformation-waitcondition-us-east-1.s3.amazonaws.com/... environment_class: Dev node_id: i-908adf9
我怎样才能实现所需的yml输出w / o显式列出名称的属性?
这将做的伎俩:
yml_string = YAML::dump(node['cfn']['environment'].to_hash)
这也适用于更好的ruby风格: yml_string = node['cfn']['environment'].to_hash.to_yaml