我正在尝试使用MongoDB中存储的信息生成初始配置。我正在使用Ansible的动态库存功能。后端是一个简单的mongodb数据库。手动运行function todoList() {
var item = document.getElementById('todoInput').value;
var text = document.createTextNode(item);
var checkbox = document.createElement('input');
checkbox.type = "checkbox";
checkbox.name = "name";
checkbox.value = "value";
var newItem = document.createElement("div");
newItem.appendChild(checkbox);
newItem.appendChild(text);
document.getElementById("todoList").appendChild(newItem)
}
时,它会根据Ansible的要求以JSON形式返回组及其变量/子项。使用<!DOCTYPE html>
<html>
<body>
<form id="todoForm">
<h1>To Do List:<h1>
<input id="todoInput">
<button type="button" onclick="todoList()">Add Item</button>
</form>
<div id="todoList">
</div>
</body>
</html>
参数也可以毫无问题地返回主机及其变量。但是,在尝试访问Ansible playbook中的变量(例如ansible_fetch_mongodb.py --list
或--host <hostname>
)时,会出错并告诉我item.hostname
未定义。我正在使用item.var2
命令来运行它。我已经在这个问题上工作了几个小时,非常感谢任何有关从动态源访问变量的正确语法的帮助。
这是剧本:
item.hostname
以下是MongoDB中表示的主机:
ansible-playbook build_configs.yml -v -i ansible_fetch_mongodb.py
以下是MongoDB中表示的组:
- 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
这是错误:
任务[调试] ******************************************* ************************************************** ************************************************** *****************
致命:[localhost]:失败! =&GT; {“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 with_inventory_hostnames:all \ n - debug:msg = \“{{item.data1_svi_ip}} \”\ n ^ here \ n我们可能错了,但这个看起来可能是一个问题\ n当引用一个值时,总是引用模板表达式括号。例如:\ n \ n with_items:\ n - {{foo}} \ n \ n应该写成:\ n \ n with_items:\ n - \“{{foo}} \”\ n“}
答案 0 :(得分:1)
with_inventory_hostnames
查找插件返回主机的名称。它们是字符串,而不是对象,因此Ansible报告:no attribute 'data1_svi_ip'
。
要访问主机变量,您需要使用:
- debug:
var: hostvars[item].data1_svi_ip
with_inventory_hostnames: all