Использование фактов из одной группы хостов для настройки другой группы хостов с 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