diff --git a/lib/ansible/module_utils/network/eos/eos.py b/lib/ansible/module_utils/network/eos/eos.py index 77a09045cb0..86364c832b7 100644 --- a/lib/ansible/module_utils/network/eos/eos.py +++ b/lib/ansible/module_utils/network/eos/eos.py @@ -449,10 +449,10 @@ class HttpApi: 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] diff --git a/lib/ansible/modules/network/eos/eos_l2_interface.py b/lib/ansible/modules/network/eos/eos_l2_interface.py index db4d0e398dc..7a3bc37efb4 100644 --- a/lib/ansible/modules/network/eos/eos_l2_interface.py +++ b/lib/ansible/modules/network/eos/eos_l2_interface.py @@ -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] != "": @@ -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) diff --git a/test/integration/targets/eos_l2_interface/tests/cli/no_interface.yaml b/test/integration/targets/eos_l2_interface/tests/cli/no_interface.yaml new file mode 100644 index 00000000000..59b402c75b2 --- /dev/null +++ b/test/integration/targets/eos_l2_interface/tests/cli/no_interface.yaml @@ -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 }}" diff --git a/test/integration/targets/eos_l2_interface/tests/eapi/no_interface.yaml b/test/integration/targets/eos_l2_interface/tests/eapi/no_interface.yaml new file mode 100644 index 00000000000..5be724cbc13 --- /dev/null +++ b/test/integration/targets/eos_l2_interface/tests/eapi/no_interface.yaml @@ -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 }}"