我想使用另一组主机的事实[etcd]配置一组主机[节点]。这里是我的hosts文件使用来自一个主机组的事实用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]不是配置的目标 - [节点]是。但配置[节点]需要知道[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'"}
什么是习惯Ansible方式使etcd事实可用于节点播放?
你可以针对其中一台服务器运行'setup'模块并粘贴输出。可能是它没有'ansible_eth0' –
etcd上可能没有'eth0'。或者,一旦我将iptables更改为firewalld时出现同样的错误(一些依赖包被删除为“未使用”) –
谢谢。这里是安装模块在etcd服务器上运行:https://gist.github.com/ae6rt/44f2567e287dd502e714b811bcd0ba92。 eth0确实存在。 – ae6rt