![如何使用 saltstack 從柱子中製造鹽?](https://rvso.com/image/617817/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20saltstack%20%E5%BE%9E%E6%9F%B1%E5%AD%90%E4%B8%AD%E8%A3%BD%E9%80%A0%E9%B9%BD%EF%BC%9F.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/
非常感謝布魯塔塞尋求幫助。