Upgrade to 1.1.0

Signed-off-by: Gris Ge <cnfourt@gmail.com>
This commit is contained in:
Gris Ge 2021-07-27 12:57:56 +08:00
parent 3e4e643581
commit de9c1d06d9
7 changed files with 346 additions and 7 deletions

2
.gitignore vendored
View File

@ -61,3 +61,5 @@
/nmstate-1.0.2.tar.gz
/nmstate-1.0.3.tar.gz
/nmstate-1.0.3.tar.gz.asc
/nmstate-1.1.0.tar.gz
/nmstate-1.1.0.tar.gz.asc

View File

@ -0,0 +1,53 @@
From 99c7f643bab33a26c317e1b72ca3b8490cb1ea60 Mon Sep 17 00:00:00 2001
From: Fernando Fernandez Mancera <ffmancera@riseup.net>
Date: Fri, 16 Jul 2021 08:57:27 +0200
Subject: [PATCH 1/4] nmstatectl: fix long arguments support
The support for long arguments is broken. This patch is fixing it and
solving the following errors:
```
[root@d0b4a6a0f7a5 nmstate-workspace]# nmstatectl show --running-config
usage: nmstatectl [-h] [--version]
{commit,edit,rollback,set,apply,show,version,gc} ...
nmstatectl: error: unrecognized arguments: --running-config
[root@d0b4a6a0f7a5 nmstate-workspace]# nmstatectl show --show-secrets
usage: nmstatectl [-h] [--version]
{commit,edit,rollback,set,apply,show,version,gc} ...
nmstatectl: error: unrecognized arguments: --show-secrets
```
Integration test case added.
Signed-off-by: Fernando Fernandez Mancera <ffmancera@riseup.net>
Signed-off-by: Gris Ge <fge@redhat.com>
---
nmstatectl/nmstatectl.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/nmstatectl/nmstatectl.py b/nmstatectl/nmstatectl.py
index a9f4cb6..6f83069 100644
--- a/nmstatectl/nmstatectl.py
+++ b/nmstatectl/nmstatectl.py
@@ -223,14 +223,16 @@ def setup_subcommand_show(subparsers):
dest="yaml",
)
parser_show.add_argument(
- "-r, --running-config",
+ "-r",
+ "--running-config",
help="Show running configurations",
default=False,
action="store_true",
dest="running_config",
)
parser_show.add_argument(
- "-s, --show-secrets",
+ "-s",
+ "--show-secrets",
help="Show secrets also",
default=False,
action="store_true",
--
2.32.0

View File

@ -0,0 +1,105 @@
From b1cb57d1dc4bba6592ba5cfc5c810a2ad19ac941 Mon Sep 17 00:00:00 2001
From: Gris Ge <fge@redhat.com>
Date: Thu, 22 Jul 2021 18:40:50 +0800
Subject: [PATCH 2/4] nm ethtool: Preserve existing ethtool settings when
undesired
When user does not define ethtool settings in desire state,
we should preserve existing ethtool setting.
Integration test case included.
Signed-off-by: Gris Ge <fge@redhat.com>
Signed-off-by: Fernando Fernandez Mancera <ffmancera@riseup.net>
---
libnmstate/nm/connection.py | 18 +++---------------
libnmstate/nm/ethtool.py | 26 +++++++++++++++++++++++++-
2 files changed, 28 insertions(+), 16 deletions(-)
diff --git a/libnmstate/nm/connection.py b/libnmstate/nm/connection.py
index 5d60f6d..5a79c6f 100644
--- a/libnmstate/nm/connection.py
+++ b/libnmstate/nm/connection.py
@@ -22,8 +22,6 @@
import uuid
from libnmstate.error import NmstatePluginError
-from libnmstate.ifaces import IfaceEthtool
-from libnmstate.schema import Ethtool
from libnmstate.schema import Interface
from libnmstate.schema import InterfaceType
from libnmstate.schema import LinuxBridge as LB
@@ -240,19 +238,9 @@ def create_new_nm_simple_conn(iface, nm_profile):
if iface.ieee_802_1x_conf:
settings.append(create_802_1x_setting(iface.ieee_802_1x_conf))
- if Ethtool.CONFIG_SUBTREE in iface.original_desire_dict:
- iface_ethtool = IfaceEthtool(
- iface.original_desire_dict[Ethtool.CONFIG_SUBTREE]
- )
- iface_ethtool.canonicalize(
- iface.original_desire_dict[Ethtool.CONFIG_SUBTREE]
- )
- setting = create_ethtool_setting(
- iface_ethtool,
- nm_profile,
- )
- if setting:
- settings.append(setting)
+ ethtool_setting = create_ethtool_setting(iface, nm_profile)
+ if ethtool_setting:
+ settings.append(ethtool_setting)
nm_simple_conn = NM.SimpleConnection.new()
for setting in settings:
diff --git a/libnmstate/nm/ethtool.py b/libnmstate/nm/ethtool.py
index 466f4f9..3cad1bf 100644
--- a/libnmstate/nm/ethtool.py
+++ b/libnmstate/nm/ethtool.py
@@ -22,6 +22,7 @@ import logging
from .common import NM
from .common import GLib
+from libnmstate.ifaces import IfaceEthtool
from libnmstate.schema import Ethtool
@@ -59,7 +60,7 @@ _NM_COALESCE_OPT_NAME_MAP = {
}
-def create_ethtool_setting(iface_ethtool, base_con_profile):
+def _create_ethtool_setting(iface_ethtool, base_con_profile):
nm_setting = None
if base_con_profile:
@@ -159,3 +160,26 @@ def nm_set_pause(nm_setting, autoneg, rx, tx):
tx_value,
)
# pylint: enable=no-member
+
+
+def create_ethtool_setting(iface, base_con_profile):
+ if Ethtool.CONFIG_SUBTREE in iface.original_desire_dict:
+ iface_ethtool = IfaceEthtool(
+ iface.original_desire_dict[Ethtool.CONFIG_SUBTREE]
+ )
+ iface_ethtool.canonicalize(
+ iface.original_desire_dict[Ethtool.CONFIG_SUBTREE]
+ )
+ return _create_ethtool_setting(
+ iface_ethtool,
+ base_con_profile,
+ )
+ else:
+ # Preserve existing setting but not create new
+ if base_con_profile:
+ ethtool_setting = base_con_profile.get_setting_by_name(
+ NM.SETTING_ETHTOOL_SETTING_NAME
+ )
+ if ethtool_setting:
+ return ethtool_setting.duplicate()
+ return None
--
2.32.0

View File

@ -0,0 +1,87 @@
From f4d190653c55d399b32afc956b2b4a1ff8d20101 Mon Sep 17 00:00:00 2001
From: Fernando Fernandez Mancera <ffmancera@riseup.net>
Date: Mon, 26 Jul 2021 09:58:23 +0200
Subject: [PATCH 3/4] ovs: fix state=ignore for ovs port when removing them
When removing an ovs port while the interface is marked as ignored, the
interface should not being removed from the ovs bridge as the user
specidied it should be ignored.
Example:
```
interfaces:
- name: dummy0
type: dummy
state: ignore
- name: ovsbr0
type: ovs-bridge
state: up
bridge:
port:
- name: ovs0
```
Integration test case added.
Signed-off-by: Fernando Fernandez Mancera <ffmancera@riseup.net>
Signed-off-by: Gris Ge <fge@redhat.com>
---
libnmstate/nm/profiles.py | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/libnmstate/nm/profiles.py b/libnmstate/nm/profiles.py
index beda5c7..3b0b6be 100644
--- a/libnmstate/nm/profiles.py
+++ b/libnmstate/nm/profiles.py
@@ -23,6 +23,8 @@
import logging
from operator import attrgetter
+from libnmstate.schema import Interface
+from libnmstate.schema import InterfaceState
from libnmstate.schema import InterfaceType
from .common import NM
@@ -359,7 +361,7 @@ def _delete_orphan_nm_ovs_port_profiles(
continue
# When OVS port has no child, delete it
ovs_bridge_iface = ovs_bridge_profile.iface
- if not _nm_ovs_port_has_child(
+ if not _nm_ovs_port_has_child_or_is_ignored(
nm_profile, ovs_bridge_iface, net_state
):
ProfileDelete(
@@ -404,7 +406,9 @@ def _use_uuid_as_controller_and_parent(nm_profiles):
nm_profile.update_parent(uuid)
-def _nm_ovs_port_has_child(nm_profile, ovs_bridge_iface, net_state):
+def _nm_ovs_port_has_child_or_is_ignored(
+ nm_profile, ovs_bridge_iface, net_state
+):
ovs_port_uuid = nm_profile.get_uuid()
ovs_port_name = nm_profile.get_interface_name()
for ovs_iface_name in ovs_bridge_iface.port:
@@ -415,4 +419,18 @@ def _nm_ovs_port_has_child(nm_profile, ovs_bridge_iface, net_state):
and ovs_iface.controller_type == InterfaceType.OVS_PORT
):
return True
+ # Gather the ovs bridge interface from the current state in order to check
+ # if any port is ignored in the original desired state.
+ current_ovs_bridge = net_state.ifaces.get_cur_iface(
+ ovs_bridge_iface.name, InterfaceType.OVS_BRIDGE
+ )
+ if current_ovs_bridge:
+ for port_name in current_ovs_bridge.port:
+ port_iface = net_state.ifaces.all_kernel_ifaces.get(port_name)
+ if (
+ port_iface
+ and port_iface.original_desire_dict.get(Interface.STATE)
+ == InterfaceState.IGNORE
+ ):
+ return True
return False
--
2.32.0

View File

@ -0,0 +1,86 @@
From 369ed3210ecedfa1deda88a6eb7cacc19a47f89d Mon Sep 17 00:00:00 2001
From: Fernando Fernandez Mancera <ffmancera@riseup.net>
Date: Mon, 26 Jul 2021 16:13:15 +0200
Subject: [PATCH 4/4] nispor: fix show of empty next_hop_address and
destination
The correct way of representing an empty next_hop_address is using
"0.0.0.0" for IPv4 and "::" for IPv6. This configuration is valid
because an user should be able to specify the following routes:
```
---
routes:
config:
- destination: 0.0.0.0/0
next-hop-address: 0.0.0.0
next-hop-interface: dummy
- destination: ::/0
next-hop-address: "::"
next-hop-interface: dummy
```
That means each of the hosts within the range of the route are
considered to be directly connected through that interface.
For example, using iproute2 the user should introduce the following
command:
`ip route 0.0.0.0 0.0.0.0 dummy`
Integration test case added.
Ref: https://bugzilla.redhat.com/1985879
Signed-off-by: Fernando Fernandez Mancera <ffmancera@riseup.net>
Signed-off-by: Gris Ge <fge@redhat.com>
---
libnmstate/nispor/route.py | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/libnmstate/nispor/route.py b/libnmstate/nispor/route.py
index 510ddc3..9852ba5 100644
--- a/libnmstate/nispor/route.py
+++ b/libnmstate/nispor/route.py
@@ -23,6 +23,9 @@ from libnmstate.schema import Route
IPV4_DEFAULT_GATEWAY_DESTINATION = "0.0.0.0/0"
IPV6_DEFAULT_GATEWAY_DESTINATION = "::/0"
+IPV4_EMPTY_NEXT_HOP_ADDRESS = "0.0.0.0"
+IPV6_EMPTY_NEXT_HOP_ADDRESS = "::"
+
LOCAL_ROUTE_TABLE = 255
@@ -50,21 +53,23 @@ def nispor_route_state_to_nmstate_static(np_routes):
def _nispor_route_to_nmstate(np_rt):
if np_rt.dst:
destination = np_rt.dst
- elif np_rt.gateway:
+ else:
destination = (
IPV6_DEFAULT_GATEWAY_DESTINATION
if np_rt.address_family == "ipv6"
else IPV4_DEFAULT_GATEWAY_DESTINATION
)
- else:
- destination = ""
if np_rt.via:
next_hop = np_rt.via
elif np_rt.gateway:
next_hop = np_rt.gateway
else:
- next_hop = ""
+ next_hop = (
+ IPV6_EMPTY_NEXT_HOP_ADDRESS
+ if np_rt.address_family == "ipv6"
+ else IPV4_EMPTY_NEXT_HOP_ADDRESS
+ )
return {
Route.TABLE_ID: np_rt.table,
--
2.32.0

View File

@ -3,14 +3,18 @@
%define libname libnmstate
Name: nmstate
Version: 1.0.3
Release: 4%{?dist}
Version: 1.1.0
Release: 1%{?dist}
Summary: Declarative network manager API
License: LGPLv2+
URL: https://github.com/%{srcname}/%{srcname}
Source0: %{url}/releases/download/v%{version}/%{srcname}-%{version}.tar.gz
Source1: %{url}/releases/download/v%{version}/%{srcname}-%{version}.tar.gz.asc
Source2: nmstate.gpg
Patch1: 0001-nmstatectl-fix-long-arguments-support.patch
Patch2: 0002-nm-ethtool-Preserve-existing-ethtool-settings-when-u.patch
Patch3: 0003-ovs-fix-state-ignore-for-ovs-port-when-removing-them.patch
Patch4: 0004-nispor-fix-show-of-empty-next_hop_address-and-destin.patch
BuildArch: noarch
BuildRequires: python3-devel
BuildRequires: python3-setuptools
@ -73,16 +77,15 @@ gpgv2 --keyring ./gpgkey-mantainers.gpg %{SOURCE1} %{SOURCE0}
%install
%py3_install
mkdir -p %{buildroot}%{_unitdir}
install -p -m 644 %{buildroot}%{python3_sitelib}/nmstatectl/nmstate-varlink.service \
%{buildroot}%{_unitdir}/nmstate-varlink.service
%files
%doc README.md
%doc examples/
%{_mandir}/man8/nmstatectl.8*
%{_mandir}/man8/nmstate-autoconf.8*
%{python3_sitelib}/nmstatectl
%{_bindir}/nmstatectl
%{_unitdir}/nmstate-varlink.service
%{_bindir}/nmstate-autoconf
%files -n python3-%{libname}
%license LICENSE
@ -96,6 +99,9 @@ install -p -m 644 %{buildroot}%{python3_sitelib}/nmstatectl/nmstate-varlink.serv
%{python3_sitelib}/%{libname}/plugins/__pycache__/nmstate_plugin_ovsdb*
%changelog
* Tue Jul 27 2021 Gris Ge <fge@redhat.com> - 1.1.0-1
- Upgrade to 1.1.0
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.3-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild

View File

@ -1,3 +1,3 @@
SHA512 (nmstate-1.0.3.tar.gz) = 2302979f4a0c029c778cc93e586a0b81e93fdc3f605dbc212034222899b0642863bd7c0f39b7021cd2d7274420c2e6cd4975719110a0330a867e923d8d8831bb
SHA512 (nmstate-1.0.3.tar.gz.asc) = 5d9936b1ecf02e67f232379e0cbfe9741836d3179f8ef110e149d9e53436a5c475898ea17427538c4da011107c9d46287c968fb7540078714caf97173a888da8
SHA512 (nmstate-1.1.0.tar.gz) = f99e4fdcc0317d0b3d88e8281f5f222adcce4b8ce2d6c2f48858c934219d61701af75e416e04fc03416ce9c7787ec989673c20208b9efe0fe7bf3346a7f48373
SHA512 (nmstate-1.1.0.tar.gz.asc) = 9bd8075b08ccadefb3920a78ab569e36991bce34e9c527913da35a307e40a74b162d91a9517827c0043394ec2fa5604f2d81c361a763aaf9c11c133999376a3b
SHA512 (nmstate.gpg) = af6af2024ea46b5c87c6c71d4be278ce4eed58c1783385619987fe8e254eb599f9b218897e7db67050b0e9f7101b206561f63218fda18a0d95103a04682c8309