Давайте возьмем пример того, что у меня есть сегодня: https://gist.github.com/Natim/6548009
Я использую столб для создания базы данных и пользователя. Он отлично работает на сервере с одной из ролей, но если мне нужны обе роли на одном сервере, учитывается только последний столп.
Как я могу создать свой столп и соль, чтобы соль создавалась для каждой роли?
Я мог бы сделать что-то подобное:
{% for db in pillar['dbs'] %}
postgresql_db_{{ db['postgresql_db_name'] }}:
postgres_database.present:
- name: {{ db['postgresql_db_name'] }}
- owner: {{ db['postgresql_db_user'] }}
- encoding: UTF8
- lc_ctype: en_US.UTF8
- lc_collate: en_US.UTF8
- template: template0
- runas: postgres
- require:
- service: postgresql
- postgres_user: postgresql_user_{{ db['postgresql_db_user'] }}
postgresql_user_{{ db['postgresql_db_user'] }}:
postgres_user.present:
- name: {{ db['postgresql_db_user'] }}
- password: {{ db['postgresql_db_password'] }}
- require:
- service: postgresql
{% endfor %}
Но тогда как заполнить pillar['dbs']
с двумя файлами?
Спасибо
Наконец-то мне удалось сделать то, что я хотел.
Вот мое решение:
столб
postgresql-database-novaauth:
user: novaauth
password: novaauth
name: novaauth
postgresql-database-peopleask:
user: peopleask
password: peopleask
name: peopleask
Они могут быть в разных файлах.
поваренная соль
Затем создайте свою соль следующим образом:
postgresql:
pkg:
- name: postgresql-9.3
- installed
service.running:
- enable: True
{% for key in pillar.keys() if key.startswith('postgresql-database-') %}
postgresql_db_{{ pillar[key]['name'] }}:
postgres_database.present:
- name: {{ pillar[key]['name'] }}
- owner: {{ pillar[key]['user'] }}
- encoding: UTF8
- lc_ctype: en_US.UTF8
- lc_collate: en_US.UTF8
- template: template0
- runas: postgres
- require:
- service: postgresql
- postgres_user: postgresql_user_{{ pillar[key]['user'] }}
postgresql_user_{{ pillar[key]['user'] }}:
postgres_user.present:
- name: {{ pillar[key]['user'] }}
- password: {{ pillar[key]['password'] }}
- require:
- service: postgresql
{% endfor %}
postgresql.conf:
file.append:
- name: /etc/postgresql/9.3/main/postgresql.conf
- text: "listen_addresses = '*'"
- require:
- pkg: postgresql
- watch_in:
- service: postgresql
Важно вот что:
{% for key in pillar.keys() if key.startswith('postgresql-database-') %}
Это позволит вам определить множество столпов, которые будут приняты во внимание, не перекрывая другие.
Интересная статья: http://dev.mlsdigital.net/posts/SaltStackBeyondJinjaStates/
Большое спасибо Brutasse за помощь.