![Como criar sal a partir de pilar usando saltstack?](https://rvso.com/image/617817/Como%20criar%20sal%20a%20partir%20de%20pilar%20usando%20saltstack%3F.png)
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.