私の Chef クックブック (mailman 用) では、ハッシュであり、テンプレートに書き込みたいすべての構成オプションを含む属性を使用したいと考えています ( chef-client クックブックでの方法と同様)。
だから私は私の属性に持っていたい:
default[:myapp][:config] = {
"I_AM_A_STRING" => "fooo",
"I_AM_AN_INT" => 123,
"I_AM_AN_ARRAY" => ["abc", "cde"]
}
出力として、次のものが必要です(mailman互換):
I_AM_A_STRING = 'fooo'
I_AM_AN_INT = 123
I_AM_AN_ARRAY = ['abc', 'cde']
しかし、うまくいきません。
問題をデバッグするために、erubis テンプレートに次のコードを追加しました。
<% node[:myapp][:config].each_pair do |key, value| -%>
<% case value.class %>
<% when Chef::Node::ImmutableArray %>
# <%= key %> is type <%= value.class %>, used when Chef::Node::ImmutableArray
<%= key %> = ['<%= value.join("','") %>']
<% when Fixnum %>
# <%= key %> is type <%= value.class %>, used when Fixnum
<%= key %> = <%= value %> #fixnum
<% when String %>
# <%= key %> is type <%= value.class %>, used when String
<%= key %> = '<%= value %>' #string
<% else %>
# <%= key %> is type <%= value.class %>, used else
<%= key %> = '<%= value %>'
<% end -%>
<% end -%>
だから私は を使ってcase .. when
を区別したいのですvalue.class
。しかし、どのwhen
条件も一致しません。したがって、出力は次のとおりです。
# I_AM_A_STRING is type String, used else
I_AM_A_STRING = 'fooo'
# I_AM_AN_INT is type Fixnum, used else
I_AM_AN_INT = '123'
# I_AM_AN_ARRAY is type Chef::Node::ImmutableArray, used else
I_AM_AN_ARRAY = '["abc", "cde"]'
を試してみるwhen Whatever.class
と、最初when
はすべてのタイプに一致します。
私は何を間違っていますか?