Давайте рассмотрим пример того, что у меня есть сегодня:https://gist.github.com/Natim/6548009
Я использую Pillar для создания базы данных и пользователя. Он отлично работает на сервере с одной из ролей, но если мне нужны обе роли на одном сервере, учитывается только последний Pillar.
Как мне создать свой столп и соль, чтобы для каждой роли была создана своя соль?
Я мог бы сделать что-то вроде этого:
{% 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']
двумя файлами?
Спасибо
решение1
Мне наконец удалось сделать то, что я хотел.
Вот мое решение:
столб
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/
Большое спасибобрутассза помощь.