2013-08-20 9 views
10

У нас есть две разные среды: 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, но это не сработало клюв ause правильный синтаксис Jinja был set users = pillar['users'].items(), и это не предназначалось для работы через Солевые состояния.

Итак, вопрос в том, как это сделать правильно?

ответ

2

Все jinja оцениваются до того, как будут оценены любые состояния (включая операторы include).

Однако, я думаю, вы просто сможете напрямую обратиться к pillar['users'].items() внутри users-common. Разве это не позволяет вам получить доступ к столбу из этого состояния?

Смежные вопросы