diff --git a/changelog/68755.fixed.md b/changelog/68755.fixed.md new file mode 100644 index 000000000000..b6f106c582c0 --- /dev/null +++ b/changelog/68755.fixed.md @@ -0,0 +1 @@ +Don't insert local paths before standard library paths in LazyLoader, preventing sys.path reordering when loader modules are already importable. diff --git a/salt/loader/lazy.py b/salt/loader/lazy.py index 1a89c796fce8..9127430ebffe 100644 --- a/salt/loader/lazy.py +++ b/salt/loader/lazy.py @@ -778,9 +778,12 @@ def _load_module(self, name): self.loaded_files.add(name) fpath_dirname = os.path.dirname(fpath) + fpath_appended = False try: self.__populate_sys_path() - sys.path.append(fpath_dirname) + if fpath_dirname not in sys.path: + sys.path.append(fpath_dirname) + fpath_appended = True if suffix == ".pyx": mod = pyximport.load_module(name, fpath, tempfile.gettempdir()) elif suffix == ".o": @@ -917,7 +920,8 @@ def _load_module(self, name): self.missing_modules[name] = error return False finally: - sys.path.remove(fpath_dirname) + if fpath_appended: + sys.path.remove(fpath_dirname) self.__clean_sys_path() loader_context = salt.loader.context.LoaderContext() diff --git a/tests/pytests/integration/ssh/state/test_state.py b/tests/pytests/integration/ssh/state/test_state.py index f9fd126bb67c..5fbbc15426e0 100644 --- a/tests/pytests/integration/ssh/state/test_state.py +++ b/tests/pytests/integration/ssh/state/test_state.py @@ -113,3 +113,10 @@ def test_state_test(salt_ssh_cli, state_tree): ret.data["test_|-Ok with def_|-Ok with def_|-succeed_with_changes"]["result"] is None ) + + +def test_state_pkg(salt_ssh_cli): + ret = salt_ssh_cli.run("state.single", "pkg.installed", "coreutils", "test=True") + assert ret.returncode == 0 + assert ret.data + assert ret.data["pkg_|-coreutils_|-coreutils_|-installed"]["result"] is not False