Como criar sal a partir de pilar usando saltstack?

Como criar sal a partir de pilar usando saltstack?

Vamos dar um exemplo do que tenho hoje:https://gist.github.com/Natim/6548009

Eu uso o pilar para criar um banco de dados e um usuário. Funciona bem no servidor com uma das funções, mas se eu precisar das duas funções no mesmo servidor, apenas o último pilar será levado em consideração.

Como posso criar meu pilar e sal para que seja criado um sal para cada função?

Eu poderia fazer algo assim:

{% 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 %}

Mas então como preencher o arquivo pillar['dbs']com dois arquivos?

Obrigado

Responder1

Finalmente consegui fazer o que queria.

Aqui está minha solução:

pilar

postgresql-database-novaauth:
    user: novaauth
    password: novaauth
    name: novaauth

postgresql-database-peopleask:
    user: peopleask
    password: peopleask
    name: peopleask

Eles podem estar em arquivos diferentes.

sal

Então crie seu sal assim:

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

O importante é isto:

{% for key in pillar.keys() if key.startswith('postgresql-database-') %}

Isso permite definir vários pilares que serão levados em consideração sem se sobrepor a outros.

Artigo interessante:http://dev.mlsdigital.net/posts/SaltStackBeyondJinjaStates/

Muito obrigado abrutalidadepela ajuda.

informação relacionada