如何使用 saltstack 从 pillar 创建盐?

如何使用 saltstack 从 pillar 创建盐?

让我们以我今天所拥有的为例: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/

非常感谢布鲁塔斯寻求帮助。

相关内容