让我们以我今天所拥有的为例:https://gist.github.com/Natim/6548009
我使用 pillar 创建数据库和用户。它在具有其中一个角色的服务器上运行良好,但如果我需要在同一台服务器上同时使用两个角色,则只会考虑最后一个 pillar。
我如何创建我的支柱和盐,以便为每个角色创建一个盐?
我可以做类似的事情:
{% 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/
非常感谢布鲁塔斯寻求帮助。