MongoDB に保存されている情報を使用して初期構成を生成しようとしています。Ansible で動的インベントリー機能を使用しています。バックエンドは単純な mongodb データベースです。を手動で実行するansible_fetch_mongodb.py --list
と、Ansible の要件に従って、グループとその変数/子が JSON で返されます。引数を使用する--host <hostname>
と、ホストとその変数も問題なく返されます。ただし、たとえばitem.hostname
、またはitem.var2
Ansible プレイブック内で変数にアクセスしようとすると、エラーが発生し、item.hostname
定義されていないことがわかります。ansible-playbook build_configs.yml -v -i ansible_fetch_mongodb.py
コマンドを使用してすべてを実行しています。私はこの問題に何時間も取り組んできましたが、動的ソースから変数にアクセスするための適切な構文に関するヘルプは非常に高く評価されています。
プレイブックは次のとおりです。
- hosts: localhost
tasks:
- name: configuration generator
template:
src=roles/core_router/templates/3850.j2
dest=/etc/ansible/generated_templates/{{ item }}.txt
with_inventory_hostnames: all
- debug: msg="{{ item.data1_svi_ip }}"
with_inventory_hostnames: all
以下は、MongoDB で表されるホストです。
{
"_id": "ROUTER123",
"hostname": "ROUTER123",
"vars": {
"data1_svi_ip": "10.19.83.254 255.255.254.0",
"device_num": "01",
"device_type": "Router",
"floor": "04",
"grp_ip": "10.19.93.14 255.255.255.240",
"mgmt_net": "10.19.103.254 255.255.254.0",
"model": "3850",
}
}
以下は、MongoDB で表されるグループです。
{
"_id": "Router",
"children": [],
"hosts": [
"Router123",
],
"name": "Router",
"vars": {}
}
エラーは次のとおりです。
タスク [デバッグ] ************************************************** ****************************************************** ****************************************************** **************
致命的: [localhost]: 失敗しました! => {"failed": true, "msg": "フィールド 'args' に無効な値があり、未定義の変数が含まれているようです。エラーは: 'ansible.vars.unsafe_proxy.AnsibleUnsafeText object' に値がありません属性 'data1_svi_ip'\n\nエラーは '/etc/ansible/build_configs.yml': 行 8、列 5 にあったようですが、正確な構文の問題によっては\nファイルの別の場所にある可能性があります。\n\n問題のある行は次のようです:\n\n with_inventory_hostnames: all\n - debug: msg=\"{{ item.data1_svi_ip }}\"\n ^ ここ\n間違っている可能性がありますが、これは\n引用符が欠落しているという問題があります。値を開始するときは、\nテンプレート式の大括弧を必ず引用してください。例:\n\n with_items:\n - {{ foo }}\n\n次のように記述する必要があります: