私はansibleが初めてであり、ansibleロールのjsonファイルから値を読み取るのに問題があります。私の変数には次のような値があります:
{
"queue": {
"first": {
"car": "bmw",
"year": "1990",
"model": "x3",
"color": "blue"
},
"second": {
"car": "bmw",
"year": "2000",
"model": "318",
"color": "red"
}
}
}
他の変数と比較するためだけに色の値を印刷しようとしています。 with_dict
を使用して、jsonオブジェクト(jsonVarという変数に格納されている)を次のように繰り返します。
- name: test loop
with_dict: "{{jsonVar}}"
Shell: |
if echo "blue" | grep -q "${{item.value.color}}" ; then
echo "success"
これまでのところ、ifステートメントからjsonから「blue」への色の値の比較を取得することはできません。私は何か間違ったことをしているのだろうかと思っていましたか?前もって感謝します!
file
というルックアッププラグインを使用してjsonファイルを読み取り、from_json
jinja2フィルターに渡すことができます。 jsonVar
だけでなくwith_dict
をループする必要があるため、jsonVar['queue']
ループにも誤りがありました。動作する完全なコードは次のとおりです。
---
- hosts: your_Host
vars:
jsonVar: "{{ lookup('file', 'var.json') | from_json }}"
tasks:
- name: test loop
with_dict: "{{ jsonVar['queue'] }}"
Shell: |
if echo "blue" | grep -q "{{ item.value.color }}" ; then
echo "success"
fi
|を使用できますjson_queryフィルター。
http://docs.ansible.com/ansible/playbooks_filters.html#json-query-filter
ただし、入力するファイルも適切な形式であることを確認してください。そうでない場合は、2つのフィルターを使用できます。
例:-{{ variable_name | from_json | json_query('')}}
あなたの場合、これは助けになると思います:
tasks: print the color
set_fact:
color1 : "{{ jsonVar | from_json | json_query('queue.[0].['color']')}}"
color2 : "{{ jsonVar | from_json | json_query('queue.[1].['color']')}}"
ただし、Ansibleバージョンなどの要件に注意してください