Как избежать повторения себя в состояниях Соль?
У нас есть две разные среды: dev и production, управляемые одним сервером Salt.
Что-то вроде этого:
base:
'dev-*':
- users-dev
'prod-*':
- users-prod
user-dev
и users-prod
состояния примерно одинаковы:
{% for user, data in pillar['users-dev'].items() %}
{{ user }}-user:
user.present:
< ...something... >
{{ user }}_ssh_auth:
ssh_auth.present:
< ...something... >
{% endfor %}
Мы не хотели дублировать код, поэтому наша первоначальная идея состояла в том, чтобы сделать что-то вроде этого:
{% users = pillar['users'].items() %}
include:
- users-common
а затем обратиться к users
в users-common
, но это не сработало, потому что правильный синтаксис Jinja был set users = pillar['users'].items()
, и это не предназначалось для работы по состояниям Солта.
Итак, вопрос в том, как правильно это сделать?
Ответы
Ответ 1
Все jinja оцениваются до того, как будут оценены любые состояния (включая операторы include
).
Однако, я думаю, вы просто сможете напрямую ссылаться на pillar['users'].items()
внутри users-common
. Разве это не позволяет вам получить доступ к столбу из этого состояния?