Как избежать повторения себя в состояниях Соль?

У нас есть две разные среды: 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. Разве это не позволяет вам получить доступ к столбу из этого состояния?