diff --git a/tests/integration/targets/vyos_vrf/tests/cli/_parsed.cfg b/tests/integration/targets/vyos_vrf/tests/cli/_parsed.cfg
index b0eb373a..2b083b79 100644
--- a/tests/integration/targets/vyos_vrf/tests/cli/_parsed.cfg
+++ b/tests/integration/targets/vyos_vrf/tests/cli/_parsed.cfg
@@ -1,14 +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/merged.yaml b/tests/integration/targets/vyos_vrf/tests/cli/merged.yaml
index 637ab1db..0a93ae02 100644
--- a/tests/integration/targets/vyos_vrf/tests/cli/merged.yaml
+++ b/tests/integration/targets/vyos_vrf/tests/cli/merged.yaml
@@ -1,44 +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/rtt.yaml b/tests/integration/targets/vyos_vrf/tests/cli/rtt.yaml
index 53b1d4ff..e8e9ea2c 100644
--- a/tests/integration/targets/vyos_vrf/tests/cli/rtt.yaml
+++ b/tests/integration/targets/vyos_vrf/tests/cli/rtt.yaml
@@ -1,59 +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
index c981b25a..2927d7a2 100644
--- a/tests/integration/targets/vyos_vrf/vars/main.yaml
+++ b/tests/integration/targets/vyos_vrf/vars/main.yaml
@@ -1,110 +1,211 @@
---
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: "kernel"
- 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: "kernel"
- 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
after: []
overridden:
commands:
- delete vrf name vrf-blue
- 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
- 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-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'
diff --git a/tests/unit/modules/network/vyos/test_vyos_config.py b/tests/unit/modules/network/vyos/test_vyos_config.py
index 4f1cac6a..d9fd5933 100644
--- a/tests/unit/modules/network/vyos/test_vyos_config.py
+++ b/tests/unit/modules/network/vyos/test_vyos_config.py
@@ -1,142 +1,149 @@
#
# (c) 2016 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see .
# Make coding more python3-ish
from __future__ import absolute_import, division, print_function
__metaclass__ = type
from unittest.mock import MagicMock, patch
from ansible_collections.vyos.vyos.plugins.cliconf.vyos import Cliconf
from ansible_collections.vyos.vyos.plugins.modules import vyos_config
from ansible_collections.vyos.vyos.tests.unit.modules.utils import set_module_args
from .vyos_module import TestVyosModule, load_fixture
class TestVyosConfigModule(TestVyosModule):
module = vyos_config
def setUp(self):
super(TestVyosConfigModule, self).setUp()
self.mock_get_config = patch(
"ansible_collections.vyos.vyos.plugins.modules.vyos_config.get_config",
)
self.get_config = self.mock_get_config.start()
self.mock_load_config = patch(
"ansible_collections.vyos.vyos.plugins.modules.vyos_config.load_config",
)
self.load_config = self.mock_load_config.start()
self.mock_run_commands = patch(
"ansible_collections.vyos.vyos.plugins.modules.vyos_config.run_commands",
)
self.run_commands = self.mock_run_commands.start()
self.mock_get_connection = patch(
"ansible_collections.vyos.vyos.plugins.modules.vyos_config.get_connection",
)
self.get_connection = self.mock_get_connection.start()
self.cliconf_obj = Cliconf(MagicMock())
self.running_config = load_fixture("vyos_config_config.cfg")
self.conn = self.get_connection()
self.conn.edit_config = MagicMock()
self.running_config = load_fixture("vyos_config_config.cfg")
+ self._connection = self.mock_connection()
+
def tearDown(self):
super(TestVyosConfigModule, self).tearDown()
self.mock_get_config.stop()
self.mock_load_config.stop()
self.mock_run_commands.stop()
self.mock_get_connection.stop()
def load_fixtures(self, commands=None, filename=None):
config_file = "vyos_config_config.cfg"
self.get_config.return_value = load_fixture(config_file)
self.load_config.return_value = None
+ def mock_connection(self):
+ """Fixture to provide a mock connection object"""
+ mock = MagicMock()
+ return mock
+
def test_vyos_config_unchanged(self):
src = load_fixture("vyos_config_config.cfg")
self.conn.get_diff = MagicMock(return_value=self.cliconf_obj.get_diff(src, src))
set_module_args(dict(src=src))
self.execute_module()
def test_vyos_config_src(self):
src = load_fixture("vyos_config_src.cfg")
set_module_args(dict(src=src))
candidate = "\n".join(self.module.format_commands(src.splitlines()))
commands = [
"set system host-name foo",
"delete interfaces ethernet eth0 address",
]
self.conn.get_diff = MagicMock(
return_value=self.cliconf_obj.get_diff(candidate, self.running_config),
)
self.execute_module(changed=True, commands=commands)
def test_vyos_config_src_brackets(self):
src = load_fixture("vyos_config_src_brackets.cfg")
set_module_args(dict(src=src))
commands = [
"set interfaces ethernet eth0 address 10.10.10.10/24",
"set policy route testroute rule 1 set table 10",
"set system host-name foo",
]
self.conn.get_diff = MagicMock(side_effect=self.cliconf_obj.get_diff)
self.execute_module(changed=True, commands=commands)
def test_vyos_config_backup(self):
set_module_args(dict(backup=True))
result = self.execute_module()
self.assertIn("__backup__", result)
def test_vyos_config_lines(self):
commands = ["set system host-name foo"]
set_module_args(dict(lines=commands))
candidate = "\n".join(commands)
self.conn.get_diff = MagicMock(
return_value=self.cliconf_obj.get_diff(candidate, self.running_config),
)
self.execute_module(changed=True, commands=commands)
def test_vyos_config_config(self):
config = "set system host-name localhost"
new_config = ["set system host-name router"]
set_module_args(dict(lines=new_config, config=config))
candidate = "\n".join(new_config)
self.conn.get_diff = MagicMock(return_value=self.cliconf_obj.get_diff(candidate, config))
self.execute_module(changed=True, commands=new_config)
def test_vyos_config_match_none(self):
lines = [
"set system interfaces ethernet eth0 address 1.2.3.4/24",
"set system interfaces ethernet eth0 description test string",
]
set_module_args(dict(lines=lines, match="none"))
candidate = "\n".join(lines)
self.conn.get_diff = MagicMock(
return_value=self.cliconf_obj.get_diff(candidate, None, diff_match="none"),
)
self.execute_module(changed=True, commands=lines, sort=False)
diff --git a/tests/unit/modules/network/vyos/test_vyos_vrf.py b/tests/unit/modules/network/vyos/test_vyos_vrf.py
index 44e3baf3..634598b4 100644
--- a/tests/unit/modules/network/vyos/test_vyos_vrf.py
+++ b/tests/unit/modules/network/vyos/test_vyos_vrf.py
@@ -1,525 +1,523 @@
# (c) 2021 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see .
# Make coding more python3-ish
from __future__ import absolute_import, division, print_function
__metaclass__ = type
from unittest.mock import patch
from ansible_collections.vyos.vyos.plugins.modules import vyos_vrf
from ansible_collections.vyos.vyos.tests.unit.modules.utils import set_module_args
from .vyos_module import TestVyosModule, load_fixture
class TestVyosVrfModule(TestVyosModule):
module = vyos_vrf
def setUp(self):
super(TestVyosVrfModule, self).setUp()
self.mock_get_resource_connection_config = patch(
"ansible_collections.ansible.netcommon.plugins.module_utils.network.common.rm_base.resource_module_base.get_resource_connection",
)
self.get_resource_connection_config = self.mock_get_resource_connection_config.start()
self.mock_get_resource_connection_facts = patch(
"ansible_collections.ansible.netcommon.plugins.module_utils.network.common.facts.facts.get_resource_connection",
)
self.get_resource_connection_facts = self.mock_get_resource_connection_facts.start()
- self._connection = self.mock_get_resource_connection_facts.start()
-
self.mock_execute_show_command = patch(
"ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.facts.vrf.vrf.VrfFacts.get_config",
)
self.execute_show_command = self.mock_execute_show_command.start()
self.mock_get_os_version = patch(
"ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.config.vrf.vrf.get_os_version",
)
self.get_os_version = self.mock_get_os_version.start()
self.get_os_version.return_value = "1.5"
self.maxDiff = None
def tearDown(self):
super(TestVyosVrfModule, self).tearDown()
self.mock_get_resource_connection_config.stop()
self.mock_get_resource_connection_facts.stop()
self.mock_execute_show_command.stop()
self.mock_get_os_version.stop()
def load_fixtures(self, commands=None, filename=None):
if filename is None:
filename = "vyos_vrf_config.cfg"
def load_from_file(*args, **kwargs):
output = load_fixture(filename)
return output
self.execute_show_command.side_effect = load_from_file
def test_vrf_merged_idempotent(self):
set_module_args(
dict(
config=dict(
bind_to_all=True,
instances=[
dict(
name="vrf-blue",
description="blue-vrf",
disable=False,
table_id=100,
vni=1000,
),
dict(
name="vrf-red",
description="red-vrf",
disable=True,
table_id=101,
vni=1001,
address_family=[
dict(
afi="ipv4",
disable_forwarding=True,
route_maps=[
dict(rm_name="rm1", protocol="kernel"),
dict(rm_name="rm1", protocol="rip"),
],
),
dict(
afi="ipv6",
nht_no_resolve_via_default=True,
),
],
# protocols = dict(
# bgp=dict(
# as_number=65000,
# neighbor=[
# dict(
# address="192.0.2.1",
# remote_as=65002,
# ),
# dict(
# address="1.1.1.3",
# remote_as=400,
# passive=True,
# ),
# ],
# ),
# ),
),
],
),
state="merged",
),
)
self.execute_module(changed=False, commands=[])
def test_vrf_merged(self):
set_module_args(
dict(
config=dict(
bind_to_all=True,
instances=[
dict(
name="vrf-green",
description="green-vrf",
table_id=110,
vni=1010,
),
],
),
state="merged",
),
)
commands = [
"set vrf name vrf-green table 110",
"set vrf name vrf-green vni 1010",
"set vrf name vrf-green description green-vrf",
]
self.execute_module(changed=True, commands=commands)
def test_vrf_replaced(self):
set_module_args(
dict(
config=dict(
bind_to_all=True,
instances=[
dict(
name="vrf-blue",
description="blue-vrf-replaced",
disable=True,
table_id=100,
vni=1000,
),
dict(
name="vrf-red",
description="red-vrf",
disable=True,
table_id=101,
vni=1001,
address_family=[
dict(
afi="ipv4",
disable_forwarding=False,
route_maps=[
dict(rm_name="rm1", protocol="kernel"),
dict(rm_name="rm1", protocol="rip"),
],
),
dict(
afi="ipv6",
nht_no_resolve_via_default=False,
),
],
),
],
),
state="replaced",
),
)
commands = [
"set vrf name vrf-blue description blue-vrf-replaced",
"set vrf name vrf-blue disable",
"delete vrf name vrf-red ip disable-forwarding",
"delete vrf name vrf-red ipv6 nht no-resolve-via-default",
]
self.execute_module(changed=True, commands=commands)
def test_vrf_replaced_idempotent(self):
set_module_args(
dict(
config=dict(
bind_to_all=True,
instances=[
dict(
name="vrf-blue",
description="blue-vrf",
disable=False,
table_id=100,
vni=1000,
),
dict(
name="vrf-red",
description="red-vrf",
disable=True,
table_id=101,
vni=1001,
address_family=[
dict(
afi="ipv4",
disable_forwarding=True,
route_maps=[
dict(rm_name="rm1", protocol="kernel"),
dict(rm_name="rm1", protocol="rip"),
],
),
dict(
afi="ipv6",
nht_no_resolve_via_default=True,
),
],
),
],
),
state="replaced",
),
)
self.execute_module(changed=False, commands=[])
def test_vrf_overridden(self):
set_module_args(
dict(
config=dict(
instances=[
dict(
name="vrf-blue",
description="blue-vrf",
disable=True,
table_id=103,
vni=1002,
),
],
),
state="overridden",
),
)
commands = [
"delete vrf name vrf-blue",
"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",
"delete vrf bind-to-all",
]
self.execute_module(changed=True, commands=commands)
def test_vrf_overridden_idempotent(self):
set_module_args(
dict(
config=dict(
bind_to_all=True,
instances=[
dict(
name="vrf-blue",
description="blue-vrf",
disable=False,
table_id=100,
vni=1000,
),
dict(
name="vrf-red",
description="red-vrf",
disable=True,
table_id=101,
vni=1001,
address_family=[
dict(
afi="ipv4",
disable_forwarding=True,
route_maps=[
dict(rm_name="rm1", protocol="kernel"),
dict(rm_name="rm1", protocol="rip"),
],
),
dict(
afi="ipv6",
nht_no_resolve_via_default=True,
),
],
),
],
),
state="overridden",
),
)
self.execute_module(changed=False, commands=[])
def test_vrf_rendered(self):
set_module_args(
dict(
config=dict(
bind_to_all=True,
instances=[
dict(
name="vrf-green",
description="green-vrf",
disabled=True,
table_id=105,
vni=1000,
),
dict(
name="vrf-amber",
description="amber-vrf",
disable=False,
table_id=111,
vni=1001,
address_family=[
dict(
afi="ipv4",
disable_forwarding=True,
route_maps=[
dict(rm_name="rm1", protocol="kernel"),
dict(rm_name="rm1", protocol="ospf"),
],
),
dict(
afi="ipv6",
nht_no_resolve_via_default=False,
),
],
),
],
),
state="rendered",
),
)
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-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",
]
result = self.execute_module(changed=False)
self.assertEqual(
sorted(result["rendered"]),
sorted(rendered_commands),
result["rendered"],
)
def test_vrf_parsed(self):
commands = (
"set vrf bind-to-all",
"set vrf name vrf1 description 'red'",
"set vrf name vrf1 disable",
"set vrf name vrf1 table 101",
"set vrf name vrf1 vni 501",
"set vrf name vrf2 description 'green'",
"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",
)
parsed_str = "\n".join(commands)
set_module_args(dict(running_config=parsed_str, state="parsed"))
result = self.execute_module(changed=False)
parsed_list = {
"bind_to_all": True,
"instances": [
{
"address_family": [
{
"afi": "ipv4",
"disable_forwarding": True,
"nht_no_resolve_via_default": True,
},
],
"description": "red",
"disable": True,
"name": "vrf1",
},
{
"description": "green",
"disable": True,
"name": "vrf2",
},
{
"address_family": [
{
"afi": "ipv4",
"disable_forwarding": False,
"nht_no_resolve_via_default": False,
"route_maps": [
{
"protocol": "kernel",
"rm_name": "rm1",
},
{
"protocol": "ospf",
"rm_name": "rm1",
},
],
},
{
"afi": "ipv6",
"disable_forwarding": False,
"nht_no_resolve_via_default": True,
},
],
"disable": False,
"name": "vrf-red",
},
],
}
self.assertEqual(parsed_list, result["parsed"])
def test_vrf_gathered(self):
set_module_args(dict(state="gathered"))
result = self.execute_module(changed=False)
gathered_list = {
"bind_to_all": True,
"instances": [
{
"description": "blue-vrf",
"disable": False,
"name": "vrf-blue",
"table_id": 100,
"vni": 1000,
},
{
"address_family": [
{
"afi": "ipv4",
"disable_forwarding": True,
"nht_no_resolve_via_default": False,
"route_maps": [
{
"protocol": "kernel",
"rm_name": "rm1",
},
{
"protocol": "rip",
"rm_name": "rm1",
},
],
},
{
"afi": "ipv6",
"disable_forwarding": False,
"nht_no_resolve_via_default": True,
},
],
"description": "red-vrf",
"disable": True,
"name": "vrf-red",
"table_id": 101,
"vni": 1001,
},
],
}
self.assertEqual(gathered_list, result["gathered"])
def test_vrf_deleted(self):
# Delete the instances and global setting bind_to_all
set_module_args(
dict(
config=dict(
bind_to_all=True,
instances=[
dict(
name="vrf-blue",
),
],
),
state="deleted",
),
)
commands = [
"delete vrf bind-to-all",
"delete vrf name vrf-blue",
]
self.execute_module(changed=True, commands=commands)
def test_vrf_all_deleted(self):
set_module_args(
dict(
state="deleted",
),
)
commands = [
"delete vrf",
]
self.execute_module(changed=True, commands=commands)