如何从节点的顶级属性值创build哈希或yml?

我有一个厨师食谱,我想要采取节点['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