saltstack を使用して柱から塩を作成する方法は?

saltstack を使用して柱から塩を作成する方法は?

今日私が持っているものを例に挙げてみましょう: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']2 つのファイルをどのように取り込むのでしょうか?

ありがとう

答え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/

感謝しますぶっきらぼう助けていただきありがとうございます。

関連情報