
Введение
До сих пор мы создали один блок в /etc/sudoers
файле с N записями.
Это не очень хорошее решение, так как иногда мы хотим обновить только одну систему и предоставить явные данные о столбцах. Тогда pillar.systems
это список с одной записью.
Старый Кодекс
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
Новый Кодекс
{% 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 %}
Вопрос
Как удалить старый блок, который все еще находится на серверах?
решение1
Я бы решил эту проблему, создав такое состояние:
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
После этого я бы удалил три строки комментариев, используя cmd.run
модуль вместе с напримерсед.
Вы можете использовать подход sed напрямую, что делает временное состояние ненужным - но это зависит от ваших потребностей - если вы удалите старый стиль сразу везде, второй подход может быть проще. Если вы мигрируете ящики один за другим в течение месяцев, определение состояния становится более понятным.