我正在尝试使用存储在 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": {}
}
这是错误:
任务[调试] ********************************************** ****************************************************** ****************************************************** **************
致命的:[本地主机]:失败!=> {"failed": true, "msg": "字段 'args' 的值无效,似乎包含一个未定义的变量。错误是:'ansible.vars.unsafe_proxy.AnsibleUnsafeText object' has no属性“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 ^ here\n我们可能错了,但这个看起来可能是出现\n缺少引号的问题。总是在模板表达式括号\n开始一个值时加上引号。例如:\n\n with_items:\n - {{ foo }}\n\n应该写成: