Skip to content

Commit

Permalink
nxos_vlan refactor to support non structured output (#43805)
Browse files Browse the repository at this point in the history
* nxos_vlan refactor to support non structured output

Signed-off-by: Trishna Guha <trishnaguha17@gmail.com>

* unittest fix

Signed-off-by: Trishna Guha <trishnaguha17@gmail.com>

* minor fixes

Signed-off-by: Trishna Guha <trishnaguha17@gmail.com>

* use check_rc

Signed-off-by: Trishna Guha <trishnaguha17@gmail.com>

* address review comment

Signed-off-by: Trishna Guha <trishnaguha17@gmail.com>

* remove additional return statement

* address Nate's review

Signed-off-by: Trishna Guha <trishnaguha17@gmail.com>
  • Loading branch information
trishnaguha committed Aug 10, 2018
1 parent f221105 commit 9634693
Show file tree
Hide file tree
Showing 9 changed files with 199 additions and 149 deletions.
13 changes: 12 additions & 1 deletion lib/ansible/module_utils/network/nxos/nxos.py
Expand Up @@ -154,7 +154,18 @@ def run_commands(self, commands, check_rc=True):
connection = self._get_connection()

try:
return connection.run_commands(commands, check_rc)
out = connection.run_commands(commands, check_rc)
if check_rc == 'retry_json':
capabilities = self.get_capabilities()
network_api = capabilities.get('network_api')

if network_api == 'cliconf' and out:
for index, resp in enumerate(out):
if 'Invalid command at' in resp and 'json' in resp:
if commands[index]['output'] == 'json':
commands[index]['output'] = 'text'
out = connection.run_commands(commands, check_rc)
return out
except ConnectionError as exc:
self._module.fail_json(msg=to_text(exc))

Expand Down
60 changes: 15 additions & 45 deletions lib/ansible/modules/network/nxos/nxos_facts.py
Expand Up @@ -194,7 +194,7 @@ def run(self, command, output='text'):
'command': command,
'output': output
}
resp = run_commands(self.module, [command], check_rc=False)
resp = run_commands(self.module, [command], check_rc='retry_json')
try:
return resp[0]
except IndexError:
Expand Down Expand Up @@ -234,10 +234,8 @@ class Default(FactsBase):
def populate(self):
data = None

try:
data = self.run('show version', output='json')
except ConnectionError:
data = self.run('show version')
data = self.run('show version', output='json')

if data:
if isinstance(data, dict):
if data.get('sys_ver_str'):
Expand Down Expand Up @@ -300,10 +298,8 @@ def populate(self):
self.facts['filesystems'] = self.parse_filesystems(data)

data = None
try:
data = self.run('show system resources', output='json')
except ConnectionError:
data = self.run('show system resources')
data = self.run('show system resources', output='json')

if data:
if isinstance(data, dict):
self.facts['memtotal_mb'] = int(data['memory_usage_total']) / 1024
Expand Down Expand Up @@ -380,10 +376,8 @@ def populate(self):
self.facts['all_ipv6_addresses'] = list()
data = None

try:
data = self.run('show interface', output='json')
except ConnectionError:
data = self.run('show interface')
data = self.run('show interface', output='json')

if data:
if isinstance(data, dict):
self.facts['interfaces'] = self.populate_structured_interfaces(data)
Expand All @@ -392,10 +386,7 @@ def populate(self):
self.facts['interfaces'] = self.populate_interfaces(interfaces)

if self.ipv6_structure_op_supported():
try:
data = self.run('show ipv6 interface', output='json')
except ConnectionError:
data = self.run('show ipv6 interface')
data = self.run('show ipv6 interface', output='json')
else:
data = None
if data:
Expand All @@ -409,10 +400,7 @@ def populate(self):
if data:
self.facts['neighbors'] = self.populate_neighbors(data)

try:
data = self.run('show cdp neighbors detail', output='json')
except ConnectionError:
data = self.run('show cdp neighbors detail')
data = self.run('show cdp neighbors detail', output='json')
if data:
if isinstance(data, dict):
self.facts['neighbors'] = self.populate_structured_neighbors_cdp(data)
Expand Down Expand Up @@ -718,10 +706,7 @@ class Legacy(FactsBase):
def populate(self):
data = None

try:
data = self.run('show version')
except ConnectionError:
data = self.run('show version', output='json')
data = self.run('show version', output='json')
if data:
if isinstance(data, dict):
self.facts.update(self.transform_dict(data, self.VERSION_MAP))
Expand All @@ -730,50 +715,35 @@ def populate(self):
self.facts['_os'] = self.parse_os(data)
self.facts['_platform'] = self.parse_platform(data)

try:
data = self.run('show interface', output='json')
except ConnectionError:
data = self.run('show interface')
data = self.run('show interface', output='json')
if data:
if isinstance(data, dict):
self.facts['_interfaces_list'] = self.parse_structured_interfaces(data)
else:
self.facts['_interfaces_list'] = self.parse_interfaces(data)

try:
data = self.run('show vlan brief', output='json')
except ConnectionError:
data = self.run('show vlan brief')
data = self.run('show vlan brief', output='json')
if data:
if isinstance(data, dict):
self.facts['_vlan_list'] = self.parse_structured_vlans(data)
else:
self.facts['_vlan_list'] = self.parse_vlans(data)

try:
data = self.run('show module', output='json')
except ConnectionError:
data = self.run('show module')
data = self.run('show module', output='json')
if data:
if isinstance(data, dict):
self.facts['_module'] = self.parse_structured_module(data)
else:
self.facts['_module'] = self.parse_module(data)

try:
data = self.run('show environment fan', output='json')
except ConnectionError:
data = self.run('show environment fan')
data = self.run('show environment fan', output='json')
if data:
if isinstance(data, dict):
self.facts['_fan_info'] = self.parse_structured_fan_info(data)
else:
self.facts['_fan_info'] = self.parse_fan_info(data)

try:
data = self.run('show environment power', output='json')
except ConnectionError:
data = self.run('show environment power')
data = self.run('show environment power', output='json')
if data:
if isinstance(data, dict):
self.facts['_power_supply_info'] = self.parse_structured_power_supply_info(data)
Expand Down

0 comments on commit 9634693

Please sign in to comment.