gpt4 book ai didi

ansible - 使用一个主机组中的事实通过 Ansible 配置另一个主机组

转载 作者:行者123 更新时间:2023-12-02 14:09:47 25 4
gpt4 key购买 nike

我正在尝试使用另一组主机[etcd]中的事实来配置一组主机[节点]。这是我的主机文件

[master]kubernetes ansible_ssh_host=10.2.23.108[nodes]n1 ansible_ssh_host=10.2.23.192n2 ansible_ssh_host=10.2.23.47[etcd]etcd01 ansible_ssh_host=10.2.23.11etcd02 ansible_ssh_host=10.2.23.10etcd03 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

最后,这是 files/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'"}

使 etcd 事实可供节点使用的惯用 Ansible 方法是什么?

最佳答案

如果你想使用某个主机的事实,你应该先收集它们。
[etcd]主机上运行setup任务以填充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

关于ansible - 使用一个主机组中的事实通过 Ansible 配置另一个主机组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39127514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com