在Ansible库存组中使用通配符不会';I don’我没有按预期工作

在Ansible库存组中使用通配符不会';I don’我没有按预期工作,ansible,ansible-inventory,Ansible,Ansible Inventory,运行Ansible 2.9.3 在主机每天进出的大型环境中工作,我需要在主机组中使用通配符主机名:即: [被排除在外的主机] 霍斯特01酒店 host02 旅社03 [各位] 主人* 在我的剧本里我有 名称:“使用主机组进行测试” 主持人:各位,!被排除的主机 连接:本地 任务: 问题是,任务正在排除组中的主机上运行。 如果我在everyone组中特别列出一个被排除的主机,那么该主机将被正确排除 所以Ansible并不像人们想象的那样工作 什么是最好的方法让这个工作 我试过: 主机:“{a

运行Ansible 2.9.3

在主机每天进出的大型环境中工作,我需要在主机组中使用通配符主机名:即:

[被排除在外的主机]

霍斯特01酒店

host02

旅社03

[各位]

主人*

在我的剧本里我有


  • 名称:“使用主机组进行测试”

    主持人:各位,!被排除的主机

    连接:本地

    任务:

问题是,任务正在排除组中的主机上运行。 如果我在everyone组中特别列出一个被排除的主机,那么该主机将被正确排除

所以Ansible并不像人们想象的那样工作

什么是最好的方法让这个工作

我试过: 主机:“{ansible_hostname}}”,!被排除的主机

但它的错误是yaml语法无效

要求:我不能具体列出每一位主持人,他们来去太频繁了。 剧本将自动复制到每个主机上,然后开始执行,因此我需要在所有主机上使用相同的ansible命令行。

Blaster

您是否尝试过按IP地址分配主机

You can use wildcard patterns ... IP addresses, as long as the hosts are named in your inventory by ... IP address:

192.0.\*
\*.example.com
\*.com**

我找到了解决问题的办法:

---
- name: "Add host name to thishost group"

hosts: localhost

connection: local

tasks:

- name: "add host"

  ini_file:

    path: /opt/ansible/etc/hosts

    section: thishost

    option: "{{ ansible_hostname }}"

    allow_no_value: yes

-  meta: refresh_inventory

  - name: "Do tasks on all except excluded_hosts"

hosts: thishost,!excluded_hosts

connection: local

tasks:
它的作用是在playbook运行时将主机名添加到名为“thishost”的组中。然后刷新库存文件并运行下一个播放。
这避免了必须不断更新数千台主机的资源清册,避免使用通配符和范围。

我们不确定你为什么要这么做-因此很难知道我们是否正确回答了问题-你能在提问时进一步解释你的动机吗?这是问题的重复。我投票决定关闭这个。如果他们“来去太频繁”,听起来你需要创建一个动态清单脚本。这个答案是不相关的。问题中的主机既不是FQDN,也不是IP。在我错过的上一次编辑中,它们是否处于不在TCP/IP上的状态?这是一种在网络上快速汇总未知实体的方法。我确实喜欢命名主机,但对于某些网络,这不是一个选项。