
Wenn ich „Puppet Apply“ ausführe, erhalte ich die folgende Fehlermeldung:
Warning: Scope(Mod::Cl[title]): Can't load '/tmp/file.yaml' File does not exist!
Error: Evaluation Error: Error while evaluating a Resource Statement, Evaluation Error: Operator '[]' is not applicable to an Undef Value.
Ich gebe an, dass loadyaml eine Funktion des stdlib-Moduls ist
Ich möchte jedoch die Dateiressource ausführen, bevor ich die Ressource definiere
Kann mir jemand helfen?
Klasse mod::princ ( Datei { '/tmp/file.yaml': sicherstellen => Datei, Besitzer => 'root', Gruppe => 'Wurzel', Modus => '0644', Quelle => "puppet:///modules/othermod/file.yaml", vorher => Mod::Cl["Titel"], }-> Mod::Cl{ "Titel" : tmp_file => "/tmp/datei.yaml", } } definiere mod::cl ( Zeichenfolge $tmp_file, ){ $tmp = loadyaml("$tmp_file") $tmp[var].each |Integer $i, Hash[Zeichenfolge,Zeichenfolge] $var| { $mark=$var['Markierung'] } }
Antwort1
Meiner Erfahrung nach funktionieren Dinge wie „before“/„require“ und sequencing(->) mit Puppet nicht besonders gut zusammen. Versuchen Sie, das Sequencing zu entfernen, da die Datei wahrscheinlich nicht erstellt wird …
Antwort2
Wie im Puppet-Funktionsaufruf angegebenReferenzseiteFunktionen werden zur Kompilierungszeit aufgerufen, daher spielt die Reihenfolge keine Rolle, die Funktion wird aufgerufen, bevor das Modul ausgeführt wird.