Versuch, eine Zeichenfolge zu konstruieren.
Ich kann:
"Blah blah ${::osfamily} blah blah"
"Blah blah ${$::osfamily} blah blah"
Aber wie lautet die Syntax, um eine Funktion mit einer Variablen als Parameter aufzurufen und die Zeichenfolgeninterpolation funktionieren zu lassen?
Nichts davon hat funktioniert:
"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"
und so weiter.
Ich bekomme nur Folgendes:
Error 400 on SERVER: Syntax error at '('; expected ')'
Ist das in der Puppet-Sprache überhaupt möglich?
Antwort1
Das ist nicht möglich. Puppets Sprache ist ein wenig eigenwillig, da viele Dinge, von denen man annehmen würde, dass sie funktionieren, einfach nicht funktionieren. Sie müssen den Rückgabewert der Funktion einer Variablen zuweisen und diese Variable dann in den String interpolieren, wie folgt:
$downcased_osfamily = downcase($::osfamily)
"Blah blah ${downcased_osfamily} blah blah"
Natürlich ist ein String allein nutzlos, daher weisen Sie diesen String vermutlich einer eigenen Variablen zu oder verwenden ihn als Wert für ein Ressourcenattribut.
Antwort2
Eswar nichtmöglich, aber jetzt ist es so. Folgendes funktioniert an deinem Beispiel:
notice("Blah blah ${downcase($::osfamily)} blah blah")
Dies wurde auf Puppet 4.10.x getestet und ist bereits ab 4.6 dokumentiert:https://puppet.com/docs/puppet/4.6/lang_data_string.html#interpolation
Antwort3
zusätzlich zu bogit's Antwort können Sie auch die folgende Syntax verwenden
puppet apply -e 'notice("Blah blah ${::osfamily.downcase} blah blah")'
Möglicherweise möchten Sie auch den neueren Fakten-Hash verwenden
puppet apply -e 'notice("Blah blah ${facts['os']['family'].downcase} blah blah")'