让我们来看看今天的例子: https : //gist.github.com/Natim/6548009
我使用支柱来创build数据库和用户。 它可以在服务器上正常工作,但如果我需要同一台服务器上的两个angular色,则只考虑最后一个支柱。
我如何创造我的支柱和盐,为每个angular色创造一个盐?
我可以这样做:
{% 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']呢?
谢谢
我终于设法做我想要的。
这是我的解决scheme:
支柱
postgresql-database-novaauth: user: novaauth password: novaauth name: novaauth postgresql-database-peopleask: user: peopleask password: peopleask name: peopleask
他们可以在不同的文件。
盐
然后像这样创build你的盐:
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/
非常感谢brutasse的帮助。