如何使用 saltstack 從柱子中製造鹽?

如何使用 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 %}

但是如何用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/

非常感謝布魯塔塞尋求幫助。

相關內容