当前位置: 首页 > 知识库问答 >
问题:

使用来自一个主机组的事实用Ansible配置另一个主机组

狄卓君
2023-03-14

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

[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
KUBE_ETCD_SERVERS="--etcd_servers="{% for host in groups['etcd'] %}https://{{hostvars[host]['ansible_eth0']["ipv4"]["address"]}}:2380{% if not loop.last %},{% endif %}{% endfor %}"
--etcd_servers=https://10.2.23.11:2380,https://10.2.23.10:2380,https://10.2.23.10:2380

当我运行这个playbook时,我得到控制台输出

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方法是什么?

共有1个答案

葛泳
2023-03-14

如果要使用某些主机的事实,应首先收集它们。
在[etcd]主机上运行安装任务以填充主机变量

---
- 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
 类似资料:
  • 但是通过使用,我无法从目录中挑选特定的主机。但是我可以使用一些语法,如,但是它查找DNS条目并相应地执行,但是不会检查目录文件。 另一种方法是为每个主机创建单独的目录文件,并由开发人员根据请求的主机调用它们,我不知道这是多少推荐的方法。 最后一个方法是AFAIK通过Python使用,在主机名中使用模式并调用Python程序。 除了这些,您还知道在执行剧本时从目录中选择特定主机/主机组的其他方法吗?

  • 在设置到数据库的连接时出现,并在服务器上的日志文件夹中查看文件error_log,我看到。 谁能告诉我,我是否遗漏了一些必要的步骤,或者问题出在哪里?

  • 我为redis-sentinel配置了一个主服务器和两个从服务器。 我从redis-cli中尝试了无人slave,但几秒钟内该节点又变成了slave。 所有这一切都是在没有开始哨兵服务的情况下发生的。 这里发生了什么?还有其他条目我必须删除吗? redis.conf

  • 我正在尝试实现一个简单的设计。一个带有宿主片段的活动。 问题是,其中一个目的地有一个底部导航栏。 经过一点研究,我发现最好的做法是有一个带有宿主片段的单一活动。 在我的特殊情况下,底部导航栏不应该在登录和注册片段中可见,只是隐藏它对我来说似乎不合适。 我设法创建了一个带有底部导航条的活动,将主片段连接到frag 1、frag 2或frag 3,但现在我需要添加登录片段和注册片段,我不确定如何处理导

  • 我需要分析来自多个主机的nginx日志文件。 首先,我想将它们复制到主机目录。例如,我希望将nginx错误日志文件从6台主机复制到目标主机目录。 问题是我不能知道如何使用源ip地址命名dest文件?