Interpolación de cadenas de marionetas con llamada a función y una variable como parámetro

Interpolación de cadenas de marionetas con llamada a función y una variable como parámetro

Intentando construir una cuerda.

Puedo hacer:

"Blah blah ${::osfamily} blah blah"

"Blah blah ${$::osfamily} blah blah"

Pero, ¿cuál es la sintaxis para llamar a una función con una variable como parámetro y hacer que funcione la interpolación de cadenas?

Ninguno de los siguientes funcionó:

"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" etcétera.

Todo lo que obtengo es: Error 400 on SERVER: Syntax error at '('; expected ')'

¿Es eso posible en el lenguaje títere?

Respuesta1

No es posible. El lenguaje de Puppet es un poco ideosincrásico, en el sentido de que muchas cosas que uno pensaría que funcionarían pero... no lo hacen. Deberá asignar el valor de retorno de la función a una variable y luego interpolar esa variable en la cadena, así:

$downcased_osfamily = downcase($::osfamily)
"Blah blah ${downcased_osfamily} blah blah"

Por supuesto, una cadena por sí sola no sirve de nada, por lo que presumiblemente estás asignando esa cadena a una variable propia o usándola como valor para un atributo de recurso.

Respuesta2

Élno fueposible, pero lo es ahora. Lo siguiente funciona usando su ejemplo:

notice("Blah blah ${downcase($::osfamily)} blah blah")

Esto se probó en Puppet 4.10.x, está documentado desde 4.6:https://puppet.com/docs/puppet/4.6/lang_data_string.html#interpolation

Respuesta3

Además de la respuesta de bogit, también puedes utilizar la siguiente sintaxis

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

Es posible que también quieras utilizar el hash de datos más reciente.

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

información relacionada