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']두 개의 파일로 채우는 방법은 무엇입니까?

감사해요

답변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/

많은 감사브루타스도움을 위해.

관련 정보