如何使用盐堆从柱子中创建盐?

Nat*_*tim 5 saltstack

让我们以我今天所拥有的为例: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 %}
Run Code Online (Sandbox Code Playgroud)

但是如何pillar['dbs']用两个文件填充呢?

谢谢

Nat*_*tim 4

我终于做到了我想做的事。

这是我的解决方案:

支柱

postgresql-database-novaauth:
    user: novaauth
    password: novaauth
    name: novaauth

postgresql-database-peopleask:
    user: peopleask
    password: peopleask
    name: peopleask
Run Code Online (Sandbox Code Playgroud)

它们可以位于不同的文件中。

然后像这样创建你的盐:

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
Run Code Online (Sandbox Code Playgroud)

重要的是:

{% for key in pillar.keys() if key.startswith('postgresql-database-') %}
Run Code Online (Sandbox Code Playgroud)

这使您可以定义许多将被考虑的支柱,而不会覆盖其他支柱。

有趣的文章:http ://dev.mlsdigital.net/posts/SaltStackBeyondJinjaStates/

非常感谢brutasse的帮助。