来自Ansible插件的动态库存组:nmap

时间:2020-05-15 18:35:45

标签: ansible jinja2 ansible-inventory nmap

我正在尝试使用nmap plugin来创建动态广告资源,然后将插件返回的内容分组。不幸的是,我缺少了一些东西,因为我似乎无法创建一个组。
在这种情况下,我有几台要分组的主机,名称为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

但是收益总是一样的...

到现在为止,我不得不猜测可能的var名称

主机,主机,主机名,主机名,inventory_hostname,hostvars,host.fqdn,并且列表不停...

我显然缺少一些基本知识,但是我似乎无法通过搜索找到任何产生任何结果的东西。

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

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

1 个答案:

答案 0 :(得分:1)

我显然缺少一些基本知识...

我不确定你是不是。我同意根据文档,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清单中主机的规范名称。


所有这些都准备就绪后,您应该会看到所需的行为:unknown变量中带有inventory_hostname的主机将最终进入unknown组。