gpt4 book ai didi

ansible - 如何使用ansible编排配置/etc/hosts

转载 作者:行者123 更新时间:2023-12-02 16:57:52 25 4
gpt4 key购买 nike

应用程序需要以下主机:

[foo-servers]
foo-server ansible_ssh_host=192.168.50.2

[bar-servers]
bar-server ansible_ssh_host=192.168.50.3

[mysql-servers]
mysql-server ansible_ssh_host=192.168.50.4

[mongodb-servers]
mongodb-server ansible_ssh_host=192.168.50.5

我需要在 foo 服务器和 bar 服务器上配置主机,因为它们需要访问 mysql 和 mongodb。为了实现这一点,我引入了一个名为hosts的角色:

# roles/hosts/tasks/main.yml
---
- name: change hosts
template: src=hosts.j2 dest=/etc/hosts

# roles/hosts/templates/hosts.j2
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

{% for item in hostvars %}
{{ hostvars[item]['ansible_ssh_host'] }} {{ item }}
{% endfor %}

问题出在我运行时

ansible-playbook foo.yml 

目标上的/etc/hosts 仅包含当前主机(本例中为 foo-server)的 IP 和主机名。

我的问题是:

当我仅针对其中一台主机运行 playbook 时,如何获取 list 中的所有主机?

或者你可以建议一些替代方案,因为我一开始就得到了错误的想法。

我想到的替代方案是:

使主机配置成为针对所有主机的单独剧本,例如

---
- name: Configuring hosts
hosts: all
user: root

roles:
- hosts

缺点是我需要在其他人之前运行此剧本,这似乎不是使用角色的正确方法。

最佳答案

确实这很奇怪,因为甚至文档都说:

If, at this point, you haven’t talked to that host yet in any play inthe playbook or set of playbooks, you can get at the variables, butyou will not be able to see the facts.

据我了解,如果主机尚未被“查询”,您可能无法获得收集的事实,但您仍然应该看到库存中定义的变量(以及组/主机变量)。也许您应该将其推送到邮件列表。

同时,您可以使用groups['all']来循环您的主机来解决您的问题:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

{% for item in groups['all'] %}
{{ hostvars[item]['ansible_ssh_host'] }} {{ item }}
{% endfor %}

关于ansible - 如何使用ansible编排配置/etc/hosts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26922201/

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