summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGaige B Paulsen <gaige@cluetrust.com>2025-01-26 15:00:56 -0500
committerGitHub <noreply@github.com>2025-01-27 06:00:56 +1000
commit0a0ab13f84e3930e203a412ae08c127b282ab675 (patch)
treeb52db22cfa3fc0994c0d3a2ccf20e34b32203e55
parentfda50fe09d21b365264c6213bc5883201c460a29 (diff)
downloadvyos.vyos-0a0ab13f84e3930e203a412ae08c127b282ab675.tar.gz
vyos.vyos-0a0ab13f84e3930e203a412ae08c127b282ab675.zip
T7006: update to fix interface tests (#374)
* T7008: update to fix interface tests * T7006: fix: tests for interfaces * T7006: further work on interfaces * test: attempt to fix codecov on branch * test: unwind cli_config loops for 1.4 * fix: vif handling in replace,override,delete * fix: vif handling and docs
-rw-r--r--.github/workflows/codecoverage.yml3
-rw-r--r--changelogs/fragments/T7006-interface-integration-tests.yml8
-rw-r--r--changelogs/fragments/T7008-l3-interface-integration-tests.yml9
-rw-r--r--docs/vyos.vyos.vyos_interfaces_module.rst13
-rw-r--r--plugins/module_utils/network/vyos/config/interfaces/interfaces.py41
-rw-r--r--plugins/modules/vyos_interfaces.py13
-rw-r--r--tests/integration/targets/vyos_firewall_rules/vars/v1_4.yaml1
-rw-r--r--tests/integration/targets/vyos_interfaces/tests/cli/_get_version.yaml28
-rw-r--r--tests/integration/targets/vyos_interfaces/tests/cli/_populate.yaml16
-rw-r--r--tests/integration/targets/vyos_interfaces/tests/cli/_remove_config.yaml13
-rw-r--r--tests/integration/targets/vyos_interfaces/tests/cli/replaced.yaml16
-rw-r--r--tests/integration/targets/vyos_interfaces/vars/main.yaml43
-rw-r--r--tests/integration/targets/vyos_interfaces/vars/pre-v1_5.yaml2
-rw-r--r--tests/integration/targets/vyos_interfaces/vars/v1_5.yaml1
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/vars/main.yaml6
-rw-r--r--tests/unit/modules/network/vyos/fixtures/vyos_interfaces_config_vif.cfg14
-rw-r--r--tests/unit/modules/network/vyos/test_vyos_interfaces.py236
17 files changed, 352 insertions, 111 deletions
diff --git a/.github/workflows/codecoverage.yml b/.github/workflows/codecoverage.yml
index a8a3d658..97adfb8a 100644
--- a/.github/workflows/codecoverage.yml
+++ b/.github/workflows/codecoverage.yml
@@ -62,9 +62,10 @@ jobs:
working-directory: ${{ steps.identify.outputs.collection_path }}
- name: Upload coverage report to Codecov
- uses: codecov/codecov-action@v4
+ uses: codecov/codecov-action@v5
with:
directory: ${{ steps.identify.outputs.collection_path }}
fail_ci_if_error: false
+ token: ${{ secrets.CODECOV_TOKEN }}
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
diff --git a/changelogs/fragments/T7006-interface-integration-tests.yml b/changelogs/fragments/T7006-interface-integration-tests.yml
new file mode 100644
index 00000000..122dde76
--- /dev/null
+++ b/changelogs/fragments/T7006-interface-integration-tests.yml
@@ -0,0 +1,8 @@
+---
+minor_changes:
+ - adjust for loopback being removed in `vyos_l3_interfaces`
+ - fixed `vyos_interfaces` for 1.5+
+ - update codecov updloader to version 5
+
+known_issues:
+ - integration tests for `interfaces` are still failing occasionally in 1.4 and below
diff --git a/changelogs/fragments/T7008-l3-interface-integration-tests.yml b/changelogs/fragments/T7008-l3-interface-integration-tests.yml
index cfe7d2f0..bbdcbde1 100644
--- a/changelogs/fragments/T7008-l3-interface-integration-tests.yml
+++ b/changelogs/fragments/T7008-l3-interface-integration-tests.yml
@@ -1,7 +1,12 @@
---
minor_changes:
- fix integration tests for `l3_interfaces`
- - fix integration tests for `interfaces` (still failing occasionally in 1.3 and below)
+ - fix integration tests for `interfaces`
+ - fix replace in interfaces to remove vif completely if not present in new config
+ - fix override in interfaces to remove vif completely if not present in new config
+ - fix delete in interfaces to remove vif completely if in affected interface
+ - added unit test for unknown interface type
known_issues:
- - integration tests for `interfaces` are still failing occasionally in 1.3 and below
+ - integration tests for `interfaces` fail for 1.3 and below due to
+ mtu setting issue when a `vif` is defined.
diff --git a/docs/vyos.vyos.vyos_interfaces_module.rst b/docs/vyos.vyos.vyos_interfaces_module.rst
index 24156270..14f7a473 100644
--- a/docs/vyos.vyos.vyos_interfaces_module.rst
+++ b/docs/vyos.vyos.vyos_interfaces_module.rst
@@ -523,7 +523,7 @@ Examples
# - delete interfaces ethernet eth2 speed
# - delete interfaces ethernet eth2 duplex
# - delete interfaces ethernet eth2 mtu
- # - delete interfaces ethernet eth2 vif 200 description
+ # - delete interfaces ethernet eth2 vif 200
# - set interfaces ethernet eth2 description 'Replaced by Ansible'
# - delete interfaces ethernet eth3 speed
# - delete interfaces ethernet eth3 duplex
@@ -545,9 +545,6 @@ Examples
# - description: Replaced by Ansible
# enabled: true
# name: eth2
- # vifs:
- # - enabled: true
- # vlan_id: '200'
# - description: Replaced by Ansible
# enabled: true
# name: eth1
@@ -575,7 +572,6 @@ Examples
# set interfaces ethernet eth2 description 'Replaced by Ansible'
# set interfaces ethernet eth2 hw-id '08:00:27:c2:98:23'
# set interfaces ethernet eth2 smp-affinity 'auto'
- # set interfaces ethernet eth2 vif 200
# set interfaces ethernet eth3 description 'Replaced by Ansible'
# set interfaces ethernet eth3 hw-id '08:00:27:43:70:8c'
# set interfaces loopback lo
@@ -660,8 +656,7 @@ Examples
# - delete interfaces vti vti1 mtu
# - delete interfaces ethernet eth1 description
# - delete interfaces ethernet eth1 mtu
- # - delete interfaces ethernet eth1 vif 100 description
- # - delete interfaces ethernet eth1 vif 100 disable
+ # - delete interfaces ethernet eth1 vif 100
# - delete interfaces ethernet eth0 mtu
# - set interfaces ethernet eth0 description 'Outbound Interface For The Appliance'
# - delete interfaces ethernet eth2 description
@@ -685,9 +680,6 @@ Examples
# speed: auto
# - enabled: true
# name: eth1
- # vifs:
- # - enabled: true
- # vlan_id: '100'
# - description: Outbound Interface For The Appliance
# duplex: auto
# enabled: true
@@ -706,7 +698,6 @@ Examples
# set interfaces ethernet eth0 speed 'auto'
# set interfaces ethernet eth1 hw-id '08:00:27:ea:0f:b9'
# set interfaces ethernet eth1 smp-affinity 'auto'
- # set interfaces ethernet eth1 vif 100
# set interfaces ethernet eth2 duplex 'auto'
# set interfaces ethernet eth2 hw-id '08:00:27:c2:98:23'
# set interfaces ethernet eth2 smp-affinity 'auto'
diff --git a/plugins/module_utils/network/vyos/config/interfaces/interfaces.py b/plugins/module_utils/network/vyos/config/interfaces/interfaces.py
index 62e4f922..a9d9307c 100644
--- a/plugins/module_utils/network/vyos/config/interfaces/interfaces.py
+++ b/plugins/module_utils/network/vyos/config/interfaces/interfaces.py
@@ -275,7 +275,9 @@ class Interfaces(ConfigBase):
commands.append(
self._compute_commands(key=key, interface=want_copy["name"], remove=True),
)
- if have_copy["enabled"] is False and not ('enabled' in want_copy and want_copy["enabled"] is False):
+ if have_copy["enabled"] is False and not (
+ "enabled" in want_copy and want_copy["enabled"] is False
+ ):
commands.append(
self._compute_commands(key="enabled", value=True, interface=want_copy["name"]),
)
@@ -284,43 +286,48 @@ class Interfaces(ConfigBase):
for have_vif in have_vifs:
want_vif = search_obj_in_list(have_vif["vlan_id"], want_vifs, key="vlan_id")
if not want_vif:
- want_vif = {
- "vlan_id": have_vif["vlan_id"],
- "enabled": True,
- }
-
- for key in dict_delete(have_vif, want_vif).keys():
- if key == "enabled":
- continue
commands.append(
self._compute_commands(
- key=key,
+ key="",
interface=want_copy["name"],
- vif=want_vif["vlan_id"],
+ vif=have_vif["vlan_id"],
remove=True,
),
)
- if have_vif["enabled"] is False:
+ continue
+
+ for key in dict_delete(have_vif, want_vif).keys():
+ if key == "enabled":
+ continue
commands.append(
self._compute_commands(
- key="enabled",
- value=True,
+ key=key,
interface=want_copy["name"],
vif=want_vif["vlan_id"],
+ remove=True,
),
)
return commands
def _compute_commands(self, interface, key, vif=None, value=None, remove=False):
- intf_context = "interfaces {0} {1}".format(get_interface_type(interface), interface)
+ interface_type = get_interface_type(interface)
+ if not interface_type:
+ self._module.fail_json(
+ msg="interface {0} is not a valid interface type".format(interface),
+ )
+ intf_context = "interfaces {0} {1}".format(interface_type, interface)
set_cmd = "set {0}".format(intf_context)
del_cmd = "delete {0}".format(intf_context)
if vif:
set_cmd = set_cmd + (" vif {0}".format(vif))
del_cmd = del_cmd + (" vif {0}".format(vif))
-
- if key == "enabled":
+ if key == "" or key is None:
+ if not remove:
+ command = "{0}".format(set_cmd)
+ else:
+ command = "{0}".format(del_cmd)
+ elif key == "enabled":
if not value:
command = "{0} disable".format(set_cmd)
else:
diff --git a/plugins/modules/vyos_interfaces.py b/plugins/modules/vyos_interfaces.py
index b679a226..6125b4b9 100644
--- a/plugins/modules/vyos_interfaces.py
+++ b/plugins/modules/vyos_interfaces.py
@@ -353,7 +353,7 @@ EXAMPLES = """
# - delete interfaces ethernet eth2 speed
# - delete interfaces ethernet eth2 duplex
# - delete interfaces ethernet eth2 mtu
-# - delete interfaces ethernet eth2 vif 200 description
+# - delete interfaces ethernet eth2 vif 200
# - set interfaces ethernet eth2 description 'Replaced by Ansible'
# - delete interfaces ethernet eth3 speed
# - delete interfaces ethernet eth3 duplex
@@ -375,9 +375,6 @@ EXAMPLES = """
# - description: Replaced by Ansible
# enabled: true
# name: eth2
-# vifs:
-# - enabled: true
-# vlan_id: '200'
# - description: Replaced by Ansible
# enabled: true
# name: eth1
@@ -405,7 +402,6 @@ EXAMPLES = """
# set interfaces ethernet eth2 description 'Replaced by Ansible'
# set interfaces ethernet eth2 hw-id '08:00:27:c2:98:23'
# set interfaces ethernet eth2 smp-affinity 'auto'
-# set interfaces ethernet eth2 vif 200
# set interfaces ethernet eth3 description 'Replaced by Ansible'
# set interfaces ethernet eth3 hw-id '08:00:27:43:70:8c'
# set interfaces loopback lo
@@ -490,8 +486,7 @@ EXAMPLES = """
# - delete interfaces vti vti1 mtu
# - delete interfaces ethernet eth1 description
# - delete interfaces ethernet eth1 mtu
-# - delete interfaces ethernet eth1 vif 100 description
-# - delete interfaces ethernet eth1 vif 100 disable
+# - delete interfaces ethernet eth1 vif 100
# - delete interfaces ethernet eth0 mtu
# - set interfaces ethernet eth0 description 'Outbound Interface For The Appliance'
# - delete interfaces ethernet eth2 description
@@ -515,9 +510,6 @@ EXAMPLES = """
# speed: auto
# - enabled: true
# name: eth1
-# vifs:
-# - enabled: true
-# vlan_id: '100'
# - description: Outbound Interface For The Appliance
# duplex: auto
# enabled: true
@@ -536,7 +528,6 @@ EXAMPLES = """
# set interfaces ethernet eth0 speed 'auto'
# set interfaces ethernet eth1 hw-id '08:00:27:ea:0f:b9'
# set interfaces ethernet eth1 smp-affinity 'auto'
-# set interfaces ethernet eth1 vif 100
# set interfaces ethernet eth2 duplex 'auto'
# set interfaces ethernet eth2 hw-id '08:00:27:c2:98:23'
# set interfaces ethernet eth2 smp-affinity 'auto'
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)