Introducción
Hasta ahora creamos un bloque en el /etc/sudoers
archivo con N entradas.
Esta no es una buena solución, ya que a veces solo queremos actualizar un sistema y proporcionar datos de pilares explícitos. Entonces pillar.systems
hay una lista con una sola entrada.
Código antiguo
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
Nuevo código
{% 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 %}
Pregunta
¿Cómo eliminar el bloque antiguo que todavía está en los servidores?
Respuesta1
Resolvería esto configurando un estado como ese:
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
Luego eliminaría las tres líneas de comentarios usando el cmd.run
módulo junto con, por ejemplo,sed.
Es posible que desee utilizar el enfoque sed directamente, lo que hace que el estado temporal sea innecesario, pero esto depende de sus necesidades; si elimina el estilo antiguo de una vez en todas partes, el segundo enfoque podría ser más fácil. Si migras cajas una tras otra durante meses, la definición del estado es más clara.