puppet の templateで奇妙な挙動
puppetのtemplateで奇妙な挙動を発見。
テンプレート中で
<% name ||= 'default_name' %>
などと、変数のデフォルト値を設定しようとすると、manifestでどう書いてもdefault_nameが代入されてしまう。
しかも、
<%=name%>
<% name ||= 'default_name' -%>
<%=name%>
class xxx{
$name = 'true_name'
file{
content => template('test.erb')
}
}
とすると、
true_name
default_name
なんて生成される。(erbを直接rubyから実行するとtrue_nameが2回生成される)
puppet wikiを参考に
<% name = 'aaa' unless has_variable?('name')
とすると、なぜかnameがnilになってしまう。
なぜ???
とりあえず、
<%
if has_variable?('name')
name2 = name
else
name2 = 'default_name'
end
%>
とし、name2を使えば問題が回避できた。