From e6af1c615676eaadec7d002968741c52f9fcb89d Mon Sep 17 00:00:00 2001 From: Yoni Bettan Date: Tue, 2 Jun 2026 11:34:55 +0300 Subject: [PATCH] Migrating the Cumulus provider from NCLU to NVUE. Cumulus Linux 5.x replaced NCLU (`net add/del`) with NVUE (`nv set/unset`) as the primary CLI. The `nclu` Ansible module used by the existing provider is deprecated and fails with deserialization errors on ansible-core 2.20+. This commit updates all Cumulus provider task files to use NVUE commands via the `raw` module: - create_vlan: `nv set bridge domain br_default vlan` - delete_vlan: `nv unset bridge domain br_default vlan` - conf_access_port: `nv set interface ... bridge domain br_default access` - conf_trunk_port: `nv set interface ... bridge domain br_default` - delete_port: `nv unset interface ... bridge domain` + link state down Additionally, `add_trunk_vlan` and `delete_trunk_vlan` which were previously unimplemented ("not implimented") are now functional using NVUE. Tested against Cumulus VX 5.3.0 in a Containerlab environment. Signed-off-by: Yoni Bettan --- .../providers/cumulus/add_trunk_vlan.yaml | 6 ++-- .../providers/cumulus/conf_access_port.yaml | 17 +++-------- .../providers/cumulus/conf_trunk_port.yaml | 18 +++--------- .../providers/cumulus/create_vlan.yaml | 8 +++--- .../providers/cumulus/delete_port.yaml | 28 ++++--------------- .../providers/cumulus/delete_trunk_vlan.yaml | 6 ++-- .../providers/cumulus/delete_vlan.yaml | 8 +++--- 7 files changed, 29 insertions(+), 62 deletions(-) diff --git a/etc/ansible/roles/network-runner/providers/cumulus/add_trunk_vlan.yaml b/etc/ansible/roles/network-runner/providers/cumulus/add_trunk_vlan.yaml index 42a9e8c..8b64385 100644 --- a/etc/ansible/roles/network-runner/providers/cumulus/add_trunk_vlan.yaml +++ b/etc/ansible/roles/network-runner/providers/cumulus/add_trunk_vlan.yaml @@ -1,3 +1,5 @@ --- -- fail: - msg: Add Trunk VLAN is not implimented for cumulus +- name: "cumulus: add vlan to trunk port using nvue" + raw: | + nv set interface {{ port_name }} bridge domain br_default vlan {{ _vlan_id }} + nv config apply -y diff --git a/etc/ansible/roles/network-runner/providers/cumulus/conf_access_port.yaml b/etc/ansible/roles/network-runner/providers/cumulus/conf_access_port.yaml index 50dca7d..301727d 100644 --- a/etc/ansible/roles/network-runner/providers/cumulus/conf_access_port.yaml +++ b/etc/ansible/roles/network-runner/providers/cumulus/conf_access_port.yaml @@ -1,14 +1,5 @@ --- -- name: "cumulus: configure access port using nclu" - block: - - name: "cumulus: reset interface to defaults" - nclu: - commands: "del interface {{ port_name }}" - commit: true - - - name: "cumulus: build port configuration" - nclu: - commands: - - "add interface {{ port_name }} bridge access {{ _vlan_id }}" - - "del interface {{ port_name }} link down" - commit: true +- name: "cumulus: configure access port using nvue" + raw: | + nv set interface {{ port_name }} bridge domain br_default access {{ _vlan_id }} + nv config apply -y diff --git a/etc/ansible/roles/network-runner/providers/cumulus/conf_trunk_port.yaml b/etc/ansible/roles/network-runner/providers/cumulus/conf_trunk_port.yaml index ea6ba7e..72381a8 100644 --- a/etc/ansible/roles/network-runner/providers/cumulus/conf_trunk_port.yaml +++ b/etc/ansible/roles/network-runner/providers/cumulus/conf_trunk_port.yaml @@ -1,15 +1,5 @@ --- -- name: "cumulus: configure trunk port using nclu" - block: - - name: "cumulus: reset interface to defaults" - nclu: - commands: "del interface {{ port_name }}" - commit: true - - - name: "cumulus: build port configuration" - nclu: - commands: - - "add interface {{ port_name }}" - - "add bridge bridge ports {{ port_name }}" - - "del interface {{ port_name }} link down" - commit: true +- name: "cumulus: configure trunk port using nvue" + raw: | + nv set interface {{ port_name }} bridge domain br_default + nv config apply -y diff --git a/etc/ansible/roles/network-runner/providers/cumulus/create_vlan.yaml b/etc/ansible/roles/network-runner/providers/cumulus/create_vlan.yaml index 7f7ef55..68376c3 100644 --- a/etc/ansible/roles/network-runner/providers/cumulus/create_vlan.yaml +++ b/etc/ansible/roles/network-runner/providers/cumulus/create_vlan.yaml @@ -1,5 +1,5 @@ --- -- name: "cumulus: create vlan using nclu" - nclu: - commands: "add vlan {{ _vlan_id }}" - commit: true +- name: "cumulus: create vlan using nvue" + raw: | + nv set bridge domain br_default vlan {{ _vlan_id }} + nv config apply -y diff --git a/etc/ansible/roles/network-runner/providers/cumulus/delete_port.yaml b/etc/ansible/roles/network-runner/providers/cumulus/delete_port.yaml index 0dc1dcf..607323a 100644 --- a/etc/ansible/roles/network-runner/providers/cumulus/delete_port.yaml +++ b/etc/ansible/roles/network-runner/providers/cumulus/delete_port.yaml @@ -1,24 +1,6 @@ --- -- name: "cumulus: get interfaces" - nclu: - commands: "show interface {{ port_name }} json" - register: output - -- name: "cumulus: set port facts" - set_fact: - interface: "{{ output.msg }}" - -- name: "cumulus: verify port exists" - fail: - msg: "port {{ port_name }} does not exist on this device" - when: interface.mode == 'NotConfigured' - -- name: "cumulus: remove port configuration" - nclu: - commands: "del interface {{ port_name }}" - commit: true - -- name: "cumulus: administratively disable the port" - nclu: - commands: "add interface {{ port_name }} link down" - commit: true +- name: "cumulus: remove port configuration using nvue" + raw: | + nv unset interface {{ port_name }} bridge domain + nv set interface {{ port_name }} link state down + nv config apply -y diff --git a/etc/ansible/roles/network-runner/providers/cumulus/delete_trunk_vlan.yaml b/etc/ansible/roles/network-runner/providers/cumulus/delete_trunk_vlan.yaml index 4169470..7008eb3 100644 --- a/etc/ansible/roles/network-runner/providers/cumulus/delete_trunk_vlan.yaml +++ b/etc/ansible/roles/network-runner/providers/cumulus/delete_trunk_vlan.yaml @@ -1,3 +1,5 @@ --- -- fail: - msg: Delete Trunk VLAN is not implimented for cumulus +- name: "cumulus: delete vlan from trunk port using nvue" + raw: | + nv unset interface {{ port_name }} bridge domain br_default vlan {{ _vlan_id }} + nv config apply -y diff --git a/etc/ansible/roles/network-runner/providers/cumulus/delete_vlan.yaml b/etc/ansible/roles/network-runner/providers/cumulus/delete_vlan.yaml index 02f2b83..4d3e921 100644 --- a/etc/ansible/roles/network-runner/providers/cumulus/delete_vlan.yaml +++ b/etc/ansible/roles/network-runner/providers/cumulus/delete_vlan.yaml @@ -1,5 +1,5 @@ --- -- name: "cumulus: delete vlan using nclu" - nclu: - commands: 'del vlan {{ _vlan_id }}' - commit: true +- name: "cumulus: delete vlan using nvue" + raw: | + nv unset bridge domain br_default vlan {{ _vlan_id }} + nv config apply -y