Upgrade to 1.2.0
Signed-off-by: Fernando Fernandez Mancera <ffmancera@riseup.net>
This commit is contained in:
parent
b3234cb76f
commit
1337d1c0a5
2
.gitignore
vendored
2
.gitignore
vendored
@ -63,3 +63,5 @@
|
|||||||
/nmstate-1.0.3.tar.gz.asc
|
/nmstate-1.0.3.tar.gz.asc
|
||||||
/nmstate-1.1.0.tar.gz
|
/nmstate-1.1.0.tar.gz
|
||||||
/nmstate-1.1.0.tar.gz.asc
|
/nmstate-1.1.0.tar.gz.asc
|
||||||
|
/nmstate-1.2.0.tar.gz.asc
|
||||||
|
/nmstate-1.2.0.tar.gz
|
||||||
|
@ -1,53 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,105 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,87 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
@ -1,86 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
11
nmstate.spec
11
nmstate.spec
@ -3,18 +3,14 @@
|
|||||||
%define libname libnmstate
|
%define libname libnmstate
|
||||||
|
|
||||||
Name: nmstate
|
Name: nmstate
|
||||||
Version: 1.1.0
|
Version: 1.2.0
|
||||||
Release: 3%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: Declarative network manager API
|
Summary: Declarative network manager API
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
URL: https://github.com/%{srcname}/%{srcname}
|
URL: https://github.com/%{srcname}/%{srcname}
|
||||||
Source0: %{url}/releases/download/v%{version}/%{srcname}-%{version}.tar.gz
|
Source0: %{url}/releases/download/v%{version}/%{srcname}-%{version}.tar.gz
|
||||||
Source1: %{url}/releases/download/v%{version}/%{srcname}-%{version}.tar.gz.asc
|
Source1: %{url}/releases/download/v%{version}/%{srcname}-%{version}.tar.gz.asc
|
||||||
Source2: nmstate.gpg
|
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
|
BuildArch: noarch
|
||||||
BuildRequires: python3-devel
|
BuildRequires: python3-devel
|
||||||
BuildRequires: python3-setuptools
|
BuildRequires: python3-setuptools
|
||||||
@ -102,6 +98,9 @@ install -p -m 644 %{buildroot}%{python3_sitelib}/nmstatectl/nmstate-varlink.serv
|
|||||||
%{python3_sitelib}/%{libname}/plugins/__pycache__/nmstate_plugin_ovsdb*
|
%{python3_sitelib}/%{libname}/plugins/__pycache__/nmstate_plugin_ovsdb*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Feb 01 2022 Fernando Fernandez Mancera <ffmancera@riseup.net> - 1.2.0-1
|
||||||
|
- Upgrade to 1.2.0
|
||||||
|
|
||||||
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-3
|
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-3
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
||||||
|
|
||||||
|
4
sources
4
sources
@ -1,3 +1,3 @@
|
|||||||
SHA512 (nmstate-1.1.0.tar.gz) = f99e4fdcc0317d0b3d88e8281f5f222adcce4b8ce2d6c2f48858c934219d61701af75e416e04fc03416ce9c7787ec989673c20208b9efe0fe7bf3346a7f48373
|
|
||||||
SHA512 (nmstate-1.1.0.tar.gz.asc) = 9bd8075b08ccadefb3920a78ab569e36991bce34e9c527913da35a307e40a74b162d91a9517827c0043394ec2fa5604f2d81c361a763aaf9c11c133999376a3b
|
|
||||||
SHA512 (nmstate.gpg) = af6af2024ea46b5c87c6c71d4be278ce4eed58c1783385619987fe8e254eb599f9b218897e7db67050b0e9f7101b206561f63218fda18a0d95103a04682c8309
|
SHA512 (nmstate.gpg) = af6af2024ea46b5c87c6c71d4be278ce4eed58c1783385619987fe8e254eb599f9b218897e7db67050b0e9f7101b206561f63218fda18a0d95103a04682c8309
|
||||||
|
SHA512 (nmstate-1.2.0.tar.gz) = 1539b9574f74d0be393ca8b19ae3b1047beafca6ce5977a0c8bdeb5d57cdae8278d61e1c04c4ba922c11349ed14f1e7e86c1ea19c696f1487091a1ef672c5f9f
|
||||||
|
SHA512 (nmstate-1.2.0.tar.gz.asc) = 92451c41db3d92e625de60c5a463b03d4fb1c2b21ddcf0a2598a1822dbedf3b7b291042f021ae0d256ccf15a06c31fe636a1befcf6ee0f7159ffb0e240294a33
|
||||||
|
Loading…
Reference in New Issue
Block a user