diff options
Diffstat (limited to 'tests')
11 files changed, 307 insertions, 69 deletions
diff --git a/tests/integration/targets/vyos_firewall_rules/vars/v1_4.yaml b/tests/integration/targets/vyos_firewall_rules/vars/v1_4.yaml index 267803f6..08675983 100644 --- a/tests/integration/targets/vyos_firewall_rules/vars/v1_4.yaml +++ b/tests/integration/targets/vyos_firewall_rules/vars/v1_4.yaml @@ -85,7 +85,6 @@ overridden_commands: - set firewall ipv4 name Downlink rule 502 description 'Rule 502 is configured by Ansible' - set firewall ipv4 name Downlink rule 502 protocol 'tcp' - rendered: commands: - set firewall ipv6 name UPLINK default-action 'accept' diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/_get_version.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/_get_version.yaml new file mode 100644 index 00000000..46f4b821 --- /dev/null +++ b/tests/integration/targets/vyos_interfaces/tests/cli/_get_version.yaml @@ -0,0 +1,28 @@ +- name: make sure to get facts + vyos.vyos.vyos_facts: + vars: + ansible_connection: ansible.netcommon.network_cli + register: vyos_facts + when: vyos_version is not defined + +- name: debug vyos_facts + debug: + var: vyos_facts + +- name: pull version from facts + set_fact: + vyos_version: "{{ vyos_facts.ansible_facts.ansible_net_version.split('-')[0].split(' ')[-1] }}" + when: vyos_version is not defined + +- name: fix '.0' versions + set_fact: + vyos_version: "{{ vyos_version }}.0" + when: vyos_version.count('.') == 1 + +- name: include correct vars + include_vars: pre-v1_5.yaml + when: vyos_version is version('1.5.0', '<', version_type='semver') + +- name: include correct vars + include_vars: v1_5.yaml + when: vyos_version is version('1.5.0', '>=', version_type='semver') diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/_populate.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/_populate.yaml index c6cc1a8d..45bd9b6a 100644 --- a/tests/integration/targets/vyos_interfaces/tests/cli/_populate.yaml +++ b/tests/integration/targets/vyos_interfaces/tests/cli/_populate.yaml @@ -1,17 +1,15 @@ --- +- name: ensure facts + include_tasks: _get_version.yaml + - ansible.builtin.include_tasks: _remove_config.yaml - name: Setup - vars: - lines: |- + ansible.netcommon.cli_config: + config: |- + {% for intf in ('eth1','eth2') %} set interfaces ethernet "{{ intf }}" description 'Configured by Ansible' set interfaces ethernet "{{ intf }}" mtu '1500' set interfaces ethernet "{{ intf }}" vif 200 set interfaces ethernet "{{ intf }}" vif 200 description 'VIF - 200' - loop: - - eth1 - - eth2 - loop_control: - loop_var: intf - ansible.netcommon.cli_config: - config: "{{ lines }}" + {% endfor %} diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/_remove_config.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/_remove_config.yaml index ed2b424b..73f481bf 100644 --- a/tests/integration/targets/vyos_interfaces/tests/cli/_remove_config.yaml +++ b/tests/integration/targets/vyos_interfaces/tests/cli/_remove_config.yaml @@ -1,17 +1,12 @@ --- - name: Remove Config - vars: - lines: |- + ansible.netcommon.cli_config: + config: |- + {% for intf in ('eth1','eth2') %} delete interfaces ethernet "{{ intf }}" description delete interfaces ethernet "{{ intf }}" speed delete interfaces ethernet "{{ intf }}" duplex delete interfaces ethernet "{{ intf }}" mtu delete interfaces ethernet "{{ intf }}" disable delete interfaces ethernet "{{ intf }}" vif - loop: - - eth1 - - eth2 - loop_control: - loop_var: intf - ansible.netcommon.cli_config: - config: "{{ lines }}" + {% endfor %} diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/replaced.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/replaced.yaml index 6309c590..9d0a3a8b 100644 --- a/tests/integration/targets/vyos_interfaces/tests/cli/replaced.yaml +++ b/tests/integration/targets/vyos_interfaces/tests/cli/replaced.yaml @@ -23,7 +23,7 @@ - name: Assert that correct set of commands were generated assert: that: - - "{{ replaced['commands'] | symmetric_difference(result['commands']) |length == 0 }}" + - replaced['commands'] | symmetric_difference(result['commands']) |length == 0 - debug: var: populate | symmetric_difference(result['before']) @@ -31,7 +31,7 @@ - name: Assert that before dicts are correctly generated assert: that: - - "{{ populate | symmetric_difference(result['before']) |length == 0 }}" + - populate | symmetric_difference(result['before']) |length == 0 - debug: var: replaced['after'] | symmetric_difference(result['after']) @@ -39,7 +39,15 @@ - name: Assert that after dict is correctly generated assert: that: - - "{{ replaced['after'] | symmetric_difference(result['after']) |length == 0 }}" + - replaced['after'] | symmetric_difference(result['after']) |length == 0 + + - vyos.vyos.vyos_facts: + gather_network_resources: interfaces + + - name: Assert that the facts and the after dict are the same + assert: + that: + - result.after == ansible_facts['network_resources']['interfaces'] - name: Replace device configurations of listed interfaces with provided configurarions (IDEMPOTENT) register: result @@ -53,6 +61,6 @@ - name: Assert that before dict is correctly generated assert: that: - - "{{ replaced['after'] | symmetric_difference(result['before']) |length == 0 }}" + - replaced['after'] | symmetric_difference(result['before']) |length == 0 always: - include_tasks: _remove_config.yaml diff --git a/tests/integration/targets/vyos_interfaces/vars/main.yaml b/tests/integration/targets/vyos_interfaces/vars/main.yaml index 9d931707..be87cf8c 100644 --- a/tests/integration/targets/vyos_interfaces/vars/main.yaml +++ b/tests/integration/targets/vyos_interfaces/vars/main.yaml @@ -9,8 +9,6 @@ merged: enabled: true - name: eth2 enabled: true - - name: lo - enabled: true commands: - set interfaces ethernet eth1 description 'Configured by Ansible - Interface 1' - set interfaces ethernet eth1 mtu '1500' @@ -21,8 +19,6 @@ merged: - set interfaces ethernet eth2 mtu '1406' - set interfaces ethernet eth2 disable after: - - name: lo - enabled: true - name: eth0 enabled: true duplex: auto @@ -44,8 +40,6 @@ merged: mtu: 1406 enabled: false populate: - - name: lo - enabled: true - name: eth1 enabled: true description: Configured by Ansible @@ -69,15 +63,13 @@ populate: replaced: commands: - delete interfaces ethernet eth1 mtu - - delete interfaces ethernet eth1 vif 200 description + - delete interfaces ethernet eth1 vif 200 - set interfaces ethernet eth1 description 'Replaced by Ansible' - set interfaces ethernet eth1 vif 100 description 'VIF 100 - Replaced by Ansible' - - delete interfaces ethernet eth2 vif 200 description + - delete interfaces ethernet eth2 vif 200 - set interfaces ethernet eth2 description 'Replaced by Ansible' - set interfaces ethernet eth2 mtu '1400' after: - - name: lo - enabled: true - name: eth1 description: Replaced by Ansible enabled: true @@ -85,15 +77,10 @@ replaced: - vlan_id: 100 enabled: true description: VIF 100 - Replaced by Ansible - - vlan_id: 200 - enabled: true - name: eth2 mtu: 1400 description: Replaced by Ansible enabled: true - vifs: - - vlan_id: 200 - enabled: true - name: eth0 enabled: true duplex: auto @@ -120,29 +107,21 @@ overridden: commands: - delete interfaces ethernet eth1 description - delete interfaces ethernet eth1 mtu - - delete interfaces ethernet eth1 vif 200 description - - delete interfaces ethernet eth2 vif 200 description + - delete interfaces ethernet eth1 vif 200 + - delete interfaces ethernet eth2 vif 200 - set interfaces ethernet eth2 description 'Overridden by Ansible' - set interfaces ethernet eth2 mtu '1402' after: - - name: lo - enabled: true - name: eth0 enabled: true speed: auto duplex: auto - name: eth1 enabled: true - vifs: - - vlan_id: 200 - enabled: true - name: eth2 enabled: true description: Overridden by Ansible mtu: 1402 - vifs: - - vlan_id: 200 - enabled: true rendered: commands: - set interfaces ethernet eth1 description 'Configured by Ansible - Interface 1' @@ -157,31 +136,21 @@ deleted: commands: - delete interfaces ethernet eth1 description - delete interfaces ethernet eth1 mtu - - delete interfaces ethernet eth1 vif 200 description + - delete interfaces ethernet eth1 vif 200 - delete interfaces ethernet eth2 description - delete interfaces ethernet eth2 mtu - - delete interfaces ethernet eth2 vif 200 description + - delete interfaces ethernet eth2 vif 200 after: - - name: lo - enabled: true - name: eth0 enabled: true speed: auto duplex: auto - name: eth1 enabled: true - vifs: - - vlan_id: 200 - enabled: true - name: eth2 enabled: true - vifs: - - vlan_id: 200 - enabled: true round_trip: after: - - name: lo - enabled: true - name: eth0 enabled: true speed: auto diff --git a/tests/integration/targets/vyos_interfaces/vars/pre-v1_5.yaml b/tests/integration/targets/vyos_interfaces/vars/pre-v1_5.yaml new file mode 100644 index 00000000..1026b30e --- /dev/null +++ b/tests/integration/targets/vyos_interfaces/vars/pre-v1_5.yaml @@ -0,0 +1,2 @@ +--- +# Remove the lo0 interface for older versions of VyOS (pre-v1.4) diff --git a/tests/integration/targets/vyos_interfaces/vars/v1_5.yaml b/tests/integration/targets/vyos_interfaces/vars/v1_5.yaml new file mode 100644 index 00000000..ed97d539 --- /dev/null +++ b/tests/integration/targets/vyos_interfaces/vars/v1_5.yaml @@ -0,0 +1 @@ +--- diff --git a/tests/integration/targets/vyos_l3_interfaces/vars/main.yaml b/tests/integration/targets/vyos_l3_interfaces/vars/main.yaml index deec3faa..e9781e6a 100644 --- a/tests/integration/targets/vyos_l3_interfaces/vars/main.yaml +++ b/tests/integration/targets/vyos_l3_interfaces/vars/main.yaml @@ -1,7 +1,6 @@ --- merged: before: - - name: lo - name: eth0 ipv4: - address: dhcp @@ -14,7 +13,6 @@ merged: - set interfaces ethernet eth2 vif 101 address '198.51.100.130/25' - set interfaces ethernet eth2 vif 101 address '2001:db8::20/32' after: - - name: lo - name: eth0 ipv4: - address: dhcp @@ -33,7 +31,6 @@ merged: ipv6: - address: 2001:db8::20/32 populate: - - name: lo - name: eth1 ipv4: - address: 192.0.2.14/24 @@ -57,7 +54,6 @@ replaced: - delete interfaces ethernet eth1 address '192.0.2.14/24' - set interfaces ethernet eth1 address '192.0.2.19/24' after: - - name: lo - name: eth2 ipv6: - address: 2001:db8::11/32 @@ -76,7 +72,6 @@ overridden: - delete interfaces ethernet eth2 address '2001:db8::10/32' - delete interfaces ethernet eth2 address '2001:db8::12/32' after: - - name: lo - name: eth0 ipv4: - address: dhcp @@ -116,7 +111,6 @@ deleted: - delete interfaces ethernet eth2 address '2001:db8::10/32' - delete interfaces ethernet eth2 address '2001:db8::12/32' after: - - name: lo - name: eth0 ipv4: - address: dhcp diff --git a/tests/unit/modules/network/vyos/fixtures/vyos_interfaces_config_vif.cfg b/tests/unit/modules/network/vyos/fixtures/vyos_interfaces_config_vif.cfg new file mode 100644 index 00000000..b1b6b4c2 --- /dev/null +++ b/tests/unit/modules/network/vyos/fixtures/vyos_interfaces_config_vif.cfg @@ -0,0 +1,14 @@ +set interfaces ethernet eth0 address 'dhcp' +set interfaces ethernet eth0 hw-id '08:00:27:7c:85:05' +set interfaces ethernet eth1 description 'test-interface' +set interfaces ethernet eth1 vif 200 +set interfaces ethernet eth1 vif 200 description 'VIF eth1.200' +set interfaces ethernet eth1 vif 201 +set interfaces ethernet eth1 vif 201 description 'VIF eth1.201' +set interfaces ethernet eth1 vif 201 disable +set interfaces ethernet eth2 hw-id '08:00:27:04:85:99' +set interfaces ethernet eth3 hw-id '08:00:27:1c:82:d1' +set interfaces ethernet eth3 disable +set interfaces ethernet eth3 description 'Ethernet 3' +set interfaces wireguard wg02 description 'wire guard int 2' +set interfaces loopback 'lo' diff --git a/tests/unit/modules/network/vyos/test_vyos_interfaces.py b/tests/unit/modules/network/vyos/test_vyos_interfaces.py index 14e49c36..8549d768 100644 --- a/tests/unit/modules/network/vyos/test_vyos_interfaces.py +++ b/tests/unit/modules/network/vyos/test_vyos_interfaces.py @@ -59,6 +59,8 @@ class TestVyosFirewallInterfacesModule(TestVyosModule): "facts.interfaces.interfaces.InterfacesFacts.get_device_data", ) self.execute_show_command = self.mock_execute_show_command.start() + # define the default fixture for the vyos_interfaces module + self.fixture_path = "vyos_interfaces_config.cfg" def tearDown(self): super(TestVyosFirewallInterfacesModule, self).tearDown() @@ -70,7 +72,7 @@ class TestVyosFirewallInterfacesModule(TestVyosModule): def load_fixtures(self, commands=None, filename=None): def load_from_file(*args, **kwargs): - return load_fixture("vyos_interfaces_config.cfg") + return load_fixture(self.fixture_path) self.execute_show_command.side_effect = load_from_file @@ -93,6 +95,52 @@ class TestVyosFirewallInterfacesModule(TestVyosModule): ] self.execute_module(changed=True, commands=commands) + def test_vyos_interfaces_merged_retain_vif(self): + # we have a vif in eth1 at this point, so that should be retained + self.fixture_path = "vyos_interfaces_config_vif.cfg" + set_module_args( + dict( + config=[ + dict(name="bond1", description="Bond - 1", enabled=True), + dict(name="vtun1", description="vtun - 1", enabled=True), + dict(name="wg01", description="wg - 1", enabled=True), + ], + state="merged", + ), + ) + + commands = [ + "set interfaces bonding bond1 description 'Bond - 1'", + "set interfaces openvpn vtun1 description 'vtun - 1'", + "set interfaces wireguard wg01 description 'wg - 1'", + ] + self.execute_module(changed=True, commands=commands) + + def test_vyos_interfaces_merged_additional_vif(self): + # we have a vif in eth1 at this point, so that should be retained + self.fixture_path = "vyos_interfaces_config_vif.cfg" + set_module_args( + dict( + config=[ + dict( + name="eth1", + vifs=[ + dict( + vlan_id=105, + description="vlan 105", + ), + ], + ), + ], + state="merged", + ), + ) + + commands = [ + "set interfaces ethernet eth1 vif 105 description 'vlan 105'", + ] + self.execute_module(changed=True, commands=commands) + def test_vyos_interfaces_merged_idempotent(self): set_module_args( dict( @@ -159,6 +207,102 @@ class TestVyosFirewallInterfacesModule(TestVyosModule): ] self.execute_module(changed=True, commands=commands) + def test_vyos_interfaces_replaced_remove_vif(self): + # we have a vif in eth1 at this point, so that should be removed + self.fixture_path = "vyos_interfaces_config_vif.cfg" + set_module_args( + dict( + config=[ + dict( + name="eth4", + description="Ethernet 4", + enabled=True, + speed="auto", + duplex="auto", + ), + dict(name="eth1", description="Configured by Ansible"), + ], + state="replaced", + ), + ) + + commands = [ + "delete interfaces ethernet eth1 vif 200", + "delete interfaces ethernet eth1 vif 201", + "set interfaces ethernet eth1 description 'Configured by Ansible'", + "set interfaces ethernet eth4 description 'Ethernet 4'", + "set interfaces ethernet eth4 duplex 'auto'", + "set interfaces ethernet eth4 speed 'auto'", + ] + self.execute_module(changed=True, commands=commands) + + def test_vyos_interfaces_merged_enable_vif(self): + # merge in enabling vif + self.fixture_path = "vyos_interfaces_config_vif.cfg" + set_module_args( + dict( + config=[ + dict( + name="eth1", + vifs=[ + dict( + vlan_id=201, + enabled=True, + ), + ], + ), + ], + state="merged", + ), + ) + + commands = [ + "delete interfaces ethernet eth1 vif 201 disable", + ] + self.execute_module(changed=True, commands=commands) + + def test_vyos_interfaces_replaced_retain_vif(self): + # we have a vif in eth1 at this point, so that should be removed + self.fixture_path = "vyos_interfaces_config_vif.cfg" + set_module_args( + dict( + config=[ + dict( + name="eth4", + description="Ethernet 4", + enabled=True, + speed="auto", + duplex="auto", + ), + dict( + name="eth1", + description="Configured by Ansible", + vifs=[ + dict( + vlan_id=200, + ), + dict( + vlan_id=201, + description="VIF eth1.201", + enabled=True, + ), + ], + ), + ], + state="replaced", + ), + ) + + commands = [ + "delete interfaces ethernet eth1 vif 200 description", + "delete interfaces ethernet eth1 vif 201 disable", + "set interfaces ethernet eth1 description 'Configured by Ansible'", + "set interfaces ethernet eth4 description 'Ethernet 4'", + "set interfaces ethernet eth4 duplex 'auto'", + "set interfaces ethernet eth4 speed 'auto'", + ] + self.execute_module(changed=True, commands=commands) + def test_vyos_interfaces_overridden_newinterface(self): set_module_args( dict( @@ -187,6 +331,38 @@ class TestVyosFirewallInterfacesModule(TestVyosModule): ] self.execute_module(changed=True, commands=commands) + def test_vyos_overridden_remove_vif(self): + # we have a vif in eth1 at this point, so that should be removed + self.fixture_path = "vyos_interfaces_config_vif.cfg" + set_module_args( + dict( + config=[ + dict( + name="eth4", + description="Ethernet 4", + enabled=True, + speed="auto", + duplex="auto", + ), + dict(name="eth1", description="Configured by Ansible"), + ], + state="overridden", + ), + ) + + commands = [ + "set interfaces ethernet eth1 description 'Configured by Ansible'", + "set interfaces ethernet eth4 description 'Ethernet 4'", + "set interfaces ethernet eth4 duplex 'auto'", + "set interfaces ethernet eth4 speed 'auto'", + "delete interfaces wireguard wg02 description", + "delete interfaces ethernet eth3 description", + "delete interfaces ethernet eth3 disable", + "delete interfaces ethernet eth1 vif 200", + "delete interfaces ethernet eth1 vif 201", + ] + self.execute_module(changed=True, commands=commands) + def test_vyos_interfaces_idempotent_disable(self): set_module_args( dict( @@ -198,7 +374,7 @@ class TestVyosFirewallInterfacesModule(TestVyosModule): ), ], state="merged", - ) + ), ) commands = [] @@ -215,8 +391,62 @@ class TestVyosFirewallInterfacesModule(TestVyosModule): ), ], state="replaced", - ) + ), ) commands = [] self.execute_module(changed=False, commands=commands) + + def test_vyos_interfaces_deleted_remove_vif(self): + # we have a vif in eth1 at this point, so that should be removed + self.fixture_path = "vyos_interfaces_config_vif.cfg" + set_module_args( + dict( + config=[ + dict(name="eth1"), + ], + state="deleted", + ), + ) + + commands = [ + "delete interfaces ethernet eth1 vif 200", + "delete interfaces ethernet eth1 vif 201", + "delete interfaces ethernet eth1 description", + ] + self.execute_module(changed=True, commands=commands) + + def test_vyos_interfaces_deleted_remove_all(self): + # we have a vif in eth1 at this point, so that should be removed + set_module_args( + dict( + config=[], + state="deleted", + ), + ) + + commands = [ + "delete interfaces ethernet eth1 description", + "delete interfaces ethernet eth3 description", + "delete interfaces ethernet eth3 disable", + "delete interfaces wireguard wg02 description", + ] + self.execute_module(changed=True, commands=commands) + + def test_vyos_interfaces_replaced_bad_name(self): + set_module_args( + dict( + config=[ + dict( + name="int4", + description="Ethernet 4", + enabled=True, + speed="auto", + duplex="auto", + ), + ], + state="replaced", + ), + ) + + self.execute_module(failed=True) |