嘗試建構一個字串。
我可以:
"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")'