Интерполяция строк 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 ')'

Возможно ли это вообще на языке кукол?

решение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")'

Связанный контент