gpt4 book ai didi

Ansible 获取 list 主机组的主机名和 IP

转载 作者:行者123 更新时间:2023-12-04 08:35:12 25 4
gpt4 key购买 nike

我正在尝试获取主机的主机名和 IP 地址并将它们保存到文件中。

我有这个解决方案;

- name: Create File with hosts and IP address.
when: inventory_hostname in groups['local']
lineinfile:
dest: "{{store_files_path}}/{{ansible_date_time.date}}/{{ansible_date_time.time}}/hosts.txt"
create: yes
line: "{{hostvars[inventory_hostname].ansible_hostname}}:{{hostvars[inventory_hostname].ansible_default_ipv4.address}}"

但问题出在我的主机文件中,我有两个组,localServers。我只想获取 Servers 而不是 local 组,它只是 localhost

我已经尝试了下面的行,但它不起作用,它给了我一个错误。

line: "{{ hostvars[ groups['Servers'][0] ].ansible_hostname }} :{{ hostvars[ groups['Servers'][0] ].ansible_default_ipv4.address }}"

我已经四处搜索,这就是我找到的,我应该怎么做?

最佳答案

你正在让自己变得极其复杂。

  1. 您不必通过hostvars 来实现您想要的,special variables主要是为您提供有关 Ansible 当前正在执行的主机的信息。 Ansible 为主机收集的事实也是如此。
  2. 对于手头的事情,您可以使用另一个 special variable group_names这将允许您以列表的形式获取您当前正在操作的主机所在的组。因此,获取属于组的主机就像执行 when: "'group_that_interest_you' in group_names"
  3. 一样简单

所以给定库存:

all:
vars:
ansible_python_interpreter: /usr/bin/python3

children:
local:
hosts:
localhost:

Servers:
hosts:
foo.example.org:
ansible_host: 172.17.0.2

还有剧本:

- hosts: all
gather_facts: yes

tasks:
- debug:
msg: "{{ ansible_hostname }}:{{ ansible_default_ipv4.address }}"
when: "'Servers' in group_names"

这产生了回顾:

PLAY [all] **********************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************
ok: [localhost]
ok: [foo.example.org]

TASK [debug] ********************************************************************************************************
skipping: [localhost]
ok: [foo.example.org] => {
"msg": "8088bc73d8cf:172.17.0.2"
}

PLAY RECAP **********************************************************************************************************
foo.example.org : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0

现在,如果您将其改编成自己的剧本,您应该可以开始了:

- name: Create File with hosts and IP address.
lineinfile:
dest: "{{ store_files_path }}/{{ ansible_date_time.date }}/{{ ansible_date_time.time }}/hosts.txt"
create: yes
line: "{{ ansible_hostname }}:{{ ansible_default_ipv4.address }}"
when: "'Servers' in group_names"
delegate_to: localhost

关于Ansible 获取 list 主机组的主机名和 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64834583/

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