Ansible Blockinfile Disable Marker

11

Ich bin neu in Ansible, konnte jedoch die Blockinfile- Funktion erfolgreich verwenden . Ich kann jedoch nicht herausfinden, wie das Einfügen von Markern verhindert werden kann. Ich habe die Dokumentation gelesen, aber sie schien sie nicht zu beschreiben.

Dies wird in jeder Datei angezeigt, in die blockinfile schreibt.

# BEGIN ANSIBLE MANAGED BLOCK
# END ANSIBLE MANAGED BLOCK
Nik
quelle

Antworten:

14

Ich hatte einen Blick auf das Original - blockinfileModul auf Github - vor ansible 2 nicht mit ansible gebündelt wurde. Es stellt sich heraus, dass die Markierungen tatsächlich verwendet werden, um den Block zu identifizieren :

Das scheint beabsichtigtes Verhalten. Es ersetzt alle von den Blockmarkierungen umgebenen Zeilen durch den angegebenen Inhalt.

Das heißt, wenn Sie die Markierungen entfernen blockinfile, kann der Block nicht mehr identifiziert werden, was dazu führt, dass das Modul den Block jedes Mal, wenn Sie das Playbook ausführen, zur Datei hinzufügt.

Die Markierungen vor und nach dem geschriebenen Block sind daher eine Anforderung des Moduls und können nicht entfernt werden.

Wenn dies ein einmaliges Playbook ist, das nie wieder ausgeführt wird, können Sie das lineinfileModul anschließend mit der state: absentOption ausführen .


Alte Antwort:

Laut Dokumentation hat das blockinfileModul eine markerOption.

Haben Sie versucht, eine leere Zeichenfolge oder False festzulegen?

blockinfile:
    dest: /var/www/html/index.html
    marker: ""

oder

blockinfile:
    dest: /var/www/html/index.html
    marker: False
Udondan
quelle
1
Entschuldigung für die unvollständige Aussage oben, jemand klopfte an die Tür und ich musste rennen. Ich habe diese Ideen gestern ausprobiert. marker: "" - Fügt eine Zeile am oberen und unteren Rand der Datei hinzu. False: - Fügt einfach das Wort false am unteren und oberen Rand der Datei hinzu. Irgendwelche anderen Ideen?
Nik
2
Ich habe meine Antwort aktualisiert. Die Markierungen werden tatsächlich vom Modul selbst benötigt, und selbst wenn Sie könnten, möchten Sie sie wahrscheinlich nicht entfernen. Siehe aktualisierte Antwort für Details.
Udondan
0

Ich habe so etwas gemacht ...

- name: Insert someline in somefile.sh
    blockinfile:
      path: /usr/share/somefile.sh
      block: -sometext
      insertafter: '-XX:originaltext'
      marker: ""
      backup: yes


 - name: Remove blank lines blockinfile put in
    lineinfile :
     path: /usr/share/somefile.sh
     state: absent
     regexp: '^$'
  • Die Markierung "" fügt Leerzeilen in die Datei ein
  • lineinfile entfernt sie (zusammen mit allen anderen Leerzeilen), also Vorsicht !!
user489843
quelle