Puppet-String-Interpolation mit Funktionsaufruf und einer Variablen als Parameter

Puppet-String-Interpolation mit Funktionsaufruf und einer Variablen als Parameter

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")'

verwandte Informationen