summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViacheslav Hletenko <v.gletenko@vyos.io>2023-12-17 10:00:57 +0200
committerGitHub <noreply@github.com>2023-12-17 10:00:57 +0200
commitfc173e31672a980fe62c7ea2e0940f51d3f7e583 (patch)
treec19f98977b7f8febd01fd0145887a6187647ffca
parent59ea01766d0da03d649e7c0be3f1fe33d0612450 (diff)
parentf208e9b9acaec45468295e33b113bbef6c0309a1 (diff)
downloadvyos-1x-fc173e31672a980fe62c7ea2e0940f51d3f7e583.tar.gz
vyos-1x-fc173e31672a980fe62c7ea2e0940f51d3f7e583.zip
Merge pull request #2596 from sever-sever/T5249
T5249: Add rollback-soft feature
-rw-r--r--python/vyos/config_mgmt.py30
1 files changed, 25 insertions, 5 deletions
diff --git a/python/vyos/config_mgmt.py b/python/vyos/config_mgmt.py
index e57129ce5..ff078649d 100644
--- a/python/vyos/config_mgmt.py
+++ b/python/vyos/config_mgmt.py
@@ -30,6 +30,7 @@ from urllib.parse import urlsplit, urlunsplit
from vyos.config import Config
from vyos.configtree import ConfigTree, ConfigTreeError, show_diff
+from vyos.load_config import load, LoadConfigError
from vyos.defaults import directories
from vyos.version import get_full_version_data
from vyos.utils.io import ask_yes_no
@@ -262,6 +263,23 @@ Proceed ?'''
return msg, 0
+ def rollback_soft(self, rev: int):
+ """Rollback without reboot (rollback-soft)
+ """
+ msg = ''
+
+ if not self._check_revision_number(rev):
+ msg = f'Invalid revision number {rev}: must be 0 < rev < {self.num_revisions}'
+ return msg, 1
+
+ rollback_ct = self._get_config_tree_revision(rev)
+ try:
+ load(rollback_ct, switch='explicit')
+ except LoadConfigError as e:
+ raise ConfigMgmtError(e) from e
+
+ return msg, 0
+
def compare(self, saved: bool=False, commands: bool=False,
rev1: Optional[int]=None,
rev2: Optional[int]=None) -> Tuple[str,int]:
@@ -456,13 +474,10 @@ Proceed ?'''
# utility functions
#
- @staticmethod
- def _strip_version(s):
- return re.split(r'(^//)', s, maxsplit=1, flags=re.MULTILINE)[0]
def _get_saved_config_tree(self):
with open(config_file) as f:
- c = self._strip_version(f.read())
+ c = f.read()
return ConfigTree(c)
def _get_file_revision(self, rev: int):
@@ -474,7 +489,7 @@ Proceed ?'''
return r
def _get_config_tree_revision(self, rev: int):
- c = self._strip_version(self._get_file_revision(rev))
+ c = self._get_file_revision(rev)
return ConfigTree(c)
def _add_logrotate_conf(self):
@@ -697,6 +712,11 @@ def run():
rollback.add_argument('-y', dest='no_prompt', action='store_true',
help="Excute without prompt")
+ rollback_soft = subparsers.add_parser('rollback_soft',
+ help="Rollback to earlier config")
+ rollback_soft.add_argument('--rev', type=int,
+ help="Revision number for rollback")
+
compare = subparsers.add_parser('compare',
help="Compare config files")