![Wie stellt man mit einem Salzstapel Salz aus einer Säule her?](https://rvso.com/image/617817/Wie%20stellt%20man%20mit%20einem%20Salzstapel%20Salz%20aus%20einer%20S%C3%A4ule%20her%3F.png)
Nehmen wir ein Beispiel von dem, was ich heute habe:https://gist.github.com/Natim/6548009
Ich verwende den Pfeiler, um eine Datenbank und einen Benutzer zu erstellen. Auf dem Server funktioniert das mit einer der Rollen einwandfrei, aber wenn ich beide Rollen auf demselben Server benötige, wird nur der letzte Pfeiler berücksichtigt.
Wie kann ich meinen Pillar und mein Salt erstellen, sodass für jede Rolle ein Salt erstellt wird?
Ich könnte so etwas machen:
{% 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 %}
Aber wie füllt man es dann pillar['dbs']
mit zwei Dateien?
Danke
Antwort1
Endlich habe ich es geschafft, das zu tun, was ich wollte.
Hier ist meine Lösung:
Säule
postgresql-database-novaauth:
user: novaauth
password: novaauth
name: novaauth
postgresql-database-peopleask:
user: peopleask
password: peopleask
name: peopleask
Sie können in verschiedenen Dateien sein.
Salz
Erstellen Sie dann Ihr Salt wie folgt:
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
Das Wichtige ist:
{% for key in pillar.keys() if key.startswith('postgresql-database-') %}
Dadurch können Sie viele Säulen definieren, die berücksichtigt werden, ohne andere zu überschreiben.
Interessanter Artikel:http://dev.mlsdigital.net/posts/SaltStackBeyondJinjaStates/
Vielen Dank anbrutasfür die Hilfe.