別の変数に基づいて、実行時にset_factを使用してAnsibleで変数を設定しようとしています。実際の値が何であれ、最初の値を使用する場合。これが私のコード例です:
- name: Global_vars - get date info
set_fact:
jm_env: "{{lookup('env', 'Environment')}}"
l_env: "{% if '{{jm_env}}==Develop' %}d{% Elif '{{jm_env}}==Staging'%}s{% else %}p{% endif %}"
l_env
は、設定されているjm_env
に関係なくd
です。
まず、YAMLの辞書は順序付けされていないため(ここでAnsibleが使用する構文はYAML辞書です)、Ansibleがjm_env
に設定してからl_env
に進む保証はなく、分割する必要があります。 2つのタスクへの割り当て。
次に、テスト式が正しくありません。引用符で囲まれているため、'{{jm_env}}==Develop'
は文字列です。そしてif 'string'
をテストすると、常にtrue
に評価されます(これが出力で常にd
を取得する直接的な理由です)。
使用する:
- name: Set the jm_env
set_fact:
jm_env: "{{lookup('env', 'Environment')}}"
- name: Set the l_env
set_fact:
l_env: "{% if jm_env=='Develop' %}d{% Elif jm_env=='Staging'%}s{% else %}p{% endif %}"
ファクトベースの条件の例を次のように設定する簡単な方法の1つ:
- name: Set facts for delete operation results
set_fact:
tr_result: "{{ '{\"status\": \"SUCCESS\"}' if (op_result['output'] == 'Deleted') else '{\"status\" : \"FAILED\"}' }}"
注:op_resultは辞書であり、すでに定義されていると想定します。
コードはテストされ、うまく機能しています。