Я бы хотел, чтобы в моих файлах sls saltstack было меньше условий.
До сих пор это выглядит так:
foo_package:
pkg.installed:
- pkgs:
{% if grains.os_family == 'Debian' %}
- foo_BAR
{% else %}
- foo-bar
{% endif %}
Я бы хотел, чтобы это было так:
foo_package:
pkg.installed:
- pkgs:
- {{ foo_BAR | normalize_package_name }}
Как реализовать normalize_package_name
?
Как только я смогу использовать Python, я могу помочь себе и реализовать это очень легко: нижнее подчеркивание следует заменить на -
а символы верхнего регистра - нижний регистр.
Я знаю, что могу сделать это в Jinja вот так:
- {{ foo_BAR | replace... | replace .. }}
Но это используется несколько раз, поэтому я хотел бы иметь собственный фильтр.
.... несколько дней спустя: Может быть, лучше написать собственное состояние (mypkg.installed
) и звоните pkg.installed
после нормализации имен пакетов. См. Документацию по соли: https://docs.saltstack.com/en/latest/ref/states/writing.html#cross-calling-state-modules
В вашем случае я думаю, что лучше всего использовать возможности, предлагаемые «формулами». Вы можете преобразовать свои автономные состояния в формулу и использовать map.jinja для указания имени пакета в зависимости от ОС или других значений гранул.
В качестве примера вы можете посмотреть https://github.com/saltstack-formulas/template-formula/ который его реализует. смотреть на template/map.jinja
и template/defaults.yaml
и template/os*.yaml
файлы