From 7fb8eb538b28d212b24ee9b9f5e0ade747ee97f7 Mon Sep 17 00:00:00 2001 From: David Murphy Date: Fri, 21 Feb 2025 15:14:54 -0700 Subject: [PATCH] Ensure file clients for runner, wheel, local and caller are available from the client_cache if called upon --- changelog/61416.fixed.md | 1 + salt/utils/reactor.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 changelog/61416.fixed.md diff --git a/changelog/61416.fixed.md b/changelog/61416.fixed.md new file mode 100644 index 00000000000..58dd7a27783 --- /dev/null +++ b/changelog/61416.fixed.md @@ -0,0 +1 @@ +Ensure file clients for runner, wheel, local and caller are available from the client_cache if called upon. diff --git a/salt/utils/reactor.py b/salt/utils/reactor.py index 0229738ec3c..cdfc927a35d 100644 --- a/salt/utils/reactor.py +++ b/salt/utils/reactor.py @@ -464,22 +464,42 @@ class ReactWrap: """ Wrap RunnerClient for executing :ref:`runner modules ` """ + # pylint: disable=unsupported-membership-test,unsupported-assignment-operation + if "runner" not in self.client_cache: + log.debug("reactor edge case: re-populating client_cache for runner") + low = {"state": "runner"} + self.populate_client_cache(low) return self.pool.fire_async(self.client_cache["runner"].low, args=(fun, kwargs)) def wheel(self, fun, **kwargs): """ Wrap Wheel to enable executing :ref:`wheel modules ` """ + # pylint: disable=unsupported-membership-test,unsupported-assignment-operation + if "wheel" not in self.client_cache: + log.debug("reactor edge case: re-populating client_cache for wheel") + low = {"state": "wheel"} + self.populate_client_cache(low) return self.pool.fire_async(self.client_cache["wheel"].low, args=(fun, kwargs)) def local(self, fun, tgt, **kwargs): """ Wrap LocalClient for running :ref:`execution modules ` """ + # pylint: disable=unsupported-membership-test,unsupported-assignment-operation + if "local" not in self.client_cache: + log.debug("reactor edge case: re-populating client_cache for local") + low = {"state": "local"} + self.populate_client_cache(low) self.client_cache["local"].cmd_async(tgt, fun, **kwargs) def caller(self, fun, **kwargs): """ Wrap LocalCaller to execute remote exec functions locally on the Minion """ + # pylint: disable=unsupported-membership-test,unsupported-assignment-operation + if "caller" not in self.client_cache: + log.debug("reactor edge case: re-populating client_cache for caller") + low = {"state": "caller"} + self.populate_client_cache(low) self.client_cache["caller"].cmd(fun, *kwargs["arg"], **kwargs["kwarg"])