Puppet 3のTemplatesで使えるscope新記法

#puppet

PuppetのTemplatesを使うとき、スコープ外の変数を参照するためにはscope.lookupvarを使っていたが、どうやらPuppet 3から新しい記法が使えるようになっていた。

Puppet 3 introduces an easier syntax: you can use the square bracket operator ([]) on the scope object as though it were a hash.
https://docs.puppetlabs.com/guides/templating.html#out-of-scope-variables

今まではscope.lookupvar('lookup::var')のようにメソッドっぽかったが、新しい記法ではハッシュのように取り出せるようになった。

<%= scope['lookup::var'] %>

例えばerbやinline_templateで以下のように使うことができる。

# 古い記法
notice inline_template('Lookup OS: <%= scope.lookupvar("::operatingsystem") %>')

# 新しい記法
notice inline_template('Lookup OS: <%= scope["::operatingsystem"] %>')

ワンライナで書くと以下のようになる。エスケープ文字でやや見づらいが、Facterの値を取得出来ていることが分かる。

$ puppet apply -e "notice inline_template('Lookup OS: <%= scope[\\'::operatingsystem\\'] %>')"
Notice: Scope(Class[main]): Lookup OS: Darwin
Notice: Compiled catalog for okkun.local in environment production in 0.05 seconds
Notice: Finished catalog run in 0.03 seconds

タイプ数を減らせるし、見た目もマシになっているので、今後はscope['lookup::var']な書き方にしてするのが良さそうだ。