summaryrefslogtreecommitdiff
path: root/tests/integration
diff options
context:
space:
mode:
authoromnom62 <75066712+omnom62@users.noreply.github.com>2026-03-04 19:51:16 +1000
committerGitHub <noreply@github.com>2026-03-04 09:51:16 +0000
commita8e5dac21090e9b0ddf876214a9a1522079ecde1 (patch)
tree9865a8b7ad796f8b201b8fea9e93f3c395a5e71f /tests/integration
parente539028c2f9d062e7684abda5dd32affd92e9f08 (diff)
downloadvyos.vyos-a8e5dac21090e9b0ddf876214a9a1522079ecde1.tar.gz
vyos.vyos-a8e5dac21090e9b0ddf876214a9a1522079ecde1.zip
T6836 VRF module (#408)
* t6836 vfr module init * argspec facts module for VRF * T6834 static_route module to support interface_route (#398) * t6834 init * facts fixes, WIP * T6834 - facts updates * static_routes 1.3- config, facts, args and sanit and unit tests * changelog * changelog updates * static_routes 1.4+ * static_routes v1.4 unit tests * comment removed * T6829 (area interfaces in OSPFv3 1.3-1.5) re-init (#399) * T6829 re-init * re-init T6829 ospfv3 area interface for 1.3- * changelog * changelog fix * Doc is updated * adding 1.4+ support * ospfv3 area interfaces for 1.4+ * fixed ospfv3 facts and added area interface unit test for 1.4 * ospfv3 clean-up * doc updates * Resolve merge conflicts * vrf parsers set_table * more vrf paresers added * vrf facts main code * vrf data structures * simple vrf config push * simple vrf config push * some work on vrf * basic facts done * vrf instance parsers wif * ongoing parser testing * vrf dev work * testing with paresers * all basic settings * merged for vrf * more states for VRF * vrf deleted, overriden * overriden * sanity * rst for vrf * changelog * fix changelog * doc fix * vrf delete idempotent * deleted and overridden for VFR * overriden * overriden vrf idempotency * asdvanced vrf settings * afi for VRF facts * VRF AFI config * VRF AFI tests * vrf dev work * afi dev work * afi and deep_merge fixes for VRF * afi basic provisioning * changelog * vrf sanity fixes * VRF AFI protocols and route-maps * vrf parsed, gathered, rendered fixes * docstrings VRF * docstrings VRF * docstring VRF * module doc update * vrf module examples * VRF doc examples * linter * VRF unit tests init * VRF unit tests init * VRF unit tests updates * fixed VRF overridden and deleted unit test cases * VRF integration tests init * VRF int tests rtt, merged, replaced * VRF int testt gathered, rendered * VRF int tests deleted, rendered, overridden and empty_config * linter * VRF int test misc fixes * VRF global idepmotency * fixing py3.13 runner deps * fixing lint * fixing sanity * reverting previous fixes * VRF protocols load_module and provisioning flow * fixes to bgp VRF protocol methods * VRF protocol facts init * VRF protocol load_module works * reworked VRF load_module routine * vrf protocl static fixed * Fixed static and ospf VRF protocol provisioning * Fixed static and ospf VRF protocol provisioning * VRF doc update * VRF docs update * VRF doc updates * unit tests for VRF protocols * VRF BGP protcol sanity check * VRF protocol fixed sanity checks (DOCUMENTATION) * sanity and doc for VRF fixed * VRF unit tests mock * VRF protocol integration parsed, rtt and merged init * VRF protocols - rendered, overridden * VRF protocols replaced * fix accidental changes to test_vyos_config.py * PR description * fix image * README fix * Fixing linter * Mid-result UAT overriden VRF * Mid-result for VRF UAT * VRF uat * VRF obsolete features removed
Diffstat (limited to 'tests/integration')
-rw-r--r--tests/integration/targets/vyos_vrf/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_vrf/tasks/cli.yaml20
-rw-r--r--tests/integration/targets/vyos_vrf/tasks/main.yaml5
-rw-r--r--tests/integration/targets/vyos_vrf/tests/cli/_add_rm.yaml12
-rw-r--r--tests/integration/targets/vyos_vrf/tests/cli/_parsed.cfg34
-rw-r--r--tests/integration/targets/vyos_vrf/tests/cli/_populate.yaml10
-rw-r--r--tests/integration/targets/vyos_vrf/tests/cli/_remove_config.yaml9
-rw-r--r--tests/integration/targets/vyos_vrf/tests/cli/_remove_rm.yaml0
-rw-r--r--tests/integration/targets/vyos_vrf/tests/cli/deleted.yaml34
-rw-r--r--tests/integration/targets/vyos_vrf/tests/cli/empty_config.yaml60
-rw-r--r--tests/integration/targets/vyos_vrf/tests/cli/gathered.yaml22
-rw-r--r--tests/integration/targets/vyos_vrf/tests/cli/merged.yaml54
-rw-r--r--tests/integration/targets/vyos_vrf/tests/cli/overridden.yaml49
-rw-r--r--tests/integration/targets/vyos_vrf/tests/cli/parsed.yaml16
-rw-r--r--tests/integration/targets/vyos_vrf/tests/cli/rendered.yaml133
-rw-r--r--tests/integration/targets/vyos_vrf/tests/cli/replaced.yaml56
-rw-r--r--tests/integration/targets/vyos_vrf/tests/cli/rtt.yaml69
-rw-r--r--tests/integration/targets/vyos_vrf/vars/main.yaml278
18 files changed, 864 insertions, 0 deletions
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..5fb7c6da
--- /dev/null
+++ b/tests/integration/targets/vyos_vrf/tests/cli/_parsed.cfg
@@ -0,0 +1,34 @@
+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
+set vrf name vrf-green protocols ospf area '4'
+set vrf name vrf-green protocols ospf area 4 area-type stub default-cost 20
+set vrf name vrf-green protocols ospf area 4 network 192.0.2.0/24
+set vrf name vrf-green protocols ospf area 4 range 192.0.3.0/24
+set vrf name vrf-green protocols ospf area 4 range 192.0.3.0/24 cost 10
+set vrf name vrf-green protocols ospf area 4 range 192.0.4.0/24
+set vrf name vrf-green protocols ospf area 4 range 192.0.4.0/24 cost 12
+set vrf name vrf-green protocols ospfv3 area '2'
+set vrf name vrf-green protocols ospfv3 area 2 export-list export1
+set vrf name vrf-green protocols ospfv3 area 2 import-list import1
+set vrf name vrf-green protocols ospfv3 area 2 range 2001:db10::/32
+set vrf name vrf-green protocols ospfv3 area 2 range 2001:db20::/32
+set vrf name vrf-green protocols ospfv3 area 2 range 2001:db30::/32
+set vrf name vrf-green protocols static route 192.0.2.0/24
+set vrf name vrf-green protocols static route 192.0.2.0/24 blackhole distance '10'
+set vrf name vrf-green protocols static route 192.0.2.0/24 next-hop '203.0.113.1'
+set vrf name vrf-green protocols static route 192.0.2.0/24 next-hop '203.0.113.2'
+set vrf name vrf-green protocols static route6 2001:db8::/32
+set vrf name vrf-green protocols static route6 2001:db8::/32 blackhole distance '20'
+set vrf name vrf-green protocols static route6 2001:db8::/32 next-hop '2001:db8::1'"
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
--- /dev/null
+++ b/tests/integration/targets/vyos_vrf/tests/cli/_remove_rm.yaml
diff --git a/tests/integration/targets/vyos_vrf/tests/cli/deleted.yaml b/tests/integration/targets/vyos_vrf/tests/cli/deleted.yaml
new file mode 100644
index 00000000..b6a28d0a
--- /dev/null
+++ b/tests/integration/targets/vyos_vrf/tests/cli/deleted.yaml
@@ -0,0 +1,34 @@
+---
+- debug:
+ msg: START vyos_vrf deleted integration tests on connection={{ ansible_connection }}
+
+- include_tasks: _populate.yaml
+
+- block:
+ - name: Delete the provided configuration
+ register: result
+ vyos.vyos.vyos_vrf: &id001
+ config:
+ state: deleted
+
+ - assert:
+ that:
+ - result.changed == true
+ - result.commands|symmetric_difference(deleted.commands) == []
+
+ - name: Assert that the after dicts were correctly generated
+ assert:
+ that:
+ - result.after|symmetric_difference(deleted.after) == []
+
+ - name: Delete the existing configuration with the provided 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/empty_config.yaml b/tests/integration/targets/vyos_vrf/tests/cli/empty_config.yaml
new file mode 100644
index 00000000..ba1dab0d
--- /dev/null
+++ b/tests/integration/targets/vyos_vrf/tests/cli/empty_config.yaml
@@ -0,0 +1,60 @@
+---
+- debug:
+ msg: START vyos_vrf 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_vrf:
+ 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_vrf:
+ 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_vrf:
+ 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_vrf:
+ 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_vrf:
+ config:
+ state: rendered
+
+- assert:
+ that:
+ - result.msg == 'value of config parameter must not be empty for state rendered'
+
+- include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_vrf/tests/cli/gathered.yaml b/tests/integration/targets/vyos_vrf/tests/cli/gathered.yaml
new file mode 100644
index 00000000..7ea7b286
--- /dev/null
+++ b/tests/integration/targets/vyos_vrf/tests/cli/gathered.yaml
@@ -0,0 +1,22 @@
+---
+- debug:
+ msg: START vyos_vrf 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_vrf:
+ state: gathered
+
+ - vyos.vyos.vyos_facts:
+ gather_network_resources: vrf
+
+ - assert:
+ that:
+ - result.changed == false
+ - result.gathered|symmetric_difference(ansible_facts['network_resources']['vrf']) == []
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_vrf/tests/cli/merged.yaml b/tests/integration/targets/vyos_vrf/tests/cli/merged.yaml
new file mode 100644
index 00000000..0a93ae02
--- /dev/null
+++ b/tests/integration/targets/vyos_vrf/tests/cli/merged.yaml
@@ -0,0 +1,54 @@
+---
+- 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: result
+ vyos.vyos.vyos_vrf: &id001
+ config:
+ bind_to_all: true
+ instances:
+ - name: "vrf-green"
+ description: "green-vrf"
+ table_id: 110
+ vni: 1010
+ - name: "vrf-pink"
+ description: "pink-vrf"
+ table_id: 111
+ vni: 1111
+ protocols:
+ bgp:
+ as_number: 65005
+ neighbor:
+ - address: 192.0.5.1
+ remote_as: 65012
+ state: merged
+
+ - vyos.vyos.vyos_facts:
+ gather_network_resources: vrf
+
+ - assert:
+ that:
+ - result.changed == true
+ - result.commands|symmetric_difference(merged.commands) == []
+ - result.after|symmetric_difference(ansible_facts['network_resources']['vrf']) == []
+
+ - 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.yaml b/tests/integration/targets/vyos_vrf/tests/cli/overridden.yaml
new file mode 100644
index 00000000..e21ae185
--- /dev/null
+++ b/tests/integration/targets/vyos_vrf/tests/cli/overridden.yaml
@@ -0,0 +1,49 @@
+---
+- debug:
+ msg: START vyos_vrf 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_vrf: &id001
+ config:
+ instances:
+ - name: "vrf-blue"
+ description: "blue-vrf"
+ disable: true
+ table_id: 103
+ vni: 1002
+ - name: "vrf-pink"
+ description: "pink-vrf"
+ table_id: 111
+ vni: 1111
+ protocols:
+ bgp:
+ as_number: 65005
+ neighbor:
+ - address: 192.0.2.1
+ remote_as: 65002
+ state: overridden
+
+ - vyos.vyos.vyos_facts:
+ gather_network_resources: vrf
+
+ - assert:
+ that:
+ - result.changed == true
+ - result.commands|symmetric_difference(overridden.commands) == []
+ - result.after|symmetric_difference(ansible_facts['network_resources']['vrf']) == []
+
+ - name: Override the existing configuration with the provided 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/parsed.yaml b/tests/integration/targets/vyos_vrf/tests/cli/parsed.yaml
new file mode 100644
index 00000000..7f6a4b3d
--- /dev/null
+++ b/tests/integration/targets/vyos_vrf/tests/cli/parsed.yaml
@@ -0,0 +1,16 @@
+---
+- debug:
+ msg: START vyos_vrf parsed integration tests on connection={{ ansible_connection }}
+
+- name: Provide the running configuration for parsing (config to be parsed)
+ register: result
+ vyos.vyos.vyos_vrf:
+ running_config: "{{ lookup('file', '_parsed.cfg') }}"
+ state: parsed
+
+- assert:
+ that:
+ - result.changed == false
+ - result.parsed|symmetric_difference(merged.before) == []
+
+- include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_vrf/tests/cli/rendered.yaml b/tests/integration/targets/vyos_vrf/tests/cli/rendered.yaml
new file mode 100644
index 00000000..b8b26d12
--- /dev/null
+++ b/tests/integration/targets/vyos_vrf/tests/cli/rendered.yaml
@@ -0,0 +1,133 @@
+---
+- 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_vrf:
+ config:
+ bind_to_all: true
+ instances:
+ - name: vrf-green
+ description: green-vrf
+ disabled: true
+ table_id: 105
+ vni: 1000
+ protocols:
+ bgp:
+ as_number: 65000
+ neighbor:
+ - address: 192.0.2.1
+ remote_as: 65002
+ - address: "1.1.1.3"
+ passive: true
+ remote_as: 400
+ ospf:
+ log_adjacency_changes: detail
+ max_metric:
+ router_lsa:
+ administrative: true
+ on_shutdown: 10
+ on_startup: 10
+ default_information:
+ originate:
+ always: true
+ metric: 10
+ metric_type: 2
+ mpls_te:
+ router_address: 192.0.11.12
+ auto_cost:
+ reference_bandwidth: 2
+ neighbor:
+ - neighbor_id: 192.0.11.12
+ poll_interval: 10
+ priority: 2
+ redistribute:
+ - route_type: bgp
+ metric: 10
+ metric_type: 2
+ parameters:
+ router_id: 192.0.1.1
+ rfc1583_compatibility: true
+ abr_type: cisco
+ areas:
+ - area_id: "2"
+ area_type:
+ normal: true
+ authentication: plaintext-password
+ shortcut: enable
+ - area_id: "3"
+ area_type:
+ nssa:
+ set: true
+ - area_id: "4"
+ area_type:
+ stub:
+ default_cost: 20
+ network:
+ - address: 192.0.2.0/24
+ range:
+ - address: 192.0.3.0/24
+ cost: 10
+ - address: 192.0.4.0/24
+ cost: 12
+ ospfv3:
+ areas:
+ - area_id: "2"
+ export_list: export1
+ import_list: import1
+ range:
+ - address: 2001:db10::/32
+ - address: 2001:db20::/32
+ - address: 2001:db30::/32
+ - area_id: "3"
+ range:
+ - address: 2001:db40::/32
+ parameters:
+ router_id: 192.0.2.10
+ redistribute:
+ - route_type: bgp
+ static:
+ - address_families:
+ - afi: ipv4
+ routes:
+ - dest: "192.0.2.0/24"
+ blackhole_config:
+ distance: 10
+ next_hops:
+ - forward_router_address: "203.0.113.1"
+ - forward_router_address: "203.0.113.2"
+ - afi: ipv6
+ routes:
+ - dest: "2001:db8::/32"
+ blackhole_config:
+ distance: 20
+ next_hops:
+ - forward_router_address: "2001:db8::1"
+ - name: vrf-amber
+ description: amber-vrf
+ disable: false
+ table_id: 111
+ vni: 1001
+ address_family:
+ - afi: ipv4
+ disable_forwarding: true
+ route_maps:
+ # - rm_name: rm1
+ # protocol: kernel
+ - rm_name: rm1
+ protocol: ospf
+ - afi: ipv6
+ nht_no_resolve_via_default: false
+ state: rendered
+
+ - assert:
+ that:
+ - result.changed == false
+ - result.rendered|symmetric_difference(rendered.commands) == []
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_vrf/tests/cli/replaced.yaml b/tests/integration/targets/vyos_vrf/tests/cli/replaced.yaml
new file mode 100644
index 00000000..68d3e450
--- /dev/null
+++ b/tests/integration/targets/vyos_vrf/tests/cli/replaced.yaml
@@ -0,0 +1,56 @@
+---
+- debug:
+ msg: START vyos_vrf 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_vrf: &id001
+ config:
+ instances:
+ - name: "vrf-blue"
+ description: "blue-vrf"
+ disable: true
+ table_id: 100
+ vni: 1000
+ - name: "vrf-red"
+ description: "Vermillion_VRF"
+ disable: false
+ table_id: 101
+ vni: 1011
+ address_family:
+ - afi: "ipv6"
+ nht_no_resolve_via_default: false
+ - name: "vrf-pink"
+ table_id: 111
+ protocols:
+ ospf:
+ default_information:
+ originate:
+ always: true
+ metric: 20
+ metric_type: 1
+ state: replaced
+
+ - vyos.vyos.vyos_facts:
+ gather_network_resources: vrf
+
+ - assert:
+ that:
+ - result.changed == true
+ - result.commands|symmetric_difference(replaced.commands) == []
+ - result.after|symmetric_difference(ansible_facts['network_resources']['vrf']) == []
+
+ - name: Replace 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/rtt.yaml b/tests/integration/targets/vyos_vrf/tests/cli/rtt.yaml
new file mode 100644
index 00000000..e8e9ea2c
--- /dev/null
+++ b/tests/integration/targets/vyos_vrf/tests/cli/rtt.yaml
@@ -0,0 +1,69 @@
+---
+- 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:
+ bind_to_all: true
+ instances:
+ - name: "vrf-green"
+ description: "green-vrf"
+ table_id: 110
+ vni: 1010
+ - name: "vrf-pink"
+ description: "pink-vrf"
+ table_id: 111
+ vni: 1111
+ protocols:
+ bgp:
+ as_number: 65005
+ neighbor:
+ - address: 192.0.5.1
+ remote_as: 65012
+ state: merged
+
+ - vyos.vyos.vyos_facts:
+ gather_network_resources: vrf
+
+ - assert:
+ that:
+ - 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:
+ instances:
+ - name: "vrf-blue"
+ description: "blue-vrf"
+ disable: true
+ table_id: 100
+ vni: 1000
+ - name: "vrf-green"
+ description: "green-vrf"
+ table_id: 110
+ vni: 1010
+ address_family:
+ - afi: "ipv4"
+ disable_forwarding: true
+ state: merged
+
+ - name: Revert back to base config using facts round trip
+ register: revert
+ vyos.vyos.vyos_vrf:
+ config: "{{ ansible_facts['network_resources']['vrf'] }}"
+ 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..9620cf32
--- /dev/null
+++ b/tests/integration/targets/vyos_vrf/vars/main.yaml
@@ -0,0 +1,278 @@
+---
+merged:
+ before:
+ bind_to_all: true
+ instances:
+ - name: "vrf-blue"
+ description: "blue-vrf"
+ disable: false
+ table_id: 100
+ vni: 1000
+ - name: "vrf-red"
+ description: "red-vrf"
+ disable: true
+ table_id: 101
+ vni: 1001
+ address_family:
+ - afi: "ipv4"
+ disable_forwarding: true
+ route_maps:
+ - rm_name: "rm1"
+ protocol: "rip"
+ - afi: "ipv6"
+ nht_no_resolve_via_default: true
+ - name: "vrf-green"
+ description: "green-vrf"
+ table_id: 110
+ vni: 1010
+ protocols:
+ ospf:
+ areas:
+ - area_id: "4"
+ area_type:
+ stub:
+ default_cost: 20
+ network:
+ - address: 192.0.2.0/24
+ range:
+ - address: 192.0.3.0/24
+ cost: 10
+ - address: 192.0.4.0/24
+ cost: 12
+ ospfv3:
+ areas:
+ - area_id: "2"
+ export_list: export1
+ import_list: import1
+ range:
+ - address: 2001:db10::/32
+ - address: 2001:db20::/32
+ - address: 2001:db30::/32
+ static:
+ - address_families:
+ - afi: ipv4
+ routes:
+ - dest: "192.0.2.0/24"
+ blackhole_config:
+ distance: 10
+ next_hops:
+ - forward_router_address: "203.0.113.1"
+ - forward_router_address: "203.0.113.2"
+ - afi: ipv6
+ routes:
+ - dest: "2001:db8::/32"
+ blackhole_config:
+ distance: 20
+ next_hops:
+ - forward_router_address: "2001:db8::1"
+ commands:
+ - set vrf name vrf-green table 110
+ - set vrf name vrf-green vni 1010
+ - set vrf name vrf-green description green-vrf
+ - set vrf name vrf-pink protocols bgp system-as 65005
+ - set vrf name vrf-pink protocols bgp neighbor 192.0.5.1 remote-as 65012
+ after:
+ bind_to_all: true
+ instances:
+ - name: "vrf-blue"
+ description: "blue-vrf"
+ disable: false
+ table_id: 100
+ vni: 1000
+ - name: "vrf-red"
+ description: "red-vrf"
+ disable: true
+ table_id: 101
+ vni: 1001
+ address_family:
+ - afi: "ipv4"
+ disable_forwarding: true
+ route_maps:
+ - rm_name: "rm1"
+ protocol: "rip"
+ - afi: "ipv6"
+ nht_no_resolve_via_default: true
+ - name: "vrf-green"
+ description: "green-vrf"
+ table_id: 110
+ vni: 1010
+
+replaced:
+ commands:
+ - delete vrf bind-to-all
+ - set vrf name vrf-blue disable
+ - set vrf name vrf-red vni 1011
+ - set vrf name vrf-red description Vermillion_VRF
+ - delete vrf name vrf-red disable
+ - delete vrf name vrf-red ipv6 nht no-resolve-via-default
+ - delete vrf name vrf-pink vni 1111
+ - delete vrf name vrf-pink description pink-vrf
+ - delete vrf name vrf-pink protocols ospf log-adjacency-changes 'detail'
+ - delete vrf name vrf-pink protocols ospf auto-cost
+ - delete vrf name vrf-pink protocols ospf max-metric
+ - delete vrf name vrf-pink protocols ospf mpls-te
+ - delete vrf name vrf-pink protocols ospf area
+ - delete vrf name vrf-pink protocols ospf parameters
+ - delete vrf name vrf-pink protocols ospf neighbor
+ - delete vrf name vrf-pink protocols ospf redistribute
+ - set vrf name vrf-pink protocols ospf default-information originate metric 20
+ - set vrf name vrf-pink protocols ospf default-information originate metric-type 1
+ after: []
+
+overridden:
+ commands:
+ - delete vrf name vrf-blue
+ - commit
+ - delete vrf name vrf-pink
+ - commit
+ - set vrf name vrf-blue table 103
+ - set vrf name vrf-blue vni 1002
+ - set vrf name vrf-blue description blue-vrf
+ - set vrf name vrf-blue disable
+ - set vrf name vrf-pink table 111
+ - set vrf name vrf-pink vni 1111
+ - set vrf name vrf-pink description pink-vrf
+ - set vrf name vrf-pink protocols bgp system-as 65005
+ - set vrf name vrf-pink protocols bgp neighbor 192.0.2.1 remote-as 65002
+ - delete vrf bind-to-all
+ after: []
+
+deleted:
+ commands:
+ - delete vrf
+ after: []
+
+rendered:
+ commands:
+ - set vrf bind-to-all
+ - set vrf name vrf-green table 105
+ - set vrf name vrf-green vni 1000
+ - set vrf name vrf-green description green-vrf
+ - set vrf name vrf-green disable
+ - set vrf name vrf-green protocols bgp system-as 65000
+ - set vrf name vrf-green protocols bgp neighbor 192.0.2.1 remote-as 65002
+ - set vrf name vrf-green protocols bgp neighbor 1.1.1.3 passive
+ - set vrf name vrf-green protocols bgp neighbor 1.1.1.3 remote-as 400
+ - set vrf name vrf-green protocols ospf log-adjacency-changes 'detail'
+ - set vrf name vrf-green protocols ospf max-metric router-lsa administrative
+ - set vrf name vrf-green protocols ospf max-metric router-lsa on-shutdown 10
+ - set vrf name vrf-green protocols ospf max-metric router-lsa on-startup 10
+ - set vrf name vrf-green protocols ospf default-information originate always
+ - set vrf name vrf-green protocols ospf default-information originate metric 10
+ - set vrf name vrf-green protocols ospf default-information originate metric-type 2
+ - set vrf name vrf-green protocols ospf mpls-te router-address '192.0.11.12'
+ - set vrf name vrf-green protocols ospf auto-cost reference-bandwidth '2'
+ - set vrf name vrf-green protocols ospf neighbor 192.0.11.12
+ - set vrf name vrf-green protocols ospf neighbor 192.0.11.12 poll-interval 10
+ - set vrf name vrf-green protocols ospf neighbor 192.0.11.12 priority 2
+ - set vrf name vrf-green protocols ospf redistribute bgp
+ - set vrf name vrf-green protocols ospf redistribute bgp metric 10
+ - set vrf name vrf-green protocols ospf redistribute bgp metric-type 2
+ - set vrf name vrf-green protocols ospf parameters router-id '192.0.1.1'
+ - set vrf name vrf-green protocols ospf parameters rfc1583-compatibility
+ - set vrf name vrf-green protocols ospf parameters abr-type 'cisco'
+ - set vrf name vrf-green protocols ospf area '2'
+ - set vrf name vrf-green protocols ospf area 2 area-type normal
+ - set vrf name vrf-green protocols ospf area 2 authentication plaintext-password
+ - set vrf name vrf-green protocols ospf area 2 shortcut enable
+ - set vrf name vrf-green protocols ospf area '3'
+ - set vrf name vrf-green protocols ospf area 3 area-type nssa
+ - set vrf name vrf-green protocols ospf area '4'
+ - set vrf name vrf-green protocols ospf area 4 area-type stub default-cost 20
+ - set vrf name vrf-green protocols ospf area 4 network 192.0.2.0/24
+ - set vrf name vrf-green protocols ospf area 4 range 192.0.3.0/24
+ - set vrf name vrf-green protocols ospf area 4 range 192.0.3.0/24 cost 10
+ - set vrf name vrf-green protocols ospf area 4 range 192.0.4.0/24
+ - set vrf name vrf-green protocols ospf area 4 range 192.0.4.0/24 cost 12
+ - set vrf name vrf-green protocols ospfv3 area '2'
+ - set vrf name vrf-green protocols ospfv3 area 2 export-list export1
+ - set vrf name vrf-green protocols ospfv3 area 2 import-list import1
+ - set vrf name vrf-green protocols ospfv3 area 2 range 2001:db10::/32
+ - set vrf name vrf-green protocols ospfv3 area 2 range 2001:db20::/32
+ - set vrf name vrf-green protocols ospfv3 area 2 range 2001:db30::/32
+ - set vrf name vrf-green protocols ospfv3 area '3'
+ - set vrf name vrf-green protocols ospfv3 area 3 range 2001:db40::/32
+ - set vrf name vrf-green protocols ospfv3 parameters router-id '192.0.2.10'
+ - set vrf name vrf-green protocols ospfv3 redistribute bgp
+ - set vrf name vrf-green protocols static route 192.0.2.0/24
+ - set vrf name vrf-green protocols static route 192.0.2.0/24 blackhole distance '10'
+ - set vrf name vrf-green protocols static route 192.0.2.0/24 next-hop '203.0.113.1'
+ - set vrf name vrf-green protocols static route 192.0.2.0/24 next-hop '203.0.113.2'
+ - set vrf name vrf-green protocols static route6 2001:db8::/32
+ - set vrf name vrf-green protocols static route6 2001:db8::/32 blackhole distance '20'
+ - set vrf name vrf-green protocols static route6 2001:db8::/32 next-hop '2001:db8::1'
+ - set vrf name vrf-amber table 111
+ - set vrf name vrf-amber vni 1001
+ - set vrf name vrf-amber description amber-vrf
+ # - set vrf name vrf-amber ip protocol kernel route-map rm1
+ - set vrf name vrf-amber ip protocol ospf route-map rm1
+ - set vrf name vrf-amber ip disable-forwarding
+
+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'
+ - set vrf name vrf-pink table 111
+ - set vrf name vrf-pink vni 1111
+ - set vrf name vrf-pink description pink-vrf
+ - set vrf name vrf-pink protocols bgp system-as 65000
+ - set vrf name vrf-pink protocols bgp neighbor 192.0.2.1 remote-as 65002
+ - set vrf name vrf-pink protocols bgp neighbor 1.1.1.3 passive
+ - set vrf name vrf-pink protocols bgp neighbor 1.1.1.3 remote-as 400
+ - set vrf name vrf-pink protocols ospf log-adjacency-changes 'detail'
+ - set vrf name vrf-pink protocols ospf max-metric router-lsa administrative
+ - set vrf name vrf-pink protocols ospf max-metric router-lsa on-shutdown 10
+ - set vrf name vrf-pink protocols ospf max-metric router-lsa on-startup 10
+ - set vrf name vrf-pink protocols ospf default-information originate always
+ - set vrf name vrf-pink protocols ospf default-information originate metric 10
+ - set vrf name vrf-pink protocols ospf default-information originate metric-type 2
+ - set vrf name vrf-pink protocols ospf mpls-te router-address '192.0.11.12'
+ - set vrf name vrf-pink protocols ospf auto-cost reference-bandwidth '2'
+ - set vrf name vrf-pink protocols ospf neighbor 192.0.11.12
+ - set vrf name vrf-pink protocols ospf neighbor 192.0.11.12 poll-interval 10
+ - set vrf name vrf-pink protocols ospf neighbor 192.0.11.12 priority 2
+ - set vrf name vrf-pink protocols ospf redistribute bgp
+ - set vrf name vrf-pink protocols ospf redistribute bgp metric 10
+ - set vrf name vrf-pink protocols ospf redistribute bgp metric-type 2
+ - set vrf name vrf-pink protocols ospf parameters router-id '192.0.1.1'
+ - set vrf name vrf-pink protocols ospf parameters rfc1583-compatibility
+ - set vrf name vrf-pink protocols ospf parameters abr-type 'cisco'
+ - set vrf name vrf-pink protocols ospf area '2'
+ - set vrf name vrf-pink protocols ospf area 2 area-type normal
+ - set vrf name vrf-pink protocols ospf area 2 authentication plaintext-password
+ - set vrf name vrf-pink protocols ospf area 2 shortcut enable
+ - set vrf name vrf-pink protocols ospf area '3'
+ - set vrf name vrf-pink protocols ospf area 3 area-type nssa
+ - set vrf name vrf-pink protocols ospf area '4'
+ - set vrf name vrf-pink protocols ospf area 4 area-type stub default-cost 20
+ - set vrf name vrf-pink protocols ospf area 4 network 192.0.2.0/24
+ - set vrf name vrf-pink protocols ospf area 4 range 192.0.3.0/24
+ - set vrf name vrf-pink protocols ospf area 4 range 192.0.3.0/24 cost 10
+ - set vrf name vrf-pink protocols ospf area 4 range 192.0.4.0/24
+ - set vrf name vrf-pink protocols ospf area 4 range 192.0.4.0/24 cost 12
+ - set vrf name vrf-pink protocols ospfv3 area '2'
+ - set vrf name vrf-pink protocols ospfv3 area 2 export-list export1
+ - set vrf name vrf-pink protocols ospfv3 area 2 import-list import1
+ - set vrf name vrf-pink protocols ospfv3 area 2 range 2001:db10::/32
+ - set vrf name vrf-pink protocols ospfv3 area 2 range 2001:db20::/32
+ - set vrf name vrf-pink protocols ospfv3 area 2 range 2001:db30::/32
+ - set vrf name vrf-pink protocols ospfv3 area '3'
+ - set vrf name vrf-pink protocols ospfv3 area 3 range 2001:db40::/32
+ - set vrf name vrf-pink protocols ospfv3 parameters router-id '192.0.2.10'
+ - set vrf name vrf-pink protocols ospfv3 redistribute bgp
+ - set vrf name vrf-pink protocols static route 192.0.2.0/24
+ - set vrf name vrf-pink protocols static route 192.0.2.0/24 blackhole distance '10'
+ - set vrf name vrf-pink protocols static route 192.0.2.0/24 next-hop '203.0.113.1'
+ - set vrf name vrf-pink protocols static route 192.0.2.0/24 next-hop '203.0.113.2'
+ - set vrf name vrf-pink protocols static route6 2001:db8::/32
+ - set vrf name vrf-pink protocols static route6 2001:db8::/32 blackhole distance '20'
+ - set vrf name vrf-pink protocols static route6 2001:db8::/32 next-hop '2001:db8::1'