До сих пор мы создали один блок в /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 %}
Как удалить старый блок, который еще стоит на серверах?
Я бы решил это, настроив такое состояние:
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.
Вы можете использовать sed appraoch напрямую, что делает временное состояние ненужным - но это зависит от ваших потребностей - если вы удалите старый стиль сразу везде, второй подход может быть проще. Если вы переносите блоки один за другим в течение нескольких месяцев, определение состояния становится более ясным.