以下内容:
store_controller:
hosts:
SERVER:
ansible_host: "{{ STORE_CTL }}"
mgmt_ip: "{{ ansible_host }}"
global_mgmt:
hosts:
SERVER:
ansible_host: "{{ NOMAD_SERVER }}"
mgmt_ip: "{{ ansible_host }}"
node_exporter: ##if comment the part from here to end, it's ok####
hosts:
"{{ item }}":
ansible_host: "{{ item }}"
mgmt_ip: "{{ ansible_host }}"
with_items:
- "172.7.7.1"
- "172.7.7.9"
- "172.7.7.12"
但Ansible不允许我在这里使用'with_items'。似乎ansible不支持主机上的迭代器。
如何在组node_exporter中为我的三个IP定义hosts数组?
答案 0 :(得分:1)
您需要定义的是:
node_exporter:
hosts:
172.7.7.1:
172.7.7.9:
172.7.7.12:
vars:
mgmt_ip: "{{ inventory_hostname }}"
<强>解释强>:
mgmt_ip
仅定义一个模板(字符串值),该模板将在使用时解析。
对于每台目标计算机inventory_hostname
(因此mgmt_ip
)将解析为当前正在执行的主机的IP地址。
使用ansible_host
分配与库存主机名相同的值是空操作,因此您根本不需要它。
我认为它不会给代码带来任何价值/清晰度,但是既然你评论它对你有用,那就是用多个主机实现它的方法。您所获得的只是创建一个别名mgmt_ip
到inventory_hostname
。
关于问题的前提:
YAML的 with_items:
是字典键名(字符串值)。是Ansible可能会也可能不会使用它。
它在任务中指定时使用它(它具有语义含义)。
否则它会忽略它(从不使用此密钥),或报告错误。
答案 1 :(得分:-1)
快速查看代码,您会遇到缩进问题。 尝试在“{{item}}之前添加2个空格:”