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

SaltStack: / etc / sudo: / bin / systemctl против / usr / bin / systemctl

Мы используем SaltStack для управления конфигурацией уже несколько недель.

Как справиться с распределением конкретного местоположения systemctl?

На данный момент я добавляю в файл sudoers две строки:

etc_sudoers:
  file.blockreplace:
    - name: /etc/sudoers
    - marker_start: "# START managed etc_sudoers -DO-NOT-EDIT-"
    - marker_end: "# END managed zone etc_sudoers --"
    - content: |
        some_user ALL = NOPASSWD: /bin/systemctl restart apache2
        some_user ALL = NOPASSWD: /usr/bin/systemctl restart apache2
{% endfor %}

    - append_if_not_found: True
    - backup: '.bak'
    - show_changes: True

.... Нет более простого решения?

К сожалению, нет более простого или автоматического способа. Но есть способ лучше следовать Рекомендации по использованию соли, используя файл map.jinja.

В формулах соли строго принято помещать специфичные для платформы данные, такие как имена пакетов и пути файловой системы, в файл с именем map.jinja, который размещается рядом с файлами состояния.

Его использование обеспечит модульность ваших состояний, что позволит им работать независимо от ОС миньона.

Ниже приведен пример того, как будет выглядеть ваш файл map.jinja в представленном вами сценарии. Он отфильтрует миньона по семейству ОС и установит в соответствии с ним переменные:

{% set systemctl = salt['grains.filter_by']({
    'Debian': {
        'location': '/bin/systemctl'
    },
    'Suse': {
        'location': '/usr/bin/systemctl'
    }
} %}

Теперь вам нужно импортировать его в свой файл состояния и использовать ранее определенные переменные:

{% from "systemctl/map.jinja" import systemctl with context %}

etc_sudoers:
  file.blockreplace:
    - name: /etc/sudoers
    - marker_start: "# START managed etc_sudoers -DO-NOT-EDIT-"
    - marker_end: "# END managed zone etc_sudoers --"
    - content: some_user ALL = NOPASSWD: {{ systemctl.location }} restart apache2

    - append_if_not_found: True
    - backup: '.bak'
    - show_changes: True

Для получения дополнительной информации, пожалуйста, взгляните на модульность и Справочная таблица сеансы док.