From a3656b2ffb05f3936885d8caacae2fe4656a3003 Mon Sep 17 00:00:00 2001 From: Abhijeet Kasurde Date: Mon, 14 Oct 2024 09:06:47 -0700 Subject: [PATCH] [stable-2.18] facts: Skip path if the distribution path is directory (#84036) Skip path if the distribution path is directory instead of file. Handle exception raised while handling distribution path. Fixes: #84006 Signed-off-by: Abhijeet Kasurde (cherry picked from commit 34f8f55d9e5a85d21207cc174f88eb2d62edd119) --- changelogs/fragments/os_family.yml | 3 +++ .../module_utils/facts/system/distribution.py | 2 +- .../distribution/test_distribution_files.py | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 changelogs/fragments/os_family.yml create mode 100644 test/units/module_utils/facts/system/distribution/test_distribution_files.py diff --git a/changelogs/fragments/os_family.yml b/changelogs/fragments/os_family.yml new file mode 100644 index 00000000000..7126a00c27b --- /dev/null +++ b/changelogs/fragments/os_family.yml @@ -0,0 +1,3 @@ +--- +bugfixes: + - facts - skip if distribution file path is directory, instead of raising error (https://github.com/ansible/ansible/issues/84006). diff --git a/lib/ansible/module_utils/facts/system/distribution.py b/lib/ansible/module_utils/facts/system/distribution.py index 76f49b6ce84..7554ef1ae32 100644 --- a/lib/ansible/module_utils/facts/system/distribution.py +++ b/lib/ansible/module_utils/facts/system/distribution.py @@ -30,7 +30,7 @@ def get_uname(module, flags=('-v')): def _file_exists(path, allow_empty=False): # not finding the file, exit early - if not os.path.exists(path): + if not os.path.isfile(path): return False # if just the path needs to exists (ie, it can be empty) we are done diff --git a/test/units/module_utils/facts/system/distribution/test_distribution_files.py b/test/units/module_utils/facts/system/distribution/test_distribution_files.py new file mode 100644 index 00000000000..af743604d6d --- /dev/null +++ b/test/units/module_utils/facts/system/distribution/test_distribution_files.py @@ -0,0 +1,17 @@ +# Copyright: Contributors to the Ansible project +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import annotations + +import tempfile + + +from ansible.module_utils.facts.system.distribution import DistributionFiles + + +def test_distribution_files(mock_module): + d = DistributionFiles(mock_module) + temp_dir = tempfile.TemporaryDirectory() + dist_file, dist_file_content = d._get_dist_file_content(temp_dir.name) + assert not dist_file + assert dist_file_content is None