diff options
author | Christian Breunig <christian@breunig.cc> | 2025-05-29 14:29:39 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-29 14:29:39 +0200 |
commit | 84f1263334de5dcea30fadf02451e8a73e989414 (patch) | |
tree | 7fe10eab0e68e274e2aab36e3b6e0bf8906e4992 /src | |
parent | e604e68a5a77718a25b60737dcb9699b84c8e34b (diff) | |
parent | c8d4ef91d39216218a10d6e643bdb15a2530628c (diff) | |
download | vyos-1x-84f1263334de5dcea30fadf02451e8a73e989414.tar.gz vyos-1x-84f1263334de5dcea30fadf02451e8a73e989414.zip |
Merge pull request #4530 from jestabro/api-extend-load-merge
http-api: T7498: allow passing config string in body of 'load' or 'merge' request
Diffstat (limited to 'src')
-rw-r--r-- | src/services/api/rest/models.py | 4 | ||||
-rw-r--r-- | src/services/api/rest/routers.py | 14 |
2 files changed, 14 insertions, 4 deletions
diff --git a/src/services/api/rest/models.py b/src/services/api/rest/models.py index da60e1220..47c7a65b3 100644 --- a/src/services/api/rest/models.py +++ b/src/services/api/rest/models.py @@ -134,13 +134,15 @@ class RetrieveModel(ApiModel): class ConfigFileModel(ApiModel): op: StrictStr file: StrictStr = None + string: StrictStr = None class Config: 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 d3df91ef5..4866ec5d8 100644 --- a/src/services/api/rest/routers.py +++ b/src/services/api/rest/routers.py @@ -508,13 +508,21 @@ 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: + path = '/tmp/config.file' + with open(path, 'w') as f: + f.write(data.string) else: - return error(400, 'Missing required field "file"') + 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) |