![SaltStack을 사용하여 기둥에서 소금을 만드는 방법은 무엇입니까?](https://rvso.com/image/617817/SaltStack%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EA%B8%B0%EB%91%A5%EC%97%90%EC%84%9C%20%EC%86%8C%EA%B8%88%EC%9D%84%20%EB%A7%8C%EB%93%9C%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
오늘 제가 가지고 있는 것의 예를 들어보겠습니다.https://gist.github.com/Natim/6548009
나는 기둥을 사용하여 데이터베이스와 사용자를 생성합니다. 역할 중 하나가 있는 서버에서는 잘 작동하지만 동일한 서버에서 두 역할이 모두 필요한 경우 마지막 기둥만 고려됩니다.
역할별로 소금이 생성되도록 기둥과 소금을 어떻게 생성하나요?
나는 그런 일을 할 수 있습니다 :
{% 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 %}
그렇다면 pillar['dbs']
두 개의 파일로 채우는 방법은 무엇입니까?
감사해요
답변1
나는 마침내 내가 원하는 것을 할 수 있었다.
내 해결책은 다음과 같습니다.
기둥
postgresql-database-novaauth:
user: novaauth
password: novaauth
name: novaauth
postgresql-database-peopleask:
user: peopleask
password: peopleask
name: peopleask
서로 다른 파일에 있을 수 있습니다.
소금
그런 다음 다음과 같이 소금을 만듭니다.
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
중요한 것은 이것이다:
{% for key in pillar.keys() if key.startswith('postgresql-database-') %}
이를 통해 다른 요소를 재정의하지 않고 고려할 많은 요소를 정의할 수 있습니다.
흥미로운 기사:http://dev.mlsdigital.net/posts/SaltStackBeyondJinjaStates/
많은 감사브루타스도움을 위해.