文字列を構築しようとしています。
できます:
"Blah blah ${::osfamily} blah blah"
"Blah blah ${$::osfamily} blah blah"
しかし、変数をパラメータとして関数を呼び出し、文字列補間を機能させるための構文は何でしょうか?
以下のいずれも機能しませんでした:
"Blah blah ${downcase($::osfamily)} blah blah"
"Blah blah ${downcase($osfamily)} blah blah"
"Blah blah ${downcase(::osfamily)} blah blah"
"Blah blah ${$downcase(osfamily)} blah blah"
"Blah blah ${$downcase($osfamily)} blah blah"
等々。
私が得たのはこれだけです:
Error 400 on SERVER: Syntax error at '('; expected ')'
それはPuppet言語でも可能でしょうか?
答え1
それは不可能です。Puppet の言語は少々特異で、動作すると思われる多くのことが、実際には動作しません。次のように、関数からの戻り値を変数に割り当て、その変数を文字列に挿入する必要があります。
$downcased_osfamily = downcase($::osfamily)
"Blah blah ${downcased_osfamily} blah blah"
もちろん、文字列自体は役に立たないので、その文字列を独自の変数に割り当てるか、リソース属性の値として使用すると考えられます。
答え2
それなかった可能ですが、今はそうではありません。あなたの例を使用すると、次のようになります。
notice("Blah blah ${downcase($::osfamily)} blah blah")
これは Puppet 4.10.x でテストされており、4.6 まで遡って文書化されています。https://puppet.com/docs/puppet/4.6/lang_data_string.html#補間
答え3
bogitの回答に加えて、次の構文を使用することもできます
puppet apply -e 'notice("Blah blah ${::osfamily.downcase} blah blah")'
新しいファクトハッシュも使用したい場合があります
puppet apply -e 'notice("Blah blah ${facts['os']['family'].downcase} blah blah")'