Как создать соль из столба с помощью соляной стопки?

Как создать соль из столба с помощью соляной стопки?

Давайте рассмотрим пример того, что у меня есть сегодня: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/

Большое спасибобрутассза помощь.

Связанный контент