summaryrefslogtreecommitdiff
path: root/src/helpers/reset_section.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/helpers/reset_section.py')
-rwxr-xr-xsrc/helpers/reset_section.py60
1 files changed, 39 insertions, 21 deletions
diff --git a/src/helpers/reset_section.py b/src/helpers/reset_section.py
index 22b608f00..f1e4cfc6c 100755
--- a/src/helpers/reset_section.py
+++ b/src/helpers/reset_section.py
@@ -20,6 +20,7 @@
import argparse
import sys
import os
+import grp
from vyos.configsession import ConfigSession
from vyos.config import Config
@@ -27,6 +28,9 @@ from vyos.configdiff import get_config_diff
from vyos.xml_ref import is_leaf
+CFG_GROUP = 'vyattacfg'
+
+
def type_str_to_list(value):
if isinstance(value, str):
return value.split()
@@ -57,39 +61,52 @@ except ValueError:
sys.exit('nonexistent path: neither allowed nor useful')
test = Config()
-if not test.in_session():
- sys.exit('reset_section not available outside of a config session')
+in_session = test.in_session()
-diff = get_config_diff(test)
-if not diff.is_node_changed(path):
- # No discrepancies at path after commit, hence no error to revert.
- sys.exit()
+if in_session:
+ if reload:
+ sys.exit('reset_section reload not available inside of a config session')
+
+ diff = get_config_diff(test)
+ if not diff.is_node_changed(path):
+ # No discrepancies at path after commit, hence no error to revert.
+ sys.exit()
+
+ del diff
+else:
+ if not reload:
+ sys.exit('reset_section rollback not available outside of a config session')
-del diff
del test
session_id = int(pid) if pid else os.getppid()
-# check hint left by vyshim when ConfigError is from apply stage
-hint_name = f'/tmp/apply_{session_id}'
-if not os.path.exists(hint_name):
- # no apply error; exit
- sys.exit()
-else:
- # cleanup hint and continue with reset
- os.unlink(hint_name)
+if in_session:
+ # check hint left by vyshim when ConfigError is from apply stage
+ hint_name = f'/tmp/apply_{session_id}'
+ if not os.path.exists(hint_name):
+ # no apply error; exit
+ sys.exit()
+ else:
+ # cleanup hint and continue with reset
+ os.unlink(hint_name)
+
+cfg_group = grp.getgrnam(CFG_GROUP)
+os.setgid(cfg_group.gr_gid)
+os.umask(0o002)
-session = ConfigSession(session_id, shared=True)
+shared = not bool(reload)
+
+session = ConfigSession(session_id, shared=shared)
session_env = session.get_session_env()
config = Config(session_env)
-effective = not bool(reload)
-
-d = config.get_config_dict(path, effective=effective, get_first_key=True)
+d = config.get_config_dict(path, effective=True, get_first_key=True)
-session.discard()
+if in_session:
+ session.discard()
session.delete(path)
session.commit()
@@ -99,4 +116,5 @@ if not d:
sys.exit()
session.set_section(path, d)
-session.commit()
+out = session.commit()
+print(out)