![Как создать соль из столба с помощью соляной стопки?](https://rvso.com/image/617817/%D0%9A%D0%B0%D0%BA%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C%20%D1%81%D0%BE%D0%BB%D1%8C%20%D0%B8%D0%B7%20%D1%81%D1%82%D0%BE%D0%BB%D0%B1%D0%B0%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20%D1%81%D0%BE%D0%BB%D1%8F%D0%BD%D0%BE%D0%B9%20%D1%81%D1%82%D0%BE%D0%BF%D0%BA%D0%B8%3F.png)
Давайте рассмотрим пример того, что у меня есть сегодня: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/
Большое спасибобрутассза помощь.