diff --git a/tests/integration/targets/vyos_vrf/defaults/main.yaml b/tests/integration/targets/vyos_vrf/defaults/main.yaml new file mode 100644 index 00000000..164afead --- /dev/null +++ b/tests/integration/targets/vyos_vrf/defaults/main.yaml @@ -0,0 +1,3 @@ +--- +testcase: "[^_].*" +test_items: [] diff --git a/tests/integration/targets/vyos_vrf/tasks/cli.yaml b/tests/integration/targets/vyos_vrf/tasks/cli.yaml new file mode 100644 index 00000000..daccf720 --- /dev/null +++ b/tests/integration/targets/vyos_vrf/tasks/cli.yaml @@ -0,0 +1,20 @@ +--- +- name: Collect all cli test cases + ansible.builtin.find: + paths: "{{ role_path }}/tests/cli" + patterns: "{{ testcase }}.yaml" + use_regex: true + register: test_cases + delegate_to: localhost + +- name: Set test_items + ansible.builtin.set_fact: + test_items: "{{ test_cases.files | map(attribute='path') | list }}" + +- name: Run test case (connection=ansible.netcommon.network_cli) + ansible.builtin.include_tasks: "{{ test_case_to_run }}" + vars: + ansible_connection: ansible.netcommon.network_cli + with_items: "{{ test_items }}" + loop_control: + loop_var: test_case_to_run diff --git a/tests/integration/targets/vyos_vrf/tasks/main.yaml b/tests/integration/targets/vyos_vrf/tasks/main.yaml new file mode 100644 index 00000000..e6378581 --- /dev/null +++ b/tests/integration/targets/vyos_vrf/tasks/main.yaml @@ -0,0 +1,5 @@ +--- +- name: Run CLI tests + ansible.builtin.include_tasks: cli.yaml + tags: + - network_cli diff --git a/tests/integration/targets/vyos_vrf/tests/cli/_add_rm.yaml b/tests/integration/targets/vyos_vrf/tests/cli/_add_rm.yaml new file mode 100644 index 00000000..ddbed78e --- /dev/null +++ b/tests/integration/targets/vyos_vrf/tests/cli/_add_rm.yaml @@ -0,0 +1,12 @@ +--- +- ansible.builtin.include_tasks: _remove_rm.yaml + +- name: Add Route Map + ansible.netcommon.cli_config: + config: |- + set policy route-map rm1 rule 10 action 'permit' + set policy route-map rm1 rule 10 match peer '192.0.2.32' + set policy route-map rm1 rule 10 set aggregator as '100' + set policy route-map rm1 rule 10 set as-path exclude '111' + set policy route-map rm1 rule 10 set large-community none + set policy route-map rm1 rule 10 set metric '5' diff --git a/tests/integration/targets/vyos_vrf/tests/cli/_parsed.cfg b/tests/integration/targets/vyos_vrf/tests/cli/_parsed.cfg new file mode 100644 index 00000000..b0eb373a --- /dev/null +++ b/tests/integration/targets/vyos_vrf/tests/cli/_parsed.cfg @@ -0,0 +1,14 @@ +set vrf bind-to-all +set vrf name vrf1 description 'Parser Test VRF 1' +set vrf name vrf1 disable +set vrf name vrf1 table 101 +set vrf name vrf1 vni 501 +set vrf name vrf2 description 'Parser Test VRF 2' +set vrf name vrf2 disable +set vrf name vrf2 table 102 +set vrf name vrf2 vni 102 +set vrf name vrf1 ip disable-forwarding +set vrf name vrf1 ip nht no-resolve-via-default +set vrf name vrf-red ip protocol kernel route-map 'rm1' +set vrf name vrf-red ip protocol ospf route-map 'rm1' +set vrf name vrf-red ipv6 nht no-resolve-via-default diff --git a/tests/integration/targets/vyos_vrf/tests/cli/_populate.yaml b/tests/integration/targets/vyos_vrf/tests/cli/_populate.yaml new file mode 100644 index 00000000..9e6253ee --- /dev/null +++ b/tests/integration/targets/vyos_vrf/tests/cli/_populate.yaml @@ -0,0 +1,10 @@ +--- +- ansible.builtin.include_tasks: _remove_config.yaml + +- ansible.builtin.include_tasks: _add_rm.yaml + +- name: Setup + vyos.vyos.vyos_config: + lines: "{{ populate_config }}" + vars: + ansible_connection: ansible.netcommon.network_cli diff --git a/tests/integration/targets/vyos_vrf/tests/cli/_remove_config.yaml b/tests/integration/targets/vyos_vrf/tests/cli/_remove_config.yaml new file mode 100644 index 00000000..d909adfd --- /dev/null +++ b/tests/integration/targets/vyos_vrf/tests/cli/_remove_config.yaml @@ -0,0 +1,9 @@ +--- +- name: Remove route-maps and VRF configuration + vyos.vyos.vyos_config: + lines: + - delete policy route-map rm1 + - delete vrf + ignore_errors: true + vars: + ansible_connection: ansible.netcommon.network_cli diff --git a/tests/integration/targets/vyos_vrf/tests/cli/_remove_rm.yaml b/tests/integration/targets/vyos_vrf/tests/cli/_remove_rm.yaml new file mode 100644 index 00000000..e69de29b diff --git a/tests/integration/targets/vyos_vrf/tests/cli/deleted.old b/tests/integration/targets/vyos_vrf/tests/cli/deleted.old new file mode 100644 index 00000000..09a81cc1 --- /dev/null +++ b/tests/integration/targets/vyos_vrf/tests/cli/deleted.old @@ -0,0 +1,35 @@ +--- +- debug: + msg: START vyos_route_maps deleted integration tests on connection={{ ansible_connection }} + +- include_tasks: _populate.yaml + +- block: + - name: Delete the provided configuration + register: result + vyos.vyos.vyos_route_maps: &id001 + config: + state: deleted + + - assert: + that: + - result.commands|length == 2 + - result.changed == true + - result.commands|symmetric_difference(deleted.commands) == [] + + - name: Assert that the after dicts were correctly generated + assert: + that: + - "{{ deleted['after'] | symmetric_difference(result['after']) |length == 0 }}" + + - name: Delete the existing configuration with the provided running configuration (IDEMPOTENT) + register: result + vyos.vyos.vyos_route_maps: *id001 + + - name: Assert that the previous task was idempotent + assert: + that: + - result['changed'] == false + + always: + - include_tasks: _remove_config.yaml diff --git a/tests/integration/targets/vyos_vrf/tests/cli/empty_config.old b/tests/integration/targets/vyos_vrf/tests/cli/empty_config.old new file mode 100644 index 00000000..13b45ac8 --- /dev/null +++ b/tests/integration/targets/vyos_vrf/tests/cli/empty_config.old @@ -0,0 +1,58 @@ +--- +- debug: + msg: START vyos_route_maps empty_config integration tests on connection={{ ansible_connection }} + +- name: Merged with empty config should give appropriate error message + register: result + ignore_errors: true + vyos.vyos.vyos_route_maps: + config: + state: merged + +- assert: + that: + - result.msg == 'value of config parameter must not be empty for state merged' + +- name: Replaced with empty config should give appropriate error message + register: result + ignore_errors: true + vyos.vyos.vyos_route_maps: + config: + state: replaced + +- assert: + that: + - result.msg == 'value of config parameter must not be empty for state replaced' + +- name: Overridden with empty config should give appropriate error message + register: result + ignore_errors: true + vyos.vyos.vyos_route_maps: + config: + state: overridden + +- assert: + that: + - result.msg == 'value of config parameter must not be empty for state overridden' + +- name: Parsed with empty running_config should give appropriate error message + register: result + ignore_errors: true + vyos.vyos.vyos_route_maps: + running_config: + state: parsed + +- assert: + that: + - result.msg == 'value of running_config parameter must not be empty for state parsed' + +- name: Rendered with empty config should give appropriate error message + register: result + ignore_errors: true + vyos.vyos.vyos_route_maps: + config: + state: rendered + +- assert: + that: + - result.msg == 'value of config parameter must not be empty for state rendered' diff --git a/tests/integration/targets/vyos_vrf/tests/cli/gathered.old b/tests/integration/targets/vyos_vrf/tests/cli/gathered.old new file mode 100644 index 00000000..b2a0fa5e --- /dev/null +++ b/tests/integration/targets/vyos_vrf/tests/cli/gathered.old @@ -0,0 +1,19 @@ +--- +- debug: + msg: START vyos_route_maps gathered integration tests on connection={{ ansible_connection }} + +- include_tasks: _populate.yaml + +- block: + - name: Gather config from the device in structured format. + register: result + vyos.vyos.vyos_route_maps: + state: gathered + + - vyos.vyos.vyos_facts: + gather_network_resources: route_maps + + - assert: + that: + - result.changed == false + - result.gathered|symmetric_difference(ansible_facts['network_resources']['route_maps']) == [] diff --git a/tests/integration/targets/vyos_vrf/tests/cli/merged.old b/tests/integration/targets/vyos_vrf/tests/cli/merged.old new file mode 100644 index 00000000..2dda66d4 --- /dev/null +++ b/tests/integration/targets/vyos_vrf/tests/cli/merged.old @@ -0,0 +1,60 @@ +--- +- debug: + msg: START vyos_vrf merged integration tests on connection={{ ansible_connection }} + +- include_tasks: _remove_config.yaml + +- block: + - name: Merge the provided configuration with the existing running configuration + register: result + vyos.vyos.vyos_vrf: &id001 + config: + - route_map: test1 + entries: + - sequence: 1 + description: test + action: permit + continue_sequence: 2 + - route_map: test3 + entries: + - sequence: 1 + action: permit + match: + metric: 1 + peer: 192.0.2.32 + set: + local_preference: 4 + metric: 5 + metric_type: type-1 + origin: egp + originator_id: 192.0.2.34 + tag: 5 + weight: 4 + state: merged + + - vyos.vyos.vyos_facts: + gather_network_resources: route_maps + + - assert: + that: + - result.commands|length == 13 + - result.changed == true + - result.commands|symmetric_difference(merged.commands) == [] + - result.after|symmetric_difference(ansible_facts['network_resources']['route_maps']) == [] + + - name: Assert that before dicts were correctly generated + assert: + that: + - "{{ merged['before'] | symmetric_difference(result['before']) |length == 0 }}" + + - name: Merge the provided configuration with the existing running configuration (IDEMPOTENT) + register: result + vyos.vyos.vyos_vrf: *id001 + + - name: Assert that the previous task was idempotent + assert: + that: + - result['changed'] == false + + always: + - include_tasks: _remove_config.yaml diff --git a/tests/integration/targets/vyos_vrf/tests/cli/overridden.old b/tests/integration/targets/vyos_vrf/tests/cli/overridden.old new file mode 100644 index 00000000..1d571736 --- /dev/null +++ b/tests/integration/targets/vyos_vrf/tests/cli/overridden.old @@ -0,0 +1,49 @@ +--- +- debug: + msg: START vyos_route_maps overridden integration tests on connection={{ ansible_connection }} + +- include_tasks: _populate.yaml + +- block: + - name: Override the existing configuration with the provided running configuration + register: result + vyos.vyos.vyos_route_maps: &id001 + config: + - route_map: test3 + entries: + - sequence: 1 + action: permit + match: + metric: 3 + peer: 192.0.2.35 + set: + local_preference: 6 + metric: 4 + metric_type: type-1 + origin: egp + originator_id: 192.0.2.34 + tag: 4 + weight: 4 + state: overridden + + - vyos.vyos.vyos_facts: + gather_network_resources: route_maps + + - assert: + that: + - result.commands|length == 8 + - result.changed == true + - result.commands|symmetric_difference(overridden.commands) == [] + - result.after|symmetric_difference(ansible_facts['network_resources']['route_maps']) == [] + + - name: Override the existing configuration with the provided running configuration (IDEMPOTENT) + register: result + vyos.vyos.vyos_route_maps: *id001 + + - name: Assert that the previous task was idempotent + assert: + that: + - result['changed'] == false + + always: + - include_tasks: _remove_config.yaml diff --git a/tests/integration/targets/vyos_vrf/tests/cli/parsed.old b/tests/integration/targets/vyos_vrf/tests/cli/parsed.old new file mode 100644 index 00000000..c41b5130 --- /dev/null +++ b/tests/integration/targets/vyos_vrf/tests/cli/parsed.old @@ -0,0 +1,14 @@ +--- +- debug: + msg: START vyos_route_maps parsed integration tests on connection={{ ansible_connection }} + +- name: Provide the running configuration for parsing (config to be parsed) + register: result + vyos.vyos.vyos_route_maps: + running_config: "{{ lookup('file', '_parsed.cfg') }}" + state: parsed + +- assert: + that: + - result.changed == false + - result.parsed|symmetric_difference(merged.after) == [] diff --git a/tests/integration/targets/vyos_vrf/tests/cli/rendered.old b/tests/integration/targets/vyos_vrf/tests/cli/rendered.old new file mode 100644 index 00000000..00a0199c --- /dev/null +++ b/tests/integration/targets/vyos_vrf/tests/cli/rendered.old @@ -0,0 +1,38 @@ +--- +- debug: + msg: START vyos_route_maps rendered integration tests on connection={{ ansible_connection }} + +- include_tasks: _remove_config.yaml + +- block: + - name: Structure provided configuration into device specific commands + register: result + vyos.vyos.vyos_route_maps: + config: + - route_map: test1 + entries: + - sequence: 1 + description: test + action: permit + continue_sequence: 2 + - route_map: test3 + entries: + - sequence: 1 + action: permit + match: + metric: 1 + peer: 192.0.2.32 + set: + local_preference: 4 + metric: 5 + metric_type: type-1 + origin: egp + originator_id: 192.0.2.34 + tag: 5 + weight: 4 + state: rendered + + - assert: + that: + - result.changed == false + - result.rendered|symmetric_difference(merged.commands) == [] diff --git a/tests/integration/targets/vyos_vrf/tests/cli/replaced.old b/tests/integration/targets/vyos_vrf/tests/cli/replaced.old new file mode 100644 index 00000000..dce0cba9 --- /dev/null +++ b/tests/integration/targets/vyos_vrf/tests/cli/replaced.old @@ -0,0 +1,48 @@ +--- +- debug: + msg: START vyos_route_maps replaced integration tests on connection={{ ansible_connection }} + +- include_tasks: _populate.yaml + +- block: + - name: Replace the provided configuration with the existing running configuration + register: result + vyos.vyos.vyos_route_maps: &id001 + config: + - route_map: test3 + entries: + - sequence: 1 + action: permit + match: + metric: 3 + peer: 192.0.2.35 + set: + local_preference: 6 + metric: 4 + metric_type: type-1 + origin: egp + originator_id: 192.0.2.34 + tag: 4 + weight: 4 + state: replaced + + - vyos.vyos.vyos_facts: + gather_network_resources: route_maps + + - assert: + that: + - result.changed == true + - result.commands|symmetric_difference(replaced.commands) == [] + - result.after|symmetric_difference(ansible_facts['network_resources']['route_maps']) == [] + + - name: Replace the provided configuration with the existing running configuration (IDEMPOTENT) + register: result + vyos.vyos.vyos_route_maps: *id001 + + - name: Assert that the previous task was idempotent + assert: + that: + - result['changed'] == false + + always: + - include_tasks: _remove_config.yaml diff --git a/tests/integration/targets/vyos_vrf/tests/cli/rtt.yaml b/tests/integration/targets/vyos_vrf/tests/cli/rtt.yaml new file mode 100644 index 00000000..d39f026b --- /dev/null +++ b/tests/integration/targets/vyos_vrf/tests/cli/rtt.yaml @@ -0,0 +1,60 @@ +--- +- debug: + msg: START vyos_vrf merged integration tests on connection={{ ansible_connection }} + +- include_tasks: _populate.yaml + +- block: + - name: Merge the provided configuration with the existing running configuration + register: baseconfig + vyos.vyos.vyos_vrf: + config: + instances: + - name: "vrf-green" + description: "green-vrf" + table_id: 110 + vni: 1010 + state: merged + + - vyos.vyos.vyos_facts: + gather_network_resources: vrf + + - assert: + that: + - baseconfig.commands|length == 4 + - baseconfig.changed == true + - baseconfig.commands|symmetric_difference(merged.commands) == [] + - baseconfig.after|symmetric_difference(ansible_facts['network_resources']['vrf']) == [] + + # - name: Merge the existing configuration with the provided running configuration + # register: result + # vyos.vyos.vyos_vrf: + # config: + # - route_map: test2 + # entries: + # - sequence: 1 + # action: permit + # match: + # metric: 3 + # peer: 192.0.2.35 + # set: + # local_preference: 6 + # metric: 4 + # metric_type: type-1 + # origin: egp + # originator_id: 192.0.2.34 + # tag: 4 + # weight: 4 + + # - name: Revert back to base config using facts round trip + # register: revert + # vyos.vyos.vyos_vrf: + # config: "{{ ansible_facts['network_resources']['route_maps'] }}" + # state: overridden + + # - name: Assert that config was reverted + # assert: + # that: baseconfig.after == revert.after + + always: + - include_tasks: _remove_config.yaml diff --git a/tests/integration/targets/vyos_vrf/vars/main.yaml b/tests/integration/targets/vyos_vrf/vars/main.yaml new file mode 100644 index 00000000..a08ece2d --- /dev/null +++ b/tests/integration/targets/vyos_vrf/vars/main.yaml @@ -0,0 +1,112 @@ +--- +merged: + before: [] + commands: + - delete vrf bind-to-all + - set vrf name vrf-green table 110 + - set vrf name vrf-green vni 1010 + - set vrf name vrf-green description green-vrf + after: + - route_map: test3 + entries: + - sequence: 1 + action: permit + match: + metric: 1 + peer: 192.0.2.32 + set: + local_preference: "4" + metric: "5" + metric_type: type-1 + origin: egp + originator_id: 192.0.2.34 + tag: "5" + weight: "4" + - route_map: test1 + entries: + - sequence: 1 + description: test + action: permit + continue_sequence: 2 + +replaced: + commands: + - delete policy route-map test3 rule 1 set ip-next-hop 192.0.2.33 + - set policy route-map test3 rule 1 set local-preference 6 + - set policy route-map test3 rule 1 set metric 4 + - set policy route-map test3 rule 1 set tag 4 + - delete policy route-map test3 rule 1 set community none + - set policy route-map test3 rule 1 match metric 3 + - set policy route-map test3 rule 1 match peer 192.0.2.35 + after: + - route_map: test2 + entries: + - sequence: 1 + description: test + action: permit + - sequence: 1 + action: permit + on_match: + goto: 4 + - route_map: test3 + entries: + - sequence: 1 + action: permit + match: + metric: 3 + peer: 192.0.2.35 + set: + local_preference: 6 + metric: 4 + metric_type: type-1 + origin: egp + originator_id: 192.0.2.34 + tag: 4 + weight: 4 + +overridden: + commands: + - delete policy route-map test2 + - delete policy route-map test3 rule 1 set ip-next-hop 192.0.2.33 + - set policy route-map test3 rule 1 set local-preference 6 + - set policy route-map test3 rule 1 set metric 4 + - set policy route-map test3 rule 1 set tag 4 + - delete policy route-map test3 rule 1 set community none + - set policy route-map test3 rule 1 match metric 3 + - set policy route-map test3 rule 1 match peer 192.0.2.35 + after: + - route_map: test3 + entries: + - sequence: 1 + action: permit + match: + metric: 3 + peer: 192.0.2.35 + set: + local_preference: 6 + metric: 4 + metric_type: type-1 + origin: egp + originator_id: 192.0.2.34 + tag: 4 + weight: 4 + +deleted: + commands: + - delete policy route-map test2 + - delete policy route-map test3 + after: [] + +populate_config: + - set vrf bind-to-all + - set vrf name vrf-blue description 'blue-vrf' + - set vrf name vrf-blue table '100' + - set vrf name vrf-blue vni '1000' + - set vrf name vrf-red description 'red-vrf' + - set vrf name vrf-red disable + - set vrf name vrf-red ip disable-forwarding + - set vrf name vrf-red ip protocol kernel route-map 'rm1' + - set vrf name vrf-red ip protocol rip route-map 'rm1' + - set vrf name vrf-red ipv6 nht no-resolve-via-default + - set vrf name vrf-red table '101' + - set vrf name vrf-red vni '1001'