Pregunta ¿Cómo crear sal de pilar usando saltstack?


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

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

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

Yo podría hacer algo así:

{% 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 poblar el pillar['dbs'] con dos archivos?

Gracias


5
2017-09-13 08:37


origen




Respuestas:


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

Entonces 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 permite definir muchos pilares que se tendrán en cuenta sin anular otros.

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

Muchas gracias a Brutasse para la ayuda.


4
2017-09-13 09:11