From 14186af558ef3a2d4b1f01a68acdbcec25293338 Mon Sep 17 00:00:00 2001 From: saichint Date: Wed, 9 Aug 2017 08:25:35 -0700 Subject: [PATCH] Fix for nxos_ospf idempotent issue (#27913) --- lib/ansible/modules/network/nxos/nxos_ospf.py | 2 +- test/integration/nxos.yaml | 9 +++ .../targets/nxos_ospf/defaults/main.yaml | 2 + .../targets/nxos_ospf/meta/main.yml | 2 + .../targets/nxos_ospf/tasks/cli.yaml | 15 +++++ .../targets/nxos_ospf/tasks/main.yaml | 7 +++ .../targets/nxos_ospf/tasks/nxapi.yaml | 28 ++++++++++ .../targets/nxos_ospf/tests/cli/sanity.yaml | 4 ++ .../nxos_ospf/tests/common/sanity.yaml | 55 +++++++++++++++++++ .../targets/nxos_ospf/tests/nxapi/sanity.yaml | 4 ++ 10 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 test/integration/targets/nxos_ospf/defaults/main.yaml create mode 100644 test/integration/targets/nxos_ospf/meta/main.yml create mode 100644 test/integration/targets/nxos_ospf/tasks/cli.yaml create mode 100644 test/integration/targets/nxos_ospf/tasks/main.yaml create mode 100644 test/integration/targets/nxos_ospf/tasks/nxapi.yaml create mode 100644 test/integration/targets/nxos_ospf/tests/cli/sanity.yaml create mode 100644 test/integration/targets/nxos_ospf/tests/common/sanity.yaml create mode 100644 test/integration/targets/nxos_ospf/tests/nxapi/sanity.yaml diff --git a/lib/ansible/modules/network/nxos/nxos_ospf.py b/lib/ansible/modules/network/nxos/nxos_ospf.py index 6fb4f7091aa..47a71c36bdd 100644 --- a/lib/ansible/modules/network/nxos/nxos_ospf.py +++ b/lib/ansible/modules/network/nxos/nxos_ospf.py @@ -139,7 +139,7 @@ def main(): existing_list = existing['ospf'] candidate = CustomNetworkConfig(indent=3) - if state == 'present': + if state == 'present' and ospf not in existing_list: state_present(module, proposed, candidate) if state == 'absent' and ospf in existing_list: state_absent(module, proposed, candidate) diff --git a/test/integration/nxos.yaml b/test/integration/nxos.yaml index 64d0631b3b1..00358b57e92 100644 --- a/test/integration/nxos.yaml +++ b/test/integration/nxos.yaml @@ -240,6 +240,15 @@ failed_modules: "{{ failed_modules }} + [ 'nxos_vxlan_vtep' ]" test_failed: true + - block: + - include_role: + name: nxos_ospf + when: "limit_to in ['*', 'nxos_ospf']" + rescue: + - set_fact: + failed_modules: "{{ failed_modules }} + [ 'nxos_ospf' ]" + test_failed: true + - block: - include_role: name: nxos_interface_ospf diff --git a/test/integration/targets/nxos_ospf/defaults/main.yaml b/test/integration/targets/nxos_ospf/defaults/main.yaml new file mode 100644 index 00000000000..5f709c5aac1 --- /dev/null +++ b/test/integration/targets/nxos_ospf/defaults/main.yaml @@ -0,0 +1,2 @@ +--- +testcase: "*" diff --git a/test/integration/targets/nxos_ospf/meta/main.yml b/test/integration/targets/nxos_ospf/meta/main.yml new file mode 100644 index 00000000000..ae741cbdc71 --- /dev/null +++ b/test/integration/targets/nxos_ospf/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: + - prepare_nxos_tests diff --git a/test/integration/targets/nxos_ospf/tasks/cli.yaml b/test/integration/targets/nxos_ospf/tasks/cli.yaml new file mode 100644 index 00000000000..d675462dd02 --- /dev/null +++ b/test/integration/targets/nxos_ospf/tasks/cli.yaml @@ -0,0 +1,15 @@ +--- +- name: collect all cli test cases + find: + paths: "{{ role_path }}/tests/cli" + patterns: "{{ testcase }}.yaml" + register: test_cases + +- name: set test_items + set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}" + +- name: run test case + include: "{{ test_case_to_run }}" + with_items: "{{ test_items }}" + loop_control: + loop_var: test_case_to_run diff --git a/test/integration/targets/nxos_ospf/tasks/main.yaml b/test/integration/targets/nxos_ospf/tasks/main.yaml new file mode 100644 index 00000000000..fea9337c14c --- /dev/null +++ b/test/integration/targets/nxos_ospf/tasks/main.yaml @@ -0,0 +1,7 @@ +--- +# Use block to ensure that both cli and nxapi tests +# will run even if there are failures or errors. +- block: + - { include: cli.yaml, tags: ['cli'] } + always: + - { include: nxapi.yaml, tags: ['nxapi'] } diff --git a/test/integration/targets/nxos_ospf/tasks/nxapi.yaml b/test/integration/targets/nxos_ospf/tasks/nxapi.yaml new file mode 100644 index 00000000000..ea525379f7f --- /dev/null +++ b/test/integration/targets/nxos_ospf/tasks/nxapi.yaml @@ -0,0 +1,28 @@ +--- +- name: collect all nxapi test cases + find: + paths: "{{ role_path }}/tests/nxapi" + patterns: "{{ testcase }}.yaml" + register: test_cases + +- name: set test_items + set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}" + +- name: enable nxapi + nxos_config: + lines: + - feature nxapi + - nxapi http port 80 + provider: "{{ cli }}" + +- name: run test case + include: "{{ test_case_to_run }}" + with_items: "{{ test_items }}" + loop_control: + loop_var: test_case_to_run + +- name: disable nxapi + nxos_config: + lines: + - no feature nxapi + provider: "{{ cli }}" diff --git a/test/integration/targets/nxos_ospf/tests/cli/sanity.yaml b/test/integration/targets/nxos_ospf/tests/cli/sanity.yaml new file mode 100644 index 00000000000..f207b012588 --- /dev/null +++ b/test/integration/targets/nxos_ospf/tests/cli/sanity.yaml @@ -0,0 +1,4 @@ +--- +- set_fact: connection="{{ cli }}" + +- import_tasks: targets/nxos_ospf/tests/common/sanity.yaml diff --git a/test/integration/targets/nxos_ospf/tests/common/sanity.yaml b/test/integration/targets/nxos_ospf/tests/common/sanity.yaml new file mode 100644 index 00000000000..a07cf1abe16 --- /dev/null +++ b/test/integration/targets/nxos_ospf/tests/common/sanity.yaml @@ -0,0 +1,55 @@ +--- +- debug: msg="START TRANSPORT:{{ connection.transport }} nxos_ospf sanity test" + +- name: "Enable feature OSPF" + nxos_feature: + feature: ospf + state: enabled + provider: "{{ connection }}" + ignore_errors: yes + +- block: + - name: Configure ospf + nxos_ospf: &config + ospf: 1 + state: present + provider: "{{ connection }}" + register: result + + - assert: &true + that: + - "result.changed == true" + + - name: "Check Idempotence" + nxos_ospf: *config + register: result + + - assert: &false + that: + - "result.changed == false" + + rescue: + - name: "Disable feature OSPF" + nxos_feature: + feature: ospf + state: disabled + provider: "{{ connection }}" + ignore_errors: yes + + always: + - name: Unconfigure ospf + nxos_ospf: &unconfig + ospf: 1 + state: absent + provider: "{{ connection }}" + register: result + + - assert: *true + + - name: "Check Idempotence" + nxos_ospf: *unconfig + register: result + + - assert: *false + + - debug: msg="END TRANSPORT:{{ connection.transport }} nxos_ospf sanity test" diff --git a/test/integration/targets/nxos_ospf/tests/nxapi/sanity.yaml b/test/integration/targets/nxos_ospf/tests/nxapi/sanity.yaml new file mode 100644 index 00000000000..15af0691a9b --- /dev/null +++ b/test/integration/targets/nxos_ospf/tests/nxapi/sanity.yaml @@ -0,0 +1,4 @@ +--- +- set_fact: connection="{{ nxapi }}" + +- import_tasks: targets/nxos_ospf/tests/common/sanity.yaml