Genauso wie es ein Modul gibt lineinfile
, um eine Zeile in eine Datei einzufügen, gibt es eine Möglichkeit, mehrere Zeilen hinzuzufügen?
Ich möchte keine Vorlage verwenden, da Sie die gesamte Datei bereitstellen müssen. Ich möchte nur einer vorhandenen Datei etwas hinzufügen, ohne unbedingt zu wissen, was die Datei bereits enthält, sodass eine Vorlage keine Option ist.
template
, aber verwendenlineinfile
ist ein Antimuster . Es ist auch eine starke rote Fahne, dass Sie "nicht wissen, was in der Datei enthalten ist", was zu einem erheblichen Risiko unbekannter Fehler führt.Antworten:
Sie können dazu eine Schleife verwenden. Hier ist ein Beispiel mit einer
with_items
Schleife:quelle
msg: this module requires key=value arguments
. Das gegebene Beispiel hat dies richtig - ich bin dem Beispiel einfach nicht gefolgt.Sie können es
blockinfile
stattdessen versuchen .Sie können so etwas tun
quelle
blockinfile
Modul hat jedes Mal wunderbar funktioniert, wenn ich es verwendet habe. Ich mag besonders das intuitive Verhalten derinsertafter
/insertbefore
Optionen.blockinfile
?Wenn Sie eine Reihe eindeutiger Eigenschafts- / Wertzeilen konfigurieren müssen, empfehle ich eine präzisere Schleife. Zum Beispiel:
Verwenden Sie ein Diktat, wie von Alix Axel vorgeschlagen, und fügen Sie das automatische Entfernen übereinstimmender auskommentierter Einträge hinzu.
quelle
Hier ist eine rauschfreie Version der Lösung, die mit_items verwendet werden soll:
Wenn für jeden Artikel der Artikel in obst.txt vorhanden ist, wird keine Aktion ausgeführt.
Wenn das Element nicht vorhanden ist, wird es an das Ende der Datei angehängt.
Kinderleicht.
quelle
Es ist nicht ideal, aber Sie dürfen mehrere Anrufe tätigen
lineinfile
. Wenn Sie das mit verwendeninsert_after
, können Sie das gewünschte Ergebnis erzielen:quelle
Das konnte ich mit dem Zeilenparameter tun
\n
.Es ist besonders nützlich, wenn die Datei validiert werden kann und das Hinzufügen einer einzelnen Zeile eine ungültige Datei erzeugt.
In meinem Fall war ich das Hinzufügen
AuthorizedKeysCommand
undAuthorizedKeysCommandUser
zu sshd_config , mit dem folgenden Befehl:Wenn Sie nur eine der Optionen hinzufügen, wird eine Datei generiert, deren Validierung fehlschlägt.
quelle
Um mehrere Zeilen hinzuzufügen, können Sie das
lineinfile
Modul verwendenwith_items
, dasvars
hier auch eine Variable enthält , um es einfach zu machen :)quelle
Um mehrere Zeilen hinzuzufügen, können Sie Blockdatei verwenden:
Um eine Zeile hinzuzufügen, können Sie lininfile verwenden:
quelle