diff options
author | John Estabrook <jestabro@vyos.io> | 2025-05-28 14:53:38 -0500 |
---|---|---|
committer | John Estabrook <jestabro@vyos.io> | 2025-05-28 15:35:16 -0500 |
commit | c8d4ef91d39216218a10d6e643bdb15a2530628c (patch) | |
tree | 4c0636190f0084b506524e0bb7d2ec6db07ff63e | |
parent | 0464fc0dd9c62beff242ec024086fb57947469c0 (diff) | |
download | vyos-1x-c8d4ef91d39216218a10d6e643bdb15a2530628c.tar.gz vyos-1x-c8d4ef91d39216218a10d6e643bdb15a2530628c.zip |
http-api: T7498: allow passing config string in body of 'merge' request
-rw-r--r-- | python/vyos/configsession.py | 9 | ||||
-rw-r--r-- | src/services/api/rest/models.py | 2 | ||||
-rw-r--r-- | src/services/api/rest/routers.py | 8 |
3 files changed, 16 insertions, 3 deletions
diff --git a/python/vyos/configsession.py b/python/vyos/configsession.py index 1b19c68b4..7be2e665c 100644 --- a/python/vyos/configsession.py +++ b/python/vyos/configsession.py @@ -36,6 +36,7 @@ DISCARD = '/opt/vyatta/sbin/my_discard' SHOW_CONFIG = ['/bin/cli-shell-api', 'showConfig'] LOAD_CONFIG = ['/bin/cli-shell-api', 'loadFile'] MIGRATE_LOAD_CONFIG = ['/usr/libexec/vyos/vyos-load-config.py'] +MERGE_CONFIG = ['/usr/libexec/vyos/vyos-merge-config.py'] SAVE_CONFIG = ['/usr/libexec/vyos/vyos-save-config.py'] INSTALL_IMAGE = [ '/usr/libexec/vyos/op_mode/image_installer.py', @@ -338,6 +339,14 @@ class ConfigSession(object): return out + def merge_config(self, file_path): + if self._vyconf_session is None: + out = self.__run_command(MERGE_CONFIG + [file_path]) + else: + out, _ = 'unimplemented' + + return out + def save_config(self, file_path): if self._vyconf_session is None: out = self.__run_command(SAVE_CONFIG + [file_path]) diff --git a/src/services/api/rest/models.py b/src/services/api/rest/models.py index 9ca985a91..fa2d07d28 100644 --- a/src/services/api/rest/models.py +++ b/src/services/api/rest/models.py @@ -140,7 +140,7 @@ class ConfigFileModel(ApiModel): json_schema_extra = { 'example': { 'key': 'id_key', - 'op': 'save | load', + 'op': 'save | load | merge', 'file': 'filename', 'string': 'config_string' } diff --git a/src/services/api/rest/routers.py b/src/services/api/rest/routers.py index 8679329da..fba08a65a 100644 --- a/src/services/api/rest/routers.py +++ b/src/services/api/rest/routers.py @@ -507,7 +507,7 @@ def config_file_op(data: ConfigFileModel, background_tasks: BackgroundTasks): else: path = '/config/config.boot' msg = session.save_config(path) - elif op == 'load': + elif op in ('load', 'merge'): if data.file: path = data.file elif data.string: @@ -517,7 +517,11 @@ def config_file_op(data: ConfigFileModel, background_tasks: BackgroundTasks): else: return error(400, 'Missing required field "file | string"') - session.migrate_and_load_config(path) + match op: + case 'load': + session.migrate_and_load_config(path) + case 'merge': + session.merge_config(path) config = Config(session_env=env) d = get_config_diff(config) |