Использование фактов из одной группы хостов для настройки другой группы хостов с Ansible

Я пытаюсь настроить один набор хостов [узлов], используя факты из другого набора хостов [etcd]. Вот мой файл hosts

[мастер]
kubernetes ansible_ssh_host=10.2.23.108

[узлы]
n1 ansible_ssh_host=10.2.23.192
n2 ansible_ssh_host=10.2.23.47

[Etcd]
etcd01 ansible_ssh_host=10.2.23.11
etcd02 ansible_ssh_host=10.2.23.10
etcd03 ansible_ssh_host=10.2.23.9

Обратите внимание, что группа [etcd] не является целью обеспечения - [узлы]. Но обеспечение [узлов] требует знания фактов [etcd].

Вот моя пьеса:

---
- name: настроить общий
  хосты: узлы
  sudo: True
  задачи:
    - имя: конечные точки etcd
      file: dest=/etc/kubernetes state= каталог

    - имя: конечные точки etcd
      template: src=files/k.j2 dest=/etc/kubernetes/apiserver

Наконец, вот шаблон для файлов / k.j2

KUBE_ETCD_SERVERS = "- etcd_servers="{% для хоста в группах ['etcd'] %}https://{{hostvars[хост]['ansible_eth0']["ipv4"]["address"]}}:2380{% if not loop.last %},{% endif %}{% endfor %}"

Цель состоит в том, чтобы создать значение KUBE_ETCD_SERVERS, которое выглядит как

--etcd_servers= HTTPS://10.2.23.11:2380,https://10.2.23.10:2380, HTTPS: //10.2.23.10: 2380

Когда я запускаю этот playbook, я получаю вывод на консоль

ЗАДАЧА [конечные точки etcd] ********************************************* *************
фатально: [n1]: не удалось! => {"change": false, "failed": true, "msg": "AnsibleUndefinedVariable: 'объект dict' не имеет атрибута ansible_eth0 '"}
фатально: [n2]: не удалось! => {"change": false, "failed": true, "msg": "AnsibleUndefinedVariable: 'объект dict' не имеет атрибута ansible_eth0 '"}

Каков идиоматический способ Ansible сделать факты etcd доступными для игры узла?

1 ответ

Решение

Если вы хотите использовать факты какого-то хоста, вы должны сначала собрать их.
Бежать setup задание на хостах [etcd] для заполнения hostvars,

---
- name: Gather etcd facts
  hosts: etcd
  tasks:
    - setup:

- name: Configure common
  hosts: nodes
  sudo: True
  tasks:
    - name: etcd endpoints
      file: dest=/etc/kubernetes state=directory

    - name: etcd endpoints
      template: src=files/k.j2 dest=/etc/kubernetes/apiserver
Другие вопросы по тегам