Существует несколько возможностей, но я думаю, что первым шагом является разделение вашего кода между состояниями (обработка) и компонентом (данные). Таким образом, вы можете «вводить» имена пакетов в своем состоянии, не меняя их для каждого нового выпуска или новой ОС, которую вы хотите поддерживать.
Простой вариант использования pillar - это просто нацеливание на вашу ОС или выпуск (с использованием дробных гранул)использование одного или другого столпа, что-то вроде
# /srv/pillar/top.sls
base:
'G@release1':
- release1
'G@release2':
- release2
# /srv/pillar/release1.sls
pkgs:
- libqt4-core
- libqt4-gui
# /srv/pillar/release2.sls
pkgs:
- libqtcore4
- libqtgui4
# /srv/salt/my_state.sls
pkg.installed:
- pkgs: {{ salt['pillar.get']('pkg', []) }}
Более сложное решение состоит в том, чтобы реализовать это состояние в виде «формулы» и использовать map.jinja
для определения различных параметров в зависимости от выпуска / ОС / чего бы то ни было,Подробности см. В этом ответе https://serverfault.com/a/957401/61847. Это более сложно, но имеет много преимуществ: изоляция кода для конкретного программного обеспечения, подробные сведения об ОС, обеспечение уровня нормальных значений по умолчанию и возможность индивидуального тестирования этой конкретной формулы.