Como criar sal a partir do pilar usando o palito de sal?

5

Vamos dar um exemplo do que tenho hoje: link

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 de ambas as funções no mesmo servidor, apenas o último pilar será levado em conta.

Como posso criar meu pilar e sal para que um sal seja criado para cada papel?

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 como preencher o pillar['dbs'] com dois arquivos?

Obrigado

    
por Natim 13.09.2013 / 10:37

1 resposta

4

Eu finalmente consegui fazer o que eu queria.

Aqui está a 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.

salt

Em seguida, 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 é isso:

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

Isso permite que você defina muitos pilares que serão levados em consideração sem ignorar outros.

Artigo interessante: link

Muito obrigado a brutasse pela ajuda.

    
por 13.09.2013 / 11:11

Tags