使用函数调用和变量作为参数的木偶弦插值

使用函数调用和变量作为参数的木偶弦插值

尝试构造一个字符串。

我可以:

"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

除了 bogit 的答案之外,您还可以使用以下语法

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

你可能还想使用较新的事实哈希

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

相关内容