From d617f6919f87941884a38fabe530966eb925841b Mon Sep 17 00:00:00 2001 From: "patchback[bot]" <45432694+patchback[bot]@users.noreply.github.com> Date: Sun, 20 Aug 2023 14:57:58 +0200 Subject: [PATCH] [PR #7119/eaf3926c backport][stable-7] nmap inventory plugin, add use_arp_ping option (#7134) nmap inventory plugin, add use_arp_ping option (#7119) * nmap inventory plugin, add use_arp_ping option * Apply suggestions from code review Co-authored-by: Felix Fontein * Update plugins/inventory/nmap.py Co-authored-by: Felix Fontein --------- Co-authored-by: Felix Fontein (cherry picked from commit eaf3926c2c96044466c824ea4eb0f9a45cb0e8c7) Co-authored-by: Brian Coca --- .../7118-nmap_inv_plugin_no_arp_option.yml | 4 +++ plugins/inventory/nmap.py | 36 +++++++++++-------- 2 files changed, 26 insertions(+), 14 deletions(-) create mode 100644 changelogs/fragments/7118-nmap_inv_plugin_no_arp_option.yml diff --git a/changelogs/fragments/7118-nmap_inv_plugin_no_arp_option.yml b/changelogs/fragments/7118-nmap_inv_plugin_no_arp_option.yml new file mode 100644 index 0000000000..367b2ddbd1 --- /dev/null +++ b/changelogs/fragments/7118-nmap_inv_plugin_no_arp_option.yml @@ -0,0 +1,4 @@ +minor_changes: + - nmap inventory plugin - now has a ``use_arp_ping`` option to allow the user to disable the default ARP ping query for a more reliable form (https://github.com/ansible-collections/community.general/pull/7119). +bugfixes: + - nmap inventory plugin - now uses ``get_option`` in all cases to get its configuration information (https://github.com/ansible-collections/community.general/pull/7119). diff --git a/plugins/inventory/nmap.py b/plugins/inventory/nmap.py index 6e09e026a8..2c96850202 100644 --- a/plugins/inventory/nmap.py +++ b/plugins/inventory/nmap.py @@ -85,6 +85,11 @@ DOCUMENTATION = ''' type: boolean default: false version_added: 6.1.0 + use_arp_ping: + description: Whether to always (V(true)) use the quick ARP ping or (V(false)) a slower but more reliable method. + type: boolean + default: true + version_added: 7.4.0 notes: - At least one of ipv4 or ipv6 is required to be True, both can be True, but they cannot both be False. - 'TODO: add OS fingerprinting' @@ -196,40 +201,43 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): # setup command cmd = [self._nmap] - if self._options['sudo']: + if self.get_option['sudo']: cmd.insert(0, 'sudo') - if self._options['port']: + if self.get_option['port']: cmd.append('-p') - cmd.append(self._options['port']) + cmd.append(self.get_option['port']) - if not self._options['ports']: + if not self.get_option['ports']: cmd.append('-sP') - if self._options['ipv4'] and not self._options['ipv6']: + if self.get_option['ipv4'] and not self.get_option['ipv6']: cmd.append('-4') - elif self._options['ipv6'] and not self._options['ipv4']: + elif self.get_option['ipv6'] and not self.get_option['ipv4']: cmd.append('-6') - elif not self._options['ipv6'] and not self._options['ipv4']: + elif not self.get_option['ipv6'] and not self.get_option['ipv4']: raise AnsibleParserError('One of ipv4 or ipv6 must be enabled for this plugin') - if self._options['exclude']: + if self.get_option['exclude']: cmd.append('--exclude') - cmd.append(','.join(self._options['exclude'])) + cmd.append(','.join(self.get_option['exclude'])) - if self._options['dns_resolve']: + if self.get_option['dns_resolve']: cmd.append('-n') - if self._options['udp_scan']: + if self.get_option['udp_scan']: cmd.append('-sU') - if self._options['icmp_timestamp']: + if self.get_option['icmp_timestamp']: cmd.append('-PP') - if self._options['open']: + if self.get_option['open']: cmd.append('--open') - cmd.append(self._options['address']) + if not self.get_option['use_arp_ping']: + cmd.append('--disable-arp-ping') + + cmd.append(self.get_option['address']) try: # execute p = Popen(cmd, stdout=PIPE, stderr=PIPE)