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

SaltStack: нормализовать имя пакета

Я бы хотел, чтобы в моих файлах 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 файлы