Tentando construir uma string.
Eu posso fazer:
"Blah blah ${::osfamily} blah blah"
"Blah blah ${$::osfamily} blah blah"
Mas qual é a sintaxe para chamar uma função com uma variável como parâmetro e fazer com que a interpolação de strings funcione?
Nenhuma das seguintes opções funcionou:
"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"
e assim por diante.
Tudo que recebo é:
Error 400 on SERVER: Syntax error at '('; expected ')'
Isso é possível na linguagem Puppet?
Responder1
Não é possível. A linguagem do Puppet é um pouco ideossincrática, pois muitas coisas que você pensaria que funcionariam, mas... não funcionam. Você precisará atribuir o valor de retorno da função a uma variável e, em seguida, interpolar essa variável na string, assim:
$downcased_osfamily = downcase($::osfamily)
"Blah blah ${downcased_osfamily} blah blah"
É claro que uma string por si só não tem utilidade, então presumivelmente você está atribuindo essa string a uma variável própria ou usando-a como valor para um atributo de recurso.
Responder2
Istonão foipossível, mas é agora. O seguinte funciona usando seu exemplo:
notice("Blah blah ${downcase($::osfamily)} blah blah")
Isso foi testado no Puppet 4.10.x e está documentado já em 4.6:https://puppet.com/docs/puppet/4.6/lang_data_string.html#interpolation
Responder3
além da resposta do bogit, você também pode usar a seguinte sintaxe
puppet apply -e 'notice("Blah blah ${::osfamily.downcase} blah blah")'
você também pode querer usar o hash de fatos mais recente
puppet apply -e 'notice("Blah blah ${facts['os']['family'].downcase} blah blah")'