Einführung
Bisher haben wir einen Block /etc/sudoers
mit N Einträgen in der Datei erstellt.
Dies ist keine gute Lösung, da wir manchmal nur ein System aktualisieren und explizite Säulendaten angeben möchten. Dann pillar.systems
erhalten wir eine Liste mit nur einem Eintrag.
Alter Code
etc_sudoers:
file.blockreplace:
- name: /etc/sudoers
- marker_start: "# START managed zone etc_sudoers -DO-NOT-EDIT-"
- marker_end: "# END managed zone etc_sudoers --"
- content: |
{% for system_name in pillar.systems %}
{{system_name}} ALL = NOPASSWD: /bin/systemctl restart apache2*
{% endfor %}
- append_if_not_found: True
- backup: '.bak'
- show_changes: True
Neuer Code
{% for system_name in pillar.systems %}
etc_sudoers_{{system_name}}:
file.blockreplace:
- name: /etc/sudoers
- marker_start: "# START managed zone etc_sudoers_{{system_name}} -DO-NOT-EDIT-"
- marker_end: "# END managed zone etc_sudoers_{{system_name}} --"
- content: |
{{system_name}} ALL = NOPASSWD: /bin/systemctl restart apache2*
- append_if_not_found: True
- backup: '.bak'
- show_changes: True
{% endfor %}
Frage
Wie lösche ich den alten Block, der sich noch auf den Servern befindet?
Antwort1
Ich würde dies lösen, indem ich einen Status wie diesen einrichte:
etc_sudoers:
file.blockreplace:
- name: /etc/sudoers
- marker_start: "# START managed zone etc_sudoers -DO-NOT-EDIT-"
- marker_end: "# END managed zone etc_sudoers --"
- content: '#'
- append_if_not_found: False
- backup: '.bak'
- show_changes: True
Anschließend würde ich die drei Kommentarzeilen mit dem cmd.run
Modul entfernen, zusammen mit zBsed.
Möglicherweise möchten Sie den Sed-Ansatz direkt verwenden, wodurch der temporäre Status unnötig wird. Dies hängt jedoch von Ihren Anforderungen ab. Wenn Sie den alten Stil überall auf einmal entfernen, ist der zweite Ansatz möglicherweise einfacher. Wenn Sie Boxen monatelang nacheinander migrieren, ist die Definition des Status klarer.