From 4630757f5f75c886bbfd7c55cf0cecfab3588b2f Mon Sep 17 00:00:00 2001 From: npithonDR <123001064+npithonDR@users.noreply.github.com> Date: Thu, 9 Feb 2023 09:34:10 +0100 Subject: [PATCH 1/4] Fix error for byweekday in schedule_rruleset Fix error: ``` fatal: [localhost]: FAILED! => { "msg": "An unhandled exception occurred while running the lookup plugin 'awx.awx.schedule_rruleset'. Error was a , original message: In rule 1 byweekday must only contain values in monday, tuesday, wednesday, thursday, friday, saturday, sunday. In rule 1 byweekday must only contain values in monday, tuesday, wednesday, thursday, friday, saturday, sunday" } ``` with: ``` - name: Build a complex schedule for every monday using the rruleset plugin awx.awx.schedule: name: "Test build complex schedule" state: present unified_job_template: "template name" rrule: "{{ query('awx.awx.schedule_rruleset', '2030-04-30 10:30:45', rules=rrules, timezone='Europe/Paris' ) }}" vars: rrules: - frequency: 'day' interval: 1 byweekday: 'monday' ``` --- awx_collection/plugins/lookup/schedule_rruleset.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/awx_collection/plugins/lookup/schedule_rruleset.py b/awx_collection/plugins/lookup/schedule_rruleset.py index 6aefde48d0..d5850582b0 100644 --- a/awx_collection/plugins/lookup/schedule_rruleset.py +++ b/awx_collection/plugins/lookup/schedule_rruleset.py @@ -210,8 +210,7 @@ class LookupModule(LookupBase): def process_list(self, field_name, rule, valid_list, rule_number): return_values = [] - if isinstance(rule[field_name], list): - rule[field_name] = rule[field_name].split(',') + rule[field_name] = rule[field_name].split(',') for value in rule[field_name]: value = value.strip() if value not in valid_list: From 951eee944cf7417c4c8a98e81862579f86540727 Mon Sep 17 00:00:00 2001 From: npithonDR <123001064+npithonDR@users.noreply.github.com> Date: Mon, 13 Feb 2023 09:50:11 +0100 Subject: [PATCH 2/4] Add additional rruleset tests --- .../targets/lookup_rruleset/tasks/main.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/awx_collection/tests/integration/targets/lookup_rruleset/tasks/main.yml b/awx_collection/tests/integration/targets/lookup_rruleset/tasks/main.yml index fe5b3f755d..7f9f0271b2 100644 --- a/awx_collection/tests/integration/targets/lookup_rruleset/tasks/main.yml +++ b/awx_collection/tests/integration/targets/lookup_rruleset/tasks/main.yml @@ -95,6 +95,22 @@ - results is failed - "'In rule 2 end_on must either be an integer or in the format YYYY-MM-DD [HH:MM:SS]' in results.msg" +- name: Every Mondays + set_fact: + complex_rule: "{{ query(ruleset_plugin_name, '2022-04-30 10:30:45', rules=rrules, timezone='UTC' ) }}" + ignore_errors: True + register: results + vars: + rrules: + - frequency: 'day' + interval: 1 + byweekday: 'monday' + +- assert: + that: + - results is success + - "'DTSTART;TZID=UTC:20220430T103045 RRULE:FREQ=DAILY;BYDAY=MO;INTERVAL=1' == complex_rule" + - name: call rruleset with an invalid byweekday set_fact: From 811ecb86735fc952de2907ed71a2f84049b07138 Mon Sep 17 00:00:00 2001 From: Alan Rominger Date: Thu, 23 Feb 2023 12:05:21 -0500 Subject: [PATCH 3/4] Follow suggestion from comment, split if NOT list --- awx_collection/plugins/lookup/schedule_rruleset.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/awx_collection/plugins/lookup/schedule_rruleset.py b/awx_collection/plugins/lookup/schedule_rruleset.py index d5850582b0..4e9732f0f2 100644 --- a/awx_collection/plugins/lookup/schedule_rruleset.py +++ b/awx_collection/plugins/lookup/schedule_rruleset.py @@ -196,7 +196,7 @@ class LookupModule(LookupBase): if isinstance(rule[field_name], int): rule[field_name] = [rule[field_name]] # If its not a list, we need to split it into a list - if isinstance(rule[field_name], list): + if not isinstance(rule[field_name], list): rule[field_name] = rule[field_name].split(',') for value in rule[field_name]: # If they have a list of strs we want to strip the str incase its space delineated @@ -210,7 +210,8 @@ class LookupModule(LookupBase): def process_list(self, field_name, rule, valid_list, rule_number): return_values = [] - rule[field_name] = rule[field_name].split(',') + if not isinstance(rule[field_name], list): + rule[field_name] = rule[field_name].split(',') for value in rule[field_name]: value = value.strip() if value not in valid_list: From 3051384f9570d5f35f96c25ecabd4e5cf158bc9f Mon Sep 17 00:00:00 2001 From: Alan Rominger Date: Thu, 23 Feb 2023 12:05:32 -0500 Subject: [PATCH 4/4] Follow suggestion from comment, split if NOT list --- awx_collection/plugins/lookup/schedule_rruleset.py | 1 + 1 file changed, 1 insertion(+) diff --git a/awx_collection/plugins/lookup/schedule_rruleset.py b/awx_collection/plugins/lookup/schedule_rruleset.py index 4e9732f0f2..b45d861db3 100644 --- a/awx_collection/plugins/lookup/schedule_rruleset.py +++ b/awx_collection/plugins/lookup/schedule_rruleset.py @@ -210,6 +210,7 @@ class LookupModule(LookupBase): def process_list(self, field_name, rule, valid_list, rule_number): return_values = [] + # If its not a list, we need to split it into a list if not isinstance(rule[field_name], list): rule[field_name] = rule[field_name].split(',') for value in rule[field_name]: