У меня есть код, который устанавливает собственный модуль selinux
. В моем парке миньонов есть системы на базе Fedora (с установленным SELinux) и на базе Debian (без SELinux). В последнем случае не следует использовать состояние модуля/установки, и поэтому я ищу способ получить четкий ответ на вопрос «установлен ли SELinux в этой системе?» (НЕ «принудительно ли SELinux применяется к этой системе?») для использования в соответствующем предложении jinja2
if
.
Попытки, которые приводят меня в отчаяние:
$PATH
- проверка sestatus
- это то, что мне нужно здесь.salt.states.selinux
недоступен в системах без SELinux, поэтому его функциональность не поможет.salt.states.selinux
(см. выше).- unless: - rpm -q libselinux
(из этого ответа) также не работает, поскольку rpm
специфично для Fedora...Любой намек на то, как это сделать, приветствуется.
Следуя этой подсказке, я в итоге сделал:
{% if salt['pkg.version']('libselinux') %}
...
{% endif %}
Не то, что я бы назвал аккуратным и использующим несколько запутанную логику, но, похоже, это помогает.
Если установлен selinux, то зерно доступно:
{% if 'selinux' in grains %}
# stuff that's only included if selinux is available
{% endif %}
Вы также можете использовать это зерно для нацеливания на миньонов:
base:
'selinux:*':
- match: grain
- my_states.for_selinux_only
В общем, вы также можете проверить, загрузился ли модуль:
{% if 'selinux.getconfig' in salt %}
Находится ли исполняемый файл в PATH:
{% if 'sestatus' | which %}
Установлен ли пакет (что также работает в параметре onlyif
):
{% if salt['pkg.version']('libselinux') %}
Бит {% if 'selinux.getconfig' in salt %}
на самом деле у меня не работает. Возможно, это запрашивает настройку sal
в мастере, а не minion
. В любом случае. Вернемся к нацеливанию/зерну миньонов.
Нет, шаблоны рендерятся на миньоне. Модуль может иметь дополнительные требования для загрузки, например. соответствующий пакет Python.
@balin также есть фильтр which
Jinja, для которого я только что добавил пример.
Вы также можете использовать зерно
os
для условного выполнения определенных состояний. Например.if grains['os'] == 'Fedora'
.