From cc13f42be494511f8ab82bd2c775de13911ed717 Mon Sep 17 00:00:00 2001 From: Giorgos Drosos <56369797+gdrosos@users.noreply.github.com> Date: Sun, 27 Jul 2025 12:50:18 +0300 Subject: [PATCH] Fix cronvar crash when parent dir of cron_file is missing (#10461) * Fix cronvar crash on non existent directories * Update changelog * Fix small variable bug * Fix trailing witespace * Fix CI issues * Update changelogs/fragments/10461-cronvar-non-existent-dir-crash-fix.yml Co-authored-by: Felix Fontein * Update plugins/modules/cronvar.py Co-authored-by: Felix Fontein --------- Co-authored-by: Felix Fontein --- .../10461-cronvar-non-existent-dir-crash-fix.yml | 2 ++ plugins/modules/cronvar.py | 3 +++ tests/integration/targets/cronvar/tasks/main.yml | 16 ++++++++++++++++ 3 files changed, 21 insertions(+) create mode 100644 changelogs/fragments/10461-cronvar-non-existent-dir-crash-fix.yml diff --git a/changelogs/fragments/10461-cronvar-non-existent-dir-crash-fix.yml b/changelogs/fragments/10461-cronvar-non-existent-dir-crash-fix.yml new file mode 100644 index 0000000000..c4b77299f5 --- /dev/null +++ b/changelogs/fragments/10461-cronvar-non-existent-dir-crash-fix.yml @@ -0,0 +1,2 @@ +bugfixes: + - "cronvar - fix crash on missing ``cron_file`` parent directories (https://github.com/ansible-collections/community.general/issues/10460, https://github.com/ansible-collections/community.general/pull/10461)." diff --git a/plugins/modules/cronvar.py b/plugins/modules/cronvar.py index e1acedc81d..979c99bb91 100644 --- a/plugins/modules/cronvar.py +++ b/plugins/modules/cronvar.py @@ -135,6 +135,9 @@ class CronVar(object): self.cron_file = cron_file else: self.cron_file = os.path.join('/etc/cron.d', cron_file) + parent_dir = os.path.dirname(self.cron_file) + if parent_dir and not os.path.isdir(parent_dir): + module.fail_json(msg="Parent directory '{}' does not exist for cron_file: '{}'".format(parent_dir, cron_file)) else: self.cron_file = None diff --git a/tests/integration/targets/cronvar/tasks/main.yml b/tests/integration/targets/cronvar/tasks/main.yml index 73ec41abca..7cf9602955 100644 --- a/tests/integration/targets/cronvar/tasks/main.yml +++ b/tests/integration/targets/cronvar/tasks/main.yml @@ -122,3 +122,19 @@ - custom_varcheck1.stdout == '1' - custom_varcheck2.stdout == '1' - custom_varcheck3.stdout == '0' + +- name: Attempt to add cron variable to non-existent parent directory + cronvar: + name: NOPARENT_VAR + value: noparentval + cron_file: /nonexistent/foo + user: root + register: invalid_directory_cronvar_result + ignore_errors: true + +- name: Assert that the cronvar task failed due to invalid directory + ansible.builtin.assert: + that: + - invalid_directory_cronvar_result is failed + - >- + "Parent directory '/nonexistent' does not exist for cron_file: '/nonexistent/foo'" == invalid_directory_cronvar_result.msg