Назад | Перейти на главную страницу

SaltStack: от 1 блока заменить до N блока заменить

Введение

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