複数のデータベースサーバーでMySQLアカウントを管理するための数式を作成しようとしています。私はmacro.sls
ファイルからマクロを再利用しようとしており、環境変数を使用して接続設定を指定しています。ただし、各データベースサーバーの状態ファイルに環境ファイルを格納することはできません。それは私がmacro.sls
ファイルに入れたときにのみ機能します。一度に複数のデータベースサーバー上のユーザーを更新できるようにしたいので、これは望ましくありません。以下を参照してください:SaltStackマクロと環境変数
# Example of "db_user" macro in mysql_user-mgmt/macro.sls
{%- macro db_user(user, password_hash, require_state="None") %}
{{ user }}:
mysql_user.present:
- connection_charset: {{ db_charset }}
- connection_host: {{ db_host }}
- connection_pass: {{ db_pass }}
- connection_port: {{ db_port }}
- connection_user: {{ db_user }}
- host: "%"
- password_hash: "{{ password_hash }}"
{%- if require_state != "None" %}
- require:
- {{ require_state }}
{%- endif %}
{%- endmacro %}
例マクロ
# My mysql_user-mgmt/db-server1.sls file
{%- import "mysql_user-mgmt/macro.sls" as macro -%}
{%- set db_charset = salt['environ.get']('SERVER1_DB_CHAR') -%}
{%- set db_host = salt['environ.get']('SERVER1_DB_HOST') -%}
{%- set db_pass = salt['environ.get']('SERVER1_DB_PASS') -%}
{%- set db_port = salt['environ.get']('SERVER1_DB_PORT') -%}
{%- set db_user = salt['environ.get']('SERVER1_DB_USER') -%}
{{ macro.db_user("someUser", "<MYSQL HASHED PASSWORD>") }}
を使用してDB-server1.sls状態ファイル...と出力し、私は、私は信じていsalt-call state.sls mysql_user-mgmt.db-server1
コマンドに
# Output of running `salt-call state.sls mysql_user-mgmt.db-server1`
local:
- Rendering SLS 'base:mysql_user-mgmt.db-server1' failed: Jinja variable 'db_charset' is undefined
/var/cache/salt/minion/files/base/mysql_user-mgmt/macro.sls(4):
---
{%- macro db_user(user, password_hash, require_state="None") %}
{{ user }}:
mysql_user.present:
- connection_charset: {{ db_charset }} <======================
- connection_host: {{ db_host }}
- connection_pass: {{ db_pass }}
- connection_port: {{ db_port }}
- connection_user: {{ db_user }}
- host: "%"
[...]
---