Назад | Перейти на главную страницу

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

Давайте возьмем пример того, что у меня есть сегодня: https://gist.github.com/Natim/6548009

Я использую столб для создания базы данных и пользователя. Он отлично работает на сервере с одной из ролей, но если мне нужны обе роли на одном сервере, учитывается только последний столп.

Как я могу создать свой столп и соль, чтобы соль создавалась для каждой роли?

Я мог бы сделать что-то подобное:

{% 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'] с двумя файлами?

Спасибо

Наконец-то мне удалось сделать то, что я хотел.

Вот мое решение:

столб

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/

Большое спасибо Brutasse за помощь.