関数呼び出しと変数をパラメータとする Puppet 文字列補間

関数呼び出しと変数をパラメータとする Puppet 文字列補間

文字列を構築しようとしています。

できます:

"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")'

関連情報