来自 ansible 插件的动态清单组:nmap

Dynamic inventory groups from ansible plugin: nmap

我正在尝试在 ansible 中使用 nmap plugin 创建一个动态清单,然后将插件 return 的东西分组。不幸的是,我遗漏了一些东西,因为我似乎无法创建一个组。
在这种情况下,我有一对名为 unknownxxxxxxxx 的主机,我想对其进行分组。

plugin: nmap
strict: false
address: 10.0.1.0/24   
ports: no
groups:
  unknown: "'unknown' in hostname"

我运行我的插件- ansible-inventory -i nmap.yml --export --output=inv --list

但是 return 总是一样的...

到目前为止,我已经开始猜测可能的变量名称

host, hosts, hostnames, hostname, inventory_hostname, hostvars, host.fqdn, and the list goes on and on...

我显然遗漏了一些基本的东西,但我似乎无法通过搜索找到任何产生任何结果的东西。

有人可以帮助我了解我在使用 jinja 时做错了什么吗?

也许我需要使用 compose:keyed_groups: ?

I'm obviously missing something basic...

我不确定你是。我同意根据文档 nmap 插件应该按照您尝试使用它的方式工作,但像您一样我无法获得 groupscompose按描述工作的键。

幸运的是,我们可以直接使用 constructed 库存插件来解决这个问题。

我们需要使用清单目录,而不是清单 文件,因为我们需要多个清单文件。我们会将以下内容放入 ansible.cfg:

[defaults]
inventory = inventory

然后我们将创建一个目录 inventory,我们将在其中放置两个文件。首先,我们会将您的 nmap 存货放入 inventory/10nmap.yml。它看起来像这样:

plugin: nmap
strict: false
address: 10.0.1.0/24   
ports: false

然后我们将 constructed 插件的配置放到 inventory/20constructed.yml:

plugin: constructed
strict: False

groups:
  unknown: "'unknown' in inventory_hostname"

我们将文件命名为 10nmap.yml20constructed.yml 因为我们需要确保 constructed 插件在 nmap 插件之后运行(另外,我们在此处检查 inventory_hostname,因为这是 Ansible 清单中主机的规范名称)。


所有这些都准备就绪后,您应该会看到您正在寻找的行为:在 inventory_hostname 变量中具有 unknown 的主机将最终出现在 unknown 组中。