首页 > 解决方案 > Ansible 迭代库存变量

问题描述

我有一个清单,在其中定义了一些变量,例如服务器 ip:

all:
  children:
    my_servers:
      children:
        data:
          hosts:
            data01.mydomain:
              ansible_host: 10.0.0.1
              es_name: "data01"
            data02.mydomain:
              ansible_host: 10.0.0.2
              es_name: "data02"

我知道要访问主机名,我可以使用“{{ groups['data'] }}”之类的东西,这将遍历主机名。

我想做的是遍历每个主机名中的 var“ansible_host”(在防火墙上打开规则)。我可以使用 "{{ hostvars['data01']['ansible_host'] }}" 获得一个值,但我找不到遍历清单上所有主机的方法。

标签: ansible

解决方案


干得好。记得用-i hosts

播放.yml

---
- name: Play
  hosts: localhost
  tasks:
    - name: iterate
      debug:
         msg: "{{ item }}:{{ hostvars[item].ansible_ssh_host }}"
      with_items:
        - "{{ groups['all'] }}"

像下面这样运行剧本

ansible-playbook -i hosts play.yml

推荐阅读