¿Cómo crear sal a partir de un pilar usando saltstack?

¿Cómo crear sal a partir de un pilar usando saltstack?

Tomemos un ejemplo de lo que tengo hoy:https://gist.github.com/Natim/6548009

Utilizo el pilar para crear una base de datos y un usuario. Funciona bien en un servidor con uno de los roles, pero si necesito ambos roles en el mismo servidor, solo se tiene en cuenta el último pilar.

¿Cómo puedo crear mi pilar y mi sal para que se cree una sal para cada rol?

Podría hacer algo como eso:

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

Pero entonces, ¿cómo completar el archivo pillar['dbs']con dos archivos?

Gracias

Respuesta1

Finalmente logré hacer lo que quería.

Aquí está mi solución:

pilar

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

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

Pueden estar en diferentes archivos.

sal

Luego crea tu sal así:

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

Lo importante es esto:

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

Esto le permitirá definir muchos pilares que se tendrán en cuenta sin anular otros.

Artículo interesante:http://dev.mlsdigital.net/posts/SaltStackBeyondJinjaStates/

Muchas gracias abrutapara la ayuda.

información relacionada