fixes a number of issues with nxos_facts (#22923)

* updates command runs to return warning if command fails
* fixes variable issues from recent refactoring
* removes provider from return of module
pull/22931/head
Peter Sprygada 8 years ago committed by GitHub
parent 73f50b4f9f
commit 866f67e213

@ -50,7 +50,7 @@ nxos_argument_spec = {
'validate_certs': dict(type='bool'), 'validate_certs': dict(type='bool'),
'timeout': dict(type='int'), 'timeout': dict(type='int'),
'provider': dict(type='dict', no_log=True), 'provider': dict(type='dict'),
'transport': dict(choices=['cli', 'nxapi']) 'transport': dict(choices=['cli', 'nxapi'])
} }

@ -203,7 +203,7 @@ class FactsBase(object):
try: try:
return resp[0] return resp[0]
except IndexError: except IndexError:
self.warnings.append('command %s returned to data, facts will not be populated' % command_string) self.warnings.append('command %s failed, facts will not be populated' % command_string)
return None return None
def transform_dict(self, data, keymap): def transform_dict(self, data, keymap):
@ -290,13 +290,13 @@ class Interfaces(FactsBase):
if data: if data:
self.facts['interfaces'] = self.populate_interfaces(data) self.facts['interfaces'] = self.populate_interfaces(data)
data = self.run('show ipv6 inteface', 'json') data = self.run('show ipv6 interface', 'json')
if data: if data:
self.parse_ipv6_interfaces(out) self.parse_ipv6_interfaces(data)
data = self.run('show lldp neighbors') data = self.run('show lldp neighbors')
if data: if data:
self.facts['neighbors'] = self.populate_neighbors(out) self.facts['neighbors'] = self.populate_neighbors(data)
def populate_interfaces(self, data): def populate_interfaces(self, data):
interfaces = dict() interfaces = dict()
@ -315,6 +315,11 @@ class Interfaces(FactsBase):
return interfaces return interfaces
def populate_neighbors(self, data): def populate_neighbors(self, data):
# if there are no neighbors the show command returns
# ERROR: No neighbour information
if data.startswith('ERROR'):
return dict()
data = data['TABLE_nbor']['ROW_nbor'] data = data['TABLE_nbor']['ROW_nbor']
if isinstance(data, dict): if isinstance(data, dict):
data = [data] data = [data]

@ -57,6 +57,7 @@ class ActionModule(_ActionModule):
pc = copy.deepcopy(self._play_context) pc = copy.deepcopy(self._play_context)
pc.connection = 'network_cli' pc.connection = 'network_cli'
pc.network_os = 'nxos' pc.network_os = 'nxos'
pc.remote_addr = provider['host'] or self._play_context.remote_addr
pc.port = provider['port'] or self._play_context.port or 22 pc.port = provider['port'] or self._play_context.port or 22
pc.remote_user = provider['username'] or self._play_context.connection_user pc.remote_user = provider['username'] or self._play_context.connection_user
pc.password = provider['password'] or self._play_context.password pc.password = provider['password'] or self._play_context.password
@ -115,7 +116,10 @@ class ActionModule(_ActionModule):
# make sure a transport value is set in args # make sure a transport value is set in args
self._task.args['transport'] = transport self._task.args['transport'] = transport
return super(ActionModule, self).run(tmp, task_vars) result = super(ActionModule, self).run(tmp, task_vars)
del result['invocation']['module_args']['provider']
return result
def _get_socket_path(self, play_context): def _get_socket_path(self, play_context):
ssh = connection_loader.get('ssh', class_only=True) ssh = connection_loader.get('ssh', class_only=True)

Loading…
Cancel
Save