summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorA. Wilcox <AWilcox@Wilcox-Tech.com>2020-12-08 19:02:46 -0600
committerA. Wilcox <AWilcox@Wilcox-Tech.com>2020-12-08 19:02:46 -0600
commitd3d2efbf50a84a83c20a0bedc2b731b4c455c565 (patch)
treeb52b792903ff283e5d7c0318b066670fb37d4617
parent2be0c8d53e4ef74e37441189f7aaa8374f8d0dfd (diff)
downloadnetconfapk-d3d2efbf50a84a83c20a0bedc2b731b4c455c565.tar.gz
netconfapk-d3d2efbf50a84a83c20a0bedc2b731b4c455c565.tar.bz2
netconfapk-d3d2efbf50a84a83c20a0bedc2b731b4c455c565.tar.xz
netconfapk-d3d2efbf50a84a83c20a0bedc2b731b4c455c565.zip
NMSA: Add rollback() and transaction() methods
-rw-r--r--doc/network.rst13
-rw-r--r--ncserver/module/nms_ifupdownng.py24
2 files changed, 37 insertions, 0 deletions
diff --git a/doc/network.rst b/doc/network.rst
index 7291249..eef0e68 100644
--- a/doc/network.rst
+++ b/doc/network.rst
@@ -174,6 +174,19 @@ Saves all queued operations to configuration storage and configures
network interfaces.
+``rollback()``
+~~~~~~~~~~~~~~
+
+Erases all queued operations and restores the configuration from when
+the transaction began.
+
+
+``transaction()``
+~~~~~~~~~~~~~~~~~
+
+A Python context manager designed to be used with the ``with`` keyword.
+
+
Parameters
----------
diff --git a/ncserver/module/nms_ifupdownng.py b/ncserver/module/nms_ifupdownng.py
index 8c92717..0c03fd9 100644
--- a/ncserver/module/nms_ifupdownng.py
+++ b/ncserver/module/nms_ifupdownng.py
@@ -10,6 +10,8 @@ with this source distribution for more information.
SPDX-License-Identifier: NCSA
"""
+from contextlib import contextmanager
+
import logging
import pathlib
import socket
@@ -573,6 +575,28 @@ def commit():
_TRANSACTION = False
+def rollback():
+ """Roll back outstanding operations."""
+ global _TRANSACTION # pylint: disable=W0603
+
+ _load_config()
+ _load_sysctl_cfg()
+
+ _TRANSACTION = False
+
+
+@contextmanager
+def transaction():
+ begin_transaction()
+ try:
+ yield None
+ except:
+ rollback()
+ raise
+ else:
+ commit()
+
+
def get_param(iface: str, parameter: str):
"""Retrieve the parameter for the specified interface."""
_load_config()