使用函數呼叫和變數作為參數的木偶字串插值

使用函數呼叫和變數作為參數的木偶字串插值

嘗試建構一個字串。

我可以:

"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#interpolation

答案3

除了博吉特的回答之外,您還可以使用以下語法

puppet apply -e 'notice("Blah blah ${::osfamily.downcase} blah blah")'

您可能還想使用較新的事實哈希

puppet apply -e 'notice("Blah blah ${facts['os']['family'].downcase} blah blah")'

相關內容