From d6863fd79a09ca6902326150766792dcb74f85c5 Mon Sep 17 00:00:00 2001 From: jeanluc Date: Mon, 26 Jun 2023 11:08:38 +0200 Subject: [PATCH] Cleanup, add changelog entry for compound issue --- changelog/64531.fixed.md | 1 + salt/client/ssh/__init__.py | 17 +++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) create mode 100644 changelog/64531.fixed.md diff --git a/changelog/64531.fixed.md b/changelog/64531.fixed.md new file mode 100644 index 00000000000..1e01e69eaae --- /dev/null +++ b/changelog/64531.fixed.md @@ -0,0 +1 @@ +Made salt-ssh more strict when handling unexpected situations and state.* wrappers treat a remote exception as failure, excluded salt-ssh error returns from mine diff --git a/salt/client/ssh/__init__.py b/salt/client/ssh/__init__.py index 80578cce7f2..6f80c5815f7 100644 --- a/salt/client/ssh/__init__.py +++ b/salt/client/ssh/__init__.py @@ -583,7 +583,7 @@ class SSH(MultiprocessingStateMixin): ) ret = {"id": single.id} stdout = stderr = "" - retcode = 0 + retcode = salt.defaults.exitcodes.EX_OK try: stdout, stderr, retcode = single.run() try: @@ -677,7 +677,7 @@ class SSH(MultiprocessingStateMixin): running[host] = {"thread": routine} continue ret = {} - retcode = 0 + retcode = salt.defaults.exitcodes.EX_OK try: ret, retcode = que.get(False) if "id" in ret: @@ -865,7 +865,7 @@ class SSH(MultiprocessingStateMixin): print("") sret = {} outputter = self.opts.get("output", "nested") - final_exit = 0 + final_exit = salt.defaults.exitcodes.EX_OK for ret, retcode in self.handle_ssh(): host = next(iter(ret)) if not isinstance(retcode, int): @@ -877,7 +877,6 @@ class SSH(MultiprocessingStateMixin): ret, deploy_retcode = self.key_deploy(host, ret) if deploy_retcode is not None: retcode = deploy_retcode - final_exit = max(final_exit, retcode) if isinstance(ret[host], dict) and ( @@ -1155,7 +1154,7 @@ class Single: Returns tuple of (stdout, stderr, retcode) """ stdout = stderr = "" - retcode = 0 + retcode = salt.defaults.exitcodes.EX_OK if self.ssh_pre_flight: if not self.opts.get("ssh_run_pre_flight", False) and self.check_thin_dir(): @@ -1169,7 +1168,7 @@ class Single: ) else: stdout, stderr, retcode = self.run_ssh_pre_flight() - if retcode != 0: + if retcode != salt.defaults.exitcodes.EX_OK: log.error( "Error running ssh_pre_flight script %s", self.ssh_pre_file ) @@ -1252,7 +1251,7 @@ class Single: # Use the ID defined in the roster file opts_pkg["id"] = self.id - retcode = 0 + retcode = salt.defaults.exitcodes.EX_OK # Restore master grains for grain in conf_grains: @@ -1374,7 +1373,9 @@ class Single: retcode = 1 # Ensure retcode from wrappers is respected, especially state render exceptions - retcode = max(retcode, self.context.get("retcode", 0)) + retcode = max( + retcode, self.context.get("retcode", salt.defaults.exitcodes.EX_OK) + ) # Mimic the json data-structure that "salt-call --local" will # emit (as seen in ssh_py_shim.py)