From 73e3e222577c38384f61380eb2af6a876a834f34 Mon Sep 17 00:00:00 2001 From: Abdul Karim Date: Tue, 5 Mar 2024 00:01:29 +0000 Subject: [PATCH] ncm-network: provide backward compatibility for vlan interface config for nmstate improvement made to nmstate to provide backward compatibility with network.pm for configuring vlan interface. --- ncm-network/src/main/perl/nmstate.pm | 29 ++++++++++++++++--- ncm-network/src/test/perl/nmstate_advance.t | 28 ++++++++++++++++++ .../src/test/resources/nmstate_advance.pan | 7 +++++ 3 files changed, 60 insertions(+), 4 deletions(-) diff --git a/ncm-network/src/main/perl/nmstate.pm b/ncm-network/src/main/perl/nmstate.pm index 0bcbd3379a..f1a7e51ef7 100644 --- a/ncm-network/src/main/perl/nmstate.pm +++ b/ncm-network/src/main/perl/nmstate.pm @@ -296,6 +296,26 @@ sub generate_vip_config { return $iface_cfg; } +# find vlan id from either the name or device. +# i.e eth0.123 will return 123. by checking iface name and device +# returns vlan id. +sub get_vlanid { + my ($self, $iface, $device) = @_; + my $vlanid = $iface; + # a vlan interface can defined in two ways + # interface/name.vlanid/ + # or interface/name/device=device.vlanid + # replace everything up-to and including . to get vlan id of the interface. + # favors ifacename.vlanid, then device.vlanid + $vlanid =~ s/^[^.]*.//; + # if vlanid is empty here, lets check if device has vlan id. + if ((! $vlanid) && ($device)) { + $vlanid = $device; + $vlanid =~ s/^[^.]*.//; + } + return $vlanid; +} + # generates the hashrefs for interface in yaml file format needed by nmstate. # bulk of the config settings needed by the nmstate yml is done here. # to add additional options, it should be constructed here. @@ -330,10 +350,11 @@ sub generate_nmstate_config $ifaceconfig->{state} = "up"; } } elsif ($is_vlan_eth) { - my $vlan_id = $name; - # replace everything up-to and including . to get vlan id of the interface. - # TODO: instead of this, should perhaps add valid-id in schema? but may not be backward compatible for existing host entreis, aqdb will need updating? - $vlan_id =~ s/^[^.]*.//;; + my $vlan_id = $self->get_vlanid($name, $iface->{device}); + # if vlan_id is empty, error + if (! $vlan_id) { + $self->error("Could not find vlan id for vlan device $name"); + } $ifaceconfig->{type} = "vlan"; $ifaceconfig->{vlan}->{'base-iface'} = $iface->{physdev}; $ifaceconfig->{vlan}->{'id'} = $vlan_id; diff --git a/ncm-network/src/test/perl/nmstate_advance.t b/ncm-network/src/test/perl/nmstate_advance.t index 5705775d28..e4dc8a6e6a 100644 --- a/ncm-network/src/test/perl/nmstate_advance.t +++ b/ncm-network/src/test/perl/nmstate_advance.t @@ -86,6 +86,32 @@ routes: next-hop-interface: eth0.123 EOF +Readonly my $VLAN0_YML => < <