SaltStack - Как условно обеспечить соблюдение штатов? - PullRequest
0 голосов
/ 30 августа 2018

Это вопрос с самостоятельным ответом.
Пожалуйста, предоставьте правки, дополнительные точки зрения и введите, если необходимо.

Какова наилучшая практика для принудительного выполнения состояний (в зависимости от других выходных данных команды)?

Вот мой случай:

# vim: set syntax=yaml:

# Ensures that outbound connections are allowed for httpd
httpd:selinux:
    cmd.run:
        - name: /usr/sbin/setsebool -P httpd_can_network_connect 1

Теперь я хочу запускать это, только если SELinux включен (принудительно).

1 Ответ

0 голосов
/ 30 августа 2018

1)

Один из способов решения этой проблемы - использование параметра onlyif для salt.states.cmd.run :

# Ensures that outbound connections are allowed for httpd
httpd:selinux:
    cmd.run:
        - name: /usr/sbin/setsebool -P httpd_can_network_connect 1
        - onlyif:
            - 'if [[ $(getenforce) == "Disabled" ]]; then exit 1; else exit 0; fi'      # if SELinux is disabled, then don't enforce this state

Это очень быстрый и простой способ решения этой проблемы, и, поскольку мы имеем дело с командами Shell в этом примере, это, вероятно, наиболее предпочтительный способ.
Обратите внимание, что onlyif зависит от кода состояния возврата тестируемой команды, поэтому, если требуется большая гибкость, это может быть не то, что вы ищете.

2)

Другой способ - получить доступ к исполнительным модулям с помощью шаблонов jinja, обернуть ваше состояние в следующее условие:

{% if salt.selinux.getenforce() == "Disabled" %}
    httpd:selinux:
    ...
{% endif %}

Это более гибкое решение, но оно занимает немного больше места.
Более подробная информация о: salt.modules.selinux.getenforce ()

...