![¿Cómo crear sal a partir de un pilar usando saltstack?](https://rvso.com/image/617817/%C2%BFC%C3%B3mo%20crear%20sal%20a%20partir%20de%20un%20pilar%20usando%20saltstack%3F.png)
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.