From 333f6d447bba84165ba2ba9f4669282a39ea494e Mon Sep 17 00:00:00 2001 From: jctanner Date: Tue, 1 Nov 2016 19:34:26 -0400 Subject: [PATCH] aix network facts: Separate out the uname call to reduce total calls (#18288) * aix network facts: Separate out the uname call to reduce total calls * Remove duplicate check Fixes #11289 --- lib/ansible/module_utils/facts.py | 74 +++++++++++++++++-------------- 1 file changed, 41 insertions(+), 33 deletions(-) diff --git a/lib/ansible/module_utils/facts.py b/lib/ansible/module_utils/facts.py index 9c98f796f96..f788ce8634f 100644 --- a/lib/ansible/module_utils/facts.py +++ b/lib/ansible/module_utils/facts.py @@ -2837,6 +2837,14 @@ class AIXNetwork(GenericBsdIfconfigNetwork): all_ipv4_addresses = [], all_ipv6_addresses = [], ) + + uname_rc = None + uname_out = None + uname_err = None + uname_path = self.module.get_bin_path('uname') + if uname_path: + uname_rc, uname_out, uname_err = self.module.run_command([uname_path, '-W']) + rc, out, err = self.module.run_command([ifconfig_path, ifconfig_options]) for line in out.splitlines(): @@ -2866,40 +2874,40 @@ class AIXNetwork(GenericBsdIfconfigNetwork): self.parse_inet6_line(words, current_if, ips) else: self.parse_unknown_line(words, current_if, ips) - uname_path = self.module.get_bin_path('uname') - if uname_path: - rc, out, err = self.module.run_command([uname_path, '-W']) - # don't bother with wpars it does not work - # zero means not in wpar - if not rc and out.split()[0] == '0': - if current_if['macaddress'] == 'unknown' and re.match('^en', current_if['device']): - entstat_path = self.module.get_bin_path('entstat') - if entstat_path: - rc, out, err = self.module.run_command([entstat_path, current_if['device'] ]) - if rc != 0: - break - for line in out.splitlines(): - if not line: - pass - buff = re.match('^Hardware Address: (.*)', line) - if buff: - current_if['macaddress'] = buff.group(1) - buff = re.match('^Device Type:', line) - if buff and re.match('.*Ethernet', line): - current_if['type'] = 'ether' - # device must have mtu attribute in ODM - if 'mtu' not in current_if: - lsattr_path = self.module.get_bin_path('lsattr') - if lsattr_path: - rc, out, err = self.module.run_command([lsattr_path,'-El', current_if['device'] ]) - if rc != 0: - break - for line in out.splitlines(): - if line: - words = line.split() - if words[0] == 'mtu': - current_if['mtu'] = words[1] + # don't bother with wpars it does not work + # zero means not in wpar + if not uname_rc and uname_out.split()[0] == '0': + + if current_if['macaddress'] == 'unknown' and re.match('^en', current_if['device']): + entstat_path = self.module.get_bin_path('entstat') + if entstat_path: + rc, out, err = self.module.run_command([entstat_path, current_if['device'] ]) + if rc != 0: + break + for line in out.splitlines(): + if not line: + pass + buff = re.match('^Hardware Address: (.*)', line) + if buff: + current_if['macaddress'] = buff.group(1) + + buff = re.match('^Device Type:', line) + if buff and re.match('.*Ethernet', line): + current_if['type'] = 'ether' + + # device must have mtu attribute in ODM + if 'mtu' not in current_if: + lsattr_path = self.module.get_bin_path('lsattr') + if lsattr_path: + rc, out, err = self.module.run_command([lsattr_path,'-El', current_if['device'] ]) + if rc != 0: + break + for line in out.splitlines(): + if line: + words = line.split() + if words[0] == 'mtu': + current_if['mtu'] = words[1] return interfaces, ips # AIX 'ifconfig -a' does not inform about MTU, so remove current_if['mtu'] here