Chef
如何從節點的頂級屬性值創建雜湊或 yml?
我有一個廚師食譜,我想在其中獲取節點下的所有屬性
$$ ‘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
但我不喜歡我必須明確列出屬性的名稱。如果稍後我添加一個新屬性,如果它自動包含在寫出的 yml 文件中會很好。所以我嘗試了這樣的事情:
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 輸出?
這可以解決問題:
yml_string = YAML::dump(node['cfn']['environment'].to_hash)
這也有效並且更好的紅寶石風格:
yml_string = node['cfn']['environment'].to_hash.to_yaml