web-dev-qa-db-ja.com

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つのファイルを入力するにはどうすればよいでしょうか?

ありがとう

5
Natim

やっとやりたいことができました。

これが私の解決策です:

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 に感謝します。

4
Natim