summaryrefslogtreecommitdiff
path: root/src/services/vyos-configd
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2025-05-23 10:31:18 -0500
committerJohn Estabrook <jestabro@vyos.io>2025-06-10 18:12:48 -0500
commitc82b2b836b01c285576cc98ecf2b99ff3d8838ef (patch)
tree244be0a59856341181f28870a3956ab3893966a3 /src/services/vyos-configd
parentb40e7a2de9daa866b6423391ba7fe5b1bfa7e67c (diff)
downloadvyos-1x-c82b2b836b01c285576cc98ecf2b99ff3d8838ef.tar.gz
vyos-1x-c82b2b836b01c285576cc98ecf2b99ff3d8838ef.zip
configd: T7488: allow distinction of first-order error verify vs apply
Leave hint if vyos-configd encounters an error in the generate/apply stages: this only detects 'first-order' differences, meaning those originating from the called config mode script, and not its dependencies. This is useful for supporting automatic rollback for certain cases of apply stage error.
Diffstat (limited to 'src/services/vyos-configd')
-rwxr-xr-xsrc/services/vyos-configd14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/services/vyos-configd b/src/services/vyos-configd
index 28acccd2c..c45d492f9 100755
--- a/src/services/vyos-configd
+++ b/src/services/vyos-configd
@@ -68,6 +68,7 @@ class Response(Enum):
ERROR_COMMIT = 2
ERROR_DAEMON = 4
PASS = 8
+ ERROR_COMMIT_APPLY = 16
vyos_conf_scripts_dir = directories['conf_mode']
@@ -142,8 +143,6 @@ def run_script(script_name, config, args) -> tuple[Response, str]:
try:
c = script.get_config(config)
script.verify(c)
- script.generate(c)
- script.apply(c)
except ConfigError as e:
logger.error(e)
return Response.ERROR_COMMIT, str(e)
@@ -152,6 +151,17 @@ def run_script(script_name, config, args) -> tuple[Response, str]:
logger.error(tb)
return Response.ERROR_COMMIT, tb
+ try:
+ script.generate(c)
+ script.apply(c)
+ except ConfigError as e:
+ logger.error(e)
+ return Response.ERROR_COMMIT_APPLY, str(e)
+ except Exception:
+ tb = traceback.format_exc()
+ logger.error(tb)
+ return Response.ERROR_COMMIT_APPLY, tb
+
return Response.SUCCESS, ''