Интерполяция строк марионеток с вызовом функции и переменной в качестве параметра
Попытка построить строку.
Я могу сделать:
"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 ')'
Это вообще возможно на марионеточном языке?
3 ответа
Это невозможно Язык Puppet немного идеосинкразичен, во многих вещах, которые, как вы думаете, сработают, просто... нет. Вам нужно будет присвоить возвращаемое значение из функции переменной, а затем вставить эту переменную в строку, например:
$downcased_osfamily = downcase($::osfamily)
"Blah blah ${downcased_osfamily} blah blah"
Конечно, строка сама по себе бесполезна, поэтому, вероятно, вы присваиваете эту строку своей собственной переменной или используете ее в качестве значения для атрибута ресурса.
Это было невозможно, но это сейчас. Следующее работает на вашем примере:
notice("Blah blah ${downcase($::osfamily)} blah blah")
Это было проверено на Puppet 4.10.x, оно задокументировано еще в 4.6: https://puppet.com/docs/puppet/4.6/lang_data_string.html
В дополнение к ответу Bogit вы также можете использовать следующий синтаксис
puppet apply -e 'notice("Blah blah ${::osfamily.downcase} blah blah")'
Вы также можете использовать более новый хэш фактов, а также
puppet apply -e 'notice("Blah blah ${facts['os']['family'].downcase} blah blah")'