Введение

Введение

Введение

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

Связанный контент