diff options
| author | Viacheslav Hletenko <v.gletenko@vyos.io> | 2023-12-17 10:00:57 +0200 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-17 10:00:57 +0200 | 
| commit | fc173e31672a980fe62c7ea2e0940f51d3f7e583 (patch) | |
| tree | c19f98977b7f8febd01fd0145887a6187647ffca /python | |
| parent | 59ea01766d0da03d649e7c0be3f1fe33d0612450 (diff) | |
| parent | f208e9b9acaec45468295e33b113bbef6c0309a1 (diff) | |
| download | vyos-1x-fc173e31672a980fe62c7ea2e0940f51d3f7e583.tar.gz vyos-1x-fc173e31672a980fe62c7ea2e0940f51d3f7e583.zip  | |
Merge pull request #2596 from sever-sever/T5249
T5249: Add rollback-soft feature
Diffstat (limited to 'python')
| -rw-r--r-- | python/vyos/config_mgmt.py | 30 | 
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")  | 
