Я пытаюсь настроить один набор хостов [nodes] используя факты с другого набора хостов [etcd]. Вот мои хосты файлИспользование фактов из одной группы хостов для настройки другой группы хостов с помощью Ansible
[master] kubernetes ansible_ssh_host=10.2.23.108 [nodes] 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] не цель предоставления - [узлы] есть. Но предоставление ресурсов [nodes] требует информации о фактах [etcd].
Вот мой сборник пьес:
--- - 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
Наконец, вот шаблон для файлов/k.j2
KUBE_ETCD_SERVERS="--etcd_servers="{% for host in groups['etcd'] %}https://{{hostvars[host]['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
Когда я запускаю эту пьесу, я получаю консольный выход
TASK [etcd endpoints] ********************************************************** fatal: [n1]: FAILED! => {"changed": false, "failed": true, "msg": "AnsibleUndefinedVariable: 'dict object' has no attribute 'ansible_eth0'"} fatal: [n2]: FAILED! => {"changed": false, "failed": true, "msg": "AnsibleUndefinedVariable: 'dict object' has no attribute 'ansible_eth0'"}
Что такое идиоматический способ, способный сделать факты и т. Д. Доступными для узла?
Вы можете запустить модуль 'setup' против одного из серверов и вставить выходные данные. Может быть, у него нет 'ansible_eth0' –
Возможно, нет' eth0' на etcd. Или, однажды, я стал такой же ошибкой при смене iptables на firewalld (некоторые зависящие пакеты были удалены как «неиспользуемые») –
Спасибо. Вот установочный модуль работает на сервере etcd: https://gist.github.com/ae6rt/44f2567e287dd502e714b811bcd0ba92. eth0 действительно существует. – ae6rt