2016-11-26 4 views
1

Ich versuche, eine der ersten Übungen, einschließlich der hostname und osname Fakten in der /etc/motd abzuschließen. Ich kann das einfach nicht richtig funktionieren lassen. Ich kann kein Element aus einem Hash herausholen.Hash Element Verweis innerhalb Puppe Manifest

Ich benutze die VM bei Puppet, und das Kopieren und Einfügen funktioniert nicht für mich, also werde ich Screenshots verwenden.

enter image description here

So erstelle ich meine motd.pp:

enter image description here

Aber nach puppet apply motd.pp läuft, ich sehe dies:

enter image description here

Ich habe versucht:

So ziemlich jede Permutation, die mir einfällt, und sie ignoriert immer den [name] oder [os][name] Teil der Variablen.

Antwort

2

Es gibt zwei Möglichkeiten, dies zu tun. Es ist die Marionette 4/Facter 3 Art und Weise, die ist:

file { '/etc/motd': 
    ensure => file, 
    owner => 'root', 
    group => 'root', 
    content => "${facts['networking']['fqdn']} OS name is ${facts['os']['name']}\n", 
} 

und das Puppen 3/2-Wege-Facter das ist:

file { '/etc/motd': 
    ensure => file, 
    owner => 'root', 
    group => 'root', 
    content => "$::fqdn OS name is ${::os['name']}\n", 
} 

Sie auch diese mit Puppet tun können 4 und Facter 2. würde mit der Syntax aus dem ersten Beispiel arbeiten, aber mit dem Faktort im zweiten Beispiel.

file { '/etc/motd': 
    ensure => file, 
    owner => 'root', 
    group => 'root', 
    content => "${facts['fqdn']} OS name is ${facts['os']['name']}\n", 
} 
+1

Beat mich, lohnt es sich, zu den Dokumenten verknüpfen, die die zwei verschiedenen Methoden erklärt: https://docs.puppet.com/puppet/latest/reference/lang_facts_and_builtin_vars.html#the-factfactname-hash – jaxxstorm

+0

@MattSchuchard, der OP behauptet, den Ansatz von Puppet 3/Facter 2 ausprobiert zu haben, den Sie ihm vorschlagen, mit dem gleichen Ergebnis - so wie ich es erwarten würde. –

+0

Ja, dieser Beitrag ist, was ich bereits ausprobiert habe und ich hatte bereits die Dokumente gelesen, vielleicht habe ich einen Teil über die Erweiterung der geschweiften Klammern verpasst. Danke John Bolinger für deine Antwort, die ich aufgewertet habe. –

2

Um einen Wert aus einem Hash in einen String interpolieren, müssen Sie den gesamten Ausdruck nach dem $ in geschweiften Klammern umschließen. Optional können Sie die gleiche Form für gewöhnliche Variablenreferenzen (und in einigen Fällen müssen Sie tun, um die Variablennamen werden falsch interpretiert zu vermeiden) verwenden:

file { '/etc/motd': 
    ensure => file, 
    owner => 'root', 
    group => 'root', 
    content => "${::fqdn} OS name is ${::os['name']}\n", 
} 

Das Vorhandensein oder Fehlen von einfachen Anführungszeichen um die Raute-Taste immateriell , aber ich empfehle die zitierte Form als besseren Stil.

Ohne die geschweiften Klammern, hat Puppet nicht die Subskribierung Operator in der Zeichenfolge erkennt als mit den Variablen gehen, so dass es interpoliert den String-Wert des gesamten Hash, und fügt den Index als Klartext.

+0

Das funktioniert in Perl sehr ähnlich, aber aus irgendeinem Grund habe ich nicht daran gedacht, weil ich neu in diesem DSL bin. –

+0

Ich habe gerade etwas Zeit für die Dokumentation über die spezielle Behandlung googeln Hash-Lookups benötigen, wenn interpoliert, und ich konnte nichts finden. Diese Antwort scheint der Dokumentation darüber am nächsten zu liegen. Ich habe das erst vor knapp einem Jahr von einer Support-Ticket-Antwort eines Junior-Entwicklers erfahren, die der Aussage im ersten Satz voll und ganz zustimmte und damit als sachlich erwies. –

+1

@MattSchuchard, FWIW, die [v4 Dokumentation zu String-Interpolation] (https://docs.puppet.com/puppet/4.8/reference/lang_data_string.html#interpolation) scheint dies zu erfassen. Sie geben an, dass die geschweifte Klammerform die Form * standard * ist. Die Klammern können nur in dem speziellen Fall weggelassen werden, in dem Sie den ganzen Wert einer Variablen interpolieren wollen, und einige Wörter sind dazu da, alles genau zu machen. Die [v3.8 Dokumente] (https://docs.puppet.com/puppet/3.8/reference/lang_datatypes.html#double-quoted-strings) sagen ziemlich genau dasselbe, aber nicht so deutlich. –

Verwandte Themen