Skip to content

Commit

Permalink
eos_l2_interface handle "Interface does not exist" (ansible#56787)
Browse files Browse the repository at this point in the history
* Quick and dirty attempt to handle eapi error

* Well this should probably change

* Hopefully this works correctly?

* Fix check_rc handling with httpapi

* Add tests that should hopefully cover the error

* Fix warnings

* Improve tests
  • Loading branch information
Qalthos authored and NilashishC committed May 23, 2019
1 parent 5005c35 commit cebb363
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 7 deletions.
4 changes: 2 additions & 2 deletions lib/ansible/module_utils/network/eos/eos.py
Original file line number Diff line number Diff line change
Expand Up @@ -449,10 +449,10 @@ def run_commands(self, commands, check_rc=True):
def run_queue(queue, output):
try:
response = to_list(self._connection.send_request(queue, output=output))
except Exception as exc:
except ConnectionError as exc:
if check_rc:
raise
return to_text(exc)
return to_list(to_text(exc))

if output == 'json':
response = [json.loads(item) for item in response]
Expand Down
8 changes: 3 additions & 5 deletions lib/ansible/modules/network/eos/eos_l2_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,8 +211,8 @@ def map_config_to_obj(module, warnings):
for item in set(match):
command = {'command': 'show interfaces {0} switchport | include Switchport'.format(item),
'output': 'text'}
command_result = run_commands(module, command)
if command_result[0] == "% Interface does not exist":
command_result = run_commands(module, command, check_rc=False)
if "Interface does not exist" in command_result[0]:
warnings.append("Could not gather switchport information for {0}: {1}".format(item, command_result[0]))
continue
elif command_result[0] != "":
Expand Down Expand Up @@ -298,9 +298,7 @@ def main():
supports_check_mode=True)

warnings = list()
result = {'changed': False}
if warnings:
result['warnings'] = warnings
result = {'changed': False, 'warnings': warnings}

want = map_params_to_obj(module)
have = map_config_to_obj(module, warnings)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
- debug:
msg: "START eos_l3_interface/cli/no_interface.yaml on connection={{ ansible_connection }}"

- name: Create fake interface
eos_interface:
name: Management0
become: yes

- block:
- name: eos_l2_interface shouldn't fail
eos_l2_interface: &no_switchport
name: Ethernet1
state: absent
become: yes
register: result

- assert:
that: "'Interface does not exist' in result.warnings[0]"

always:
- name: Cleanup fake interface
cli_config:
config: no interface Management0
become: yes

- name: eos_l2_interface should still not fail
eos_l2_interface: *no_switchport
become: yes
register: result

- assert:
that: "result.warnings is not defined"

- debug:
msg: "END eos_l3_interface/cli/no_interface.yaml on connection={{ ansible_connection }}"
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
- debug:
msg: "START eos_l3_interface/eapi/no_interface.yaml on connection={{ ansible_connection }}"

- name: Create fake interface
eos_interface:
name: Management0
become: yes

- block:
- name: eos_l2_interface shouldn't fail
eos_l2_interface: &no_switchport
name: Ethernet1
state: absent
become: yes
register: result

- assert:
that: "'Interface does not exist' in result.warnings[0]"

always:
- name: Cleanup fake interface
eos_config:
lines:
- no interface Management0
become: yes

- name: eos_l2_interface should still not fail
eos_l2_interface: *no_switchport
become: yes
register: result

- assert:
that: "result.warnings is not defined"

- debug:
msg: "END eos_l3_interface/eapi/no_interface.yaml on connection={{ ansible_connection }}"

0 comments on commit cebb363

Please sign in to comment.