From 435dfc2b9c51d414c2e775e7e39253da35c15546 Mon Sep 17 00:00:00 2001 From: Michael Scherer Date: Thu, 20 Oct 2016 01:08:43 +0200 Subject: [PATCH] Add a bit more information for network facts on BSD This was tested on FreeBSD 11, NetBSD 7 and OpenBSD 6.0 This currently detect ether, loopback and tunnel. --- lib/ansible/module_utils/facts.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/ansible/module_utils/facts.py b/lib/ansible/module_utils/facts.py index 79174d2df4..6c0049649f 100644 --- a/lib/ansible/module_utils/facts.py +++ b/lib/ansible/module_utils/facts.py @@ -2550,6 +2550,7 @@ class GenericBsdIfconfigNetwork(Network): default_ipv4, default_ipv6 = self.get_default_interfaces(route_path) interfaces, ips = self.get_interfaces_info(ifconfig_path) + self.detect_type_media(interfaces) self.merge_default_interface(default_ipv4, interfaces, 'ipv4') self.merge_default_interface(default_ipv6, interfaces, 'ipv6') self.facts['interfaces'] = interfaces.keys() @@ -2564,6 +2565,12 @@ class GenericBsdIfconfigNetwork(Network): return self.facts + def detect_type_media(self, interfaces): + for iface in interfaces: + if 'media' in interfaces[iface]: + if 'ether' in interfaces[iface]['media'].lower(): + interfaces[iface]['type'] = 'ether' + def get_default_interfaces(self, route_path): # Use the commands: @@ -2636,6 +2643,8 @@ class GenericBsdIfconfigNetwork(Network): self.parse_inet_line(words, current_if, ips) elif words[0] == 'inet6': self.parse_inet6_line(words, current_if, ips) + elif words[0] == 'tunnel': + self.parse_tunnel_line(words, current_if, ips) else: self.parse_unknown_line(words, current_if, ips) @@ -2645,6 +2654,8 @@ class GenericBsdIfconfigNetwork(Network): device = words[0][0:-1] current_if = {'device': device, 'ipv4': [], 'ipv6': [], 'type': 'unknown'} current_if['flags'] = self.get_options(words[1]) + if 'LOOPBACK' in current_if['flags']: + current_if['type'] = 'loopback' current_if['macaddress'] = 'unknown' # will be overwritten later if len(words) >= 5 : # Newer FreeBSD versions @@ -2665,6 +2676,7 @@ class GenericBsdIfconfigNetwork(Network): def parse_ether_line(self, words, current_if, ips): current_if['macaddress'] = words[1] + current_if['type'] = 'ether' def parse_media_line(self, words, current_if, ips): # not sure if this is useful - we also drop information @@ -2723,6 +2735,9 @@ class GenericBsdIfconfigNetwork(Network): ips['all_ipv6_addresses'].append(address['address']) current_if['ipv6'].append(address) + def parse_tunnel_line(self, words, current_if, ips): + current_if['type'] = 'tunnel' + def parse_unknown_line(self, words, current_if, ips): # we are going to ignore unknown lines here - this may be # a bad idea - but you can override it in your subclass @@ -2970,6 +2985,7 @@ class OpenBSDNetwork(GenericBsdIfconfigNetwork): # Return macaddress instead of lladdr def parse_lladdr_line(self, words, current_if, ips): current_if['macaddress'] = words[1] + current_if['type'] = 'ether' class NetBSDNetwork(GenericBsdIfconfigNetwork): """