Ansible主机的库存yml不支持重复ip with_items

时间:2017-12-21 06:35:29

标签: ansible yaml

以下内容:

  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数组?

2 个答案:

答案 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_ipinventory_hostname

关于问题的前提

YAML的

with_items:是字典键名(字符串值)。是Ansible可能会也可能不会使用它。

它在任务中指定时使用它(它具有语义含义)。

否则它会忽略它(从不使用此密钥),或报告错误。

答案 1 :(得分:-1)

快速查看代码,您会遇到缩进问题。 尝试在“{{item}}之前添加2个空格:”