Wie stellt man mit einem Salzstapel Salz aus einer Säule her?

Wie stellt man mit einem Salzstapel Salz aus einer Säule her?

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.

verwandte Informationen