From 067b63ccbc6942a0399eb43d7fdf314b5c9b417f Mon Sep 17 00:00:00 2001 From: Michele Bologna Date: Thu, 14 Dec 2017 18:20:02 +0100 Subject: [PATCH] Feat: add grain for all FQDNs This PR adds a grain named fqdns to the grains. fqdns represents all the FQDNs known for the system on all available interfaces (excluding lo). Note: hostname != FQDN hostname is the UNIX name of the machine. A machine can have one and only one hostname. FQDN is host.domain that resolves to an IP address that the machines is answering to. A machine can have 1+ FQDNs. Upstream PR: https://github.com/saltstack/salt/pull/45060 --- salt/grains/core.py | 27 +++++++++++++++++++++++++++ tests/integration/modules/test_grains.py | 1 + tests/unit/grains/test_core.py | 1 + 3 files changed, 29 insertions(+) diff --git a/salt/grains/core.py b/salt/grains/core.py index 9352987abd..f8e36a895e 100644 --- a/salt/grains/core.py +++ b/salt/grains/core.py @@ -1890,6 +1890,33 @@ def append_domain(): return grain +def fqdns(): + ''' + Return all known FQDNs for the system by enumerating all interfaces and + then trying to reverse resolve them (excluding 'lo' interface). + ''' + # Provides: + # fqdns + + grains = {} + fqdns = set() + + addresses = salt.utils.network.ip_addrs(include_loopback=False, + interface_data=_INTERFACES) + addresses.extend(salt.utils.network.ip_addrs6(include_loopback=False, + interface_data=_INTERFACES)) + + for ip in addresses: + try: + fqdns.add(socket.gethostbyaddr(ip)[0]) + except (socket.error, socket.herror, + socket.gaierror, socket.timeout) as e: + log.error("Exception during resolving address: " + str(e)) + + grains['fqdns'] = list(fqdns) + return grains + + def ip_fqdn(): ''' Return ip address and FQDN grains diff --git a/tests/integration/modules/test_grains.py b/tests/integration/modules/test_grains.py index 709f882b45..aa7bd44202 100644 --- a/tests/integration/modules/test_grains.py +++ b/tests/integration/modules/test_grains.py @@ -51,6 +51,7 @@ class TestModulesGrains(ModuleCase): 'cpuarch', 'domain', 'fqdn', + 'fqdns', 'gid', 'groupname', 'host', diff --git a/tests/unit/grains/test_core.py b/tests/unit/grains/test_core.py index e781fadefe..dba8d082c5 100644 --- a/tests/unit/grains/test_core.py +++ b/tests/unit/grains/test_core.py @@ -7,6 +7,7 @@ from __future__ import absolute_import, print_function, unicode_literals import logging import os +import socket # Import Salt Testing Libs try: -- 2.16.2