2016
の時点でOpsCodeはLWRP
と代替のHWRP
を推奨しています。むしろcustom resources
を使用することをお勧めします。シェフのカスタムリソース:変更可能なプロパティまたは代替
、これは理にかなっている間、それが活用ルビーの観点から望まれるためにたくさんの葉(私が誤解していない限り?)
私はいくつかのブール値プロパティに基づいて、配列を変更できるようにしたいと思います。私はその後のように、テンプレートに渡すためにその配列を使用することができます。
property :get_iptables_info, [TrueClass, FalseClass], default: false
property :get_pkglist, [TrueClass, FalseClass], default: false
property :cw_logs, Array, default: [], required: false
action :create do
ruby_block 'cw_iptables' do
block do
new_resource.cw_logs.push({ "#{new_resource.custom_dir}/iptables/iptables.txt" => { "log_group_name" => new_resource.log_group_name+"/iptables"}})
end
action :run
only_if {new_resource.get_iptables_info}
end
template "my_template" do
variables ({:logstreams => cw_logs})
end
end
その後、私のテンプレートで:
<% @logstreams.each_pair do |path, _object| %>
["#{path}"]
log_group_name = _object["log_group_name"]
<% end %>
問題は性質がimmutable
であるということです。だからエラーが出る:
RuntimeError
------------
ruby_block[cw_iptables] (/tmp/kitchen/cache/cookbooks/custom_cw/resources/logs.rb line 43) had an error: RuntimeError: can't modify frozen Array
これを行う正しい方法は何ですか?リソース内でルビコードを書いてモジュール化し、methods/functions
を使用する正しい方法は何ですか?
私は、ドキュメント 'prefix = '/ opt/languages/node''に変数を定義することができました。 –
どのようにして再利用可能な関数をリソース? –
アクションブロック内で機能を使用できるようにするには、 'action_class do ... end'ヘルパーを使用します。ブロック内で定義したメソッドは、内部のアクションから使用できます。 – coderanger