Wie kann man ganze Dateien in Puppet wörtlich lesen (ohne wie eine Vorlage zu analysieren)?

989
Mikhail T.

Ich muss eine Reihe von ssh_authorized_keysRessourcen erstellen . Die Ressource erwartet, dass ihr key-attribut der öffentliche Schlüssel selbst ist. Es gibt keine Möglichkeit, auf eine Datei zu verweisen, die den Schlüssel enthält.

Da die Schlüssel sehr lang sind und ich sie bereits in Dateien habe, würde Puppet sie lieber aus den Dateien lesen, anstatt sie im Manifest zu zitieren.

Ich kann mir auch ein paar andere Anwendungsfälle vorstellen.

Gibt es bereits eine Funktion, um eine angegebene Datei wörtlich zu lesen, ohne zu versuchen, sie wie template()erwartet zu interpretieren ?

Bei öffentlichen Schlüsseln kann ich eigentlich davonkommen template(), aber das ist mit einem Parsing-Versuch verbunden. In einigen anderen Fällen kann das Parsen je nach Inhalt der Datei tatsächlich "fehlschlagen" oder, schlimmer noch, nicht fehlschlagen, sondern den Inhalt leise ändern ...

0

2 Antworten auf die Frage

1
Dominic Cleal

Gibt es bereits eine Funktion, um eine angegebene Datei wörtlich zu lesen, ohne sie als template () interpretieren zu wollen?

Die file()Funktion liest und liefert den Inhalt einer Datei auf dem Puppet-Master (oder wo auch immer der Katalog kompiliert wird), ähnlich template()wie Sie es beschrieben haben.

Rufen Sie es mit einem Pfad auf, z. B. ssh_keys/foo.keyum die Datei ssh_keys/files/foo.keyinnerhalb des Modulpfads zu laden .

Beachten Sie, dass diese Funktion Puppet 3.7 oder höher benötigt, um auf dieselbe Weise aus dem Modulpfad geladen zu werden template(). Vorher hat es nur mit absoluten Pfaden gearbeitet, obwohl es in jeder Hauptversion veröffentlicht wurde.

0
bgStack15

Verwenden Sie den Ressourcentyp filemit einem definierten Attribut source. Meine Marionettenumgebung zum Verwalten der SSH-Schlüssel importiert die Datei ~ / .ssh / authorised_keys tatsächlich nur als Datei.

Das funktioniert nur, wenn Sie einen _one_ vertrauenswürdigen Schlüssel pro Konto haben. Die Ressource `ssh_trusted_keys` kann mehrere Schlüssel in der` authorised_keys'-Datei desselben Benutzers kombinieren. Ihr Vorschlag ist für "~ root / .ssh / authorised_keys" beispielsweise nicht akzeptabel, wenn Sie mehr als einen Mitarbeiter auf Bedienerebene hatten ... Mikhail T. vor 7 Jahren 0
Und der Authorized_keys ist der öffentliche Schlüssel für jeden Benutzer. Kann die Datei mit allen vier Benutzerschlüsseln auf Root-Ebene veröffentlicht werden? bgStack15 vor 7 Jahren 0
Was solche "Veröffentlichung" sagt, ist: "_diese Konten dürfen sich als me_ anmelden". Ein bisschen wie: "_diese Leute haben alle Schlüssel zu meiner Wohnung_". Ob die Veröffentlichung eines solchen Wissens in Ordnung ist oder nicht, hängt vom Konto ab. `Sshd` besteht nicht darauf, dass die Datei für andere nicht lesbar ist - solange niemand anderes sie ändern kann. Mikhail T. vor 7 Jahren 0