私は非常に多くの検索を行っていますが、私の新しさは、私が解決策を見つけるのを妨げています! は、ここに私の問題である(ないことCOMPLEXE、またはそう私は思った):ジンジャー変数を引数として使用すると、ジンジャーループで使用されます。
マイ柱データ:
server_access:
ops:
- salt-dev
ps:
- client-salt.example.com
rd:
ops_trainees:
その後、私の神社のテンプレートの抜粋:
{% set ldap_search_filter_additionnal = [] %}
{% for group in ['ops','ps','rd','ops_trainees'] %}
{% for servers in salt['pillar.get']('server_access:{{ group }}', {}) %}
{% if grains['fqdn'] == servers %}
{% set ldap_search_filter_additionnal = ldap_search_filter_additionnal.append('(isMemberOf="cn={{ group }},ou=test,dc=example,dc=com")') %}
{% endif %}
{% endfor %}
{% endfor %}
私はをループに期待しています最初の4つの値、次にこれらの4つの値のそれぞれをsalt関数の引数として使用する2番目の(入れ子にされた)ループ、次にfqdnと一致する場合はldap検索フィルターなどを追加します。
しかし、塩関数呼び出しの中でジンジャ変数を使用することはできないようですね。
期待される動作を得るために何を専門家に勧めないのですか?
ボーナス:if文が真でないときにジンジャーループが "中断しない"ことを確認しますか?
おかげ
UPDATE_1:
最初propositionof @Christophe Drevet-Droguet後: 私はそれを試してみましたが、私はそれを動作させることができなかった、または少なくとも私のニーズに合わせたが、私はやりました私はそれが次の試行で、最初の要素のために動作させる場合を除き、その作品「のようなもの」、何かを見つける:
{%- set ldap_search_filter_additionnal = [] -%}
{%- for server_group, server_name in pillar['server_access'].iteritems() -%}
{%- if grains['fqdn'] == server_name[0] -%}
{%- set testo = '(isMemberOf=\"cn='+server_group+',ou=interne,dc=example,dc=com\")' -%}
{%- set ldap_search_filter_additionnal = ldap_search_filter_additionnal.append(testo) -%}
{%- endif -%}
{% endfor %}
私は(if文を使用して)一致していることを理解するだけでFiの"server_name [0]"の "[0]"のために最初の要素は、これまでより良いことはできませんので、私が必要とするように作品を作るために別の改善がある場合は、ください:)
UPDATE_2:
私は最終的に私が戦っていた行動を取るが、コードはやや厄介なので、誰かがそれを上級者にするためのヒントを持っていれば、そこに投げてください!
解決策の答えは以下のとおりです。
'serverName'を' serverList'で置き換え、 'serverNameFull'を' serverName'で置き換えると、コードを理解しやすくなります。それは、サーバー名ではなく、各グループの柱の中にサーバーのリストがあることです。サーバーが1つだけ必要な場合は、リストを使用するのではなく、単純な値を使用し、2番目のループは必要ありません。 –
ありがとうございましたChristophe、あなたは私の変数名についてそうですよ!私は実際には複数のサーバーが必要なので、リストを使用しています。各グループにはテスト用のサーバーが1つしかありませんが(それは賢明ではありません)、各グループに複数のサーバーがあります...ありがとうあなたの洞察 – Pier