首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >清单主机组的不可获取主机名和IP

清单主机组的不可获取主机名和IP
EN

Stack Overflow用户
提问于 2020-11-14 13:48:34
回答 2查看 15.5K关注 0票数 2

我试图获取主机名和IP地址,并将它们保存到一个文件中。

我有这个解决方案起作用;

代码语言:javascript
运行
复制
- 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

我试过下面这一行,但它不起作用,它给了我一个错误。

代码语言:javascript
运行
复制
line: "{{ hostvars[ groups['Servers'][0] ].ansible_hostname }} :{{ hostvars[ groups['Servers'][0] ].ansible_default_ipv4.address }}"

我到处找过了,这就是我发现的,我该怎么做?

EN

Stack Overflow用户

发布于 2020-11-14 15:39:00

你把这件事弄得太复杂了。

  1. 您不需要通过hostvars来达到您想要的目的,特殊变量主要是为您提供当前正在运行的主机Ansible的信息。为主人收集的事实也是如此。
  2. 对于当前的问题,您可以使用另一个group_names,它将允许您以列表的形式获得当前正在处理的组。因此,获取作为组一部分的主机就像执行when: "'group_that_interest_you' in group_names"一样简单。

因此,考虑到清单:

代码语言:javascript
运行
复制
all:
  vars:
    ansible_python_interpreter: /usr/bin/python3

  children:
    local:
      hosts:
        localhost:

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

还有剧本:

代码语言:javascript
运行
复制
- hosts: all
  gather_facts: yes
      
  tasks:
    - debug:
        msg: "{{ ansible_hostname }}:{{ ansible_default_ipv4.address }}"
      when:  "'Servers' in group_names"

这就产生了重述:

代码语言:javascript
运行
复制
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   

现在,如果你在你自己的剧本中修改了这一点,你应该做得很好:

代码语言:javascript
运行
复制
- 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
票数 4
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64834583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档