diff options
| -rw-r--r-- | python/vyos/vyconf_session.py | 22 | ||||
| -rwxr-xr-x | src/helpers/teardown-config-session.py | 9 |
2 files changed, 25 insertions, 6 deletions
diff --git a/python/vyos/vyconf_session.py b/python/vyos/vyconf_session.py index 1e113c2ad..225765f0b 100644 --- a/python/vyos/vyconf_session.py +++ b/python/vyos/vyconf_session.py @@ -49,7 +49,11 @@ def new_session(pid: int, sudo_user: str, user: str): class VyconfSession: def __init__( - self, token: str = None, pid: int = None, on_error: Type[Exception] = None + self, + token: str = None, + pid: int = None, + extant=False, + on_error: Type[Exception] = None, ): self.pid = pid if pid else os.getpid() self.sudo_user = os.environ.get('SUDO_USER', None) @@ -60,7 +64,9 @@ class VyconfSession: match token: case None: # config-mode sessions are persistent, and managed by caller (CLI or ConfigSession) - # op-mode sessions are ephemeral: a new session on init; teardown in finalizer + # + # op-mode sessions are ephemeral, unless forced with extant=True: + # --- open a new session on init; teardown in finalizer if self.in_config_session: out = vyconf_client.send_request( 'session_of_pid', client_pid=self.pid @@ -75,14 +81,22 @@ class VyconfSession: else: self.__token = out.output else: - self.__token = new_session(self.pid, self.sudo_user, self.user) + if not extant: + self.__token = new_session(self.pid, self.sudo_user, self.user) + else: + out = vyconf_client.send_request( + 'session_of_pid', client_pid=self.pid + ) + if out.output is None: + raise ValueError(f'No existing session for pid {self.pid}') + self.__token = out.output case _: out = vyconf_client.send_request('session_exists', token=token) if out.status: raise ValueError(f'No existing session for token: {token}') self.__token = token - if not self.in_config_session: + if not self.in_config_session and not extant: self._finalizer = weakref.finalize(self, self._teardown, self.__token) self.on_error = on_error diff --git a/src/helpers/teardown-config-session.py b/src/helpers/teardown-config-session.py index c30303c99..49a3f5bc5 100755 --- a/src/helpers/teardown-config-session.py +++ b/src/helpers/teardown-config-session.py @@ -23,5 +23,10 @@ if len(sys.argv) < 2: pid = sys.argv[1] -vc = VyconfSession(pid=pid) -vc.teardown() +try: + vc = VyconfSession(pid=int(pid), extant=True) +except ValueError: + # as this script is called on any config session exit, ignore non-existent + pass +else: + vc.teardown() |
