mirror of
https://github.com/ansible/awx.git
synced 2026-03-10 14:09:28 -02:30
* Added schedule_rruleset lookup plugin for awx.awx * Added DB migration for rrule size * Updated schedule docs * The schedule API endpoint will now return an array of errors on rule validation to try and inform the user of all errors instead of just the first
This commit is contained in:
@@ -0,0 +1,342 @@
|
||||
---
|
||||
- name: Get our collection package
|
||||
controller_meta:
|
||||
register: controller_meta
|
||||
|
||||
- name: Generate the name of our plugin
|
||||
set_fact:
|
||||
ruleset_plugin_name: "{{ controller_meta.prefix }}.schedule_rruleset"
|
||||
rule_plugin_name: "{{ controller_meta.prefix }}.schedule_rrule"
|
||||
|
||||
|
||||
- name: Call ruleset with no rules
|
||||
set_fact:
|
||||
complex_rule: "{{ query(ruleset_plugin_name, '2022-04-30 10:30:45') }}"
|
||||
ignore_errors: True
|
||||
register: results
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- results is failed
|
||||
- "'You must include rules to be in the ruleset via the rules parameter' in results.msg"
|
||||
|
||||
|
||||
- name: call ruleset with a missing frequency
|
||||
set_fact:
|
||||
complex_rule: "{{ query(ruleset_plugin_name, '2022-04-30 10:30:45', rules=rrules ) }}"
|
||||
ignore_errors: True
|
||||
register: results
|
||||
vars:
|
||||
rrules:
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
- interval: 1
|
||||
byweekday: 'sunday'
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- results is failed
|
||||
- "'Rule 2 is missing a frequency' in results.msg"
|
||||
|
||||
|
||||
- name: call ruleset with a missing frequency
|
||||
set_fact:
|
||||
complex_rule: "{{ query(ruleset_plugin_name, '2022-04-30 10:30:45', rules=rrules ) }}"
|
||||
ignore_errors: True
|
||||
register: results
|
||||
vars:
|
||||
rrules:
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
- interval: 1
|
||||
byweekday: 'sunday'
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- results is failed
|
||||
- "'Rule 2 is missing a frequency' in results.msg"
|
||||
|
||||
|
||||
- name: call rruleset with an invalid frequency
|
||||
set_fact:
|
||||
complex_rule: "{{ query(ruleset_plugin_name, '2022-04-30 10:30:45', rules=rrules ) }}"
|
||||
ignore_errors: True
|
||||
register: results
|
||||
vars:
|
||||
rrules:
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
- frequency: 'asdf'
|
||||
interval: 1
|
||||
byweekday: 'sunday'
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- results is failed
|
||||
- "'Frequency of rule 2 is invalid asdf' in results.msg"
|
||||
|
||||
|
||||
- name: call rruleset with an invalid end_on
|
||||
set_fact:
|
||||
complex_rule: "{{ query(ruleset_plugin_name, '2022-04-30 10:30:45', rules=rrules ) }}"
|
||||
ignore_errors: True
|
||||
register: results
|
||||
vars:
|
||||
rrules:
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
byweekday: 'sunday'
|
||||
end_on: 'a'
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- 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: call rruleset with an invalid byweekday
|
||||
set_fact:
|
||||
complex_rule: "{{ query(ruleset_plugin_name, '2022-04-30 10:30:45', rules=rrules ) }}"
|
||||
ignore_errors: True
|
||||
register: results
|
||||
vars:
|
||||
rrules:
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
byweekday: 'junk'
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- results is failed
|
||||
- "'In rule 2 byweekday must only contain values' in results.msg"
|
||||
|
||||
|
||||
- name: call rruleset with a monthly rule with invalid bymonthday (a)
|
||||
set_fact:
|
||||
complex_rule: "{{ query(ruleset_plugin_name, '2022-04-30 10:30:45', rules=rrules ) }}"
|
||||
ignore_errors: True
|
||||
register: results
|
||||
vars:
|
||||
rrules:
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
- frequency: 'month'
|
||||
interval: 1
|
||||
bymonthday: 'a'
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- results is failed
|
||||
- "'In rule 2 bymonthday must be between 1 and 31' in results.msg"
|
||||
|
||||
|
||||
- name: call rruleset with a monthly rule with invalid bymonthday (-1)
|
||||
set_fact:
|
||||
complex_rule: "{{ query(ruleset_plugin_name, '2022-04-30 10:30:45', rules=rrules ) }}"
|
||||
ignore_errors: True
|
||||
register: results
|
||||
vars:
|
||||
rrules:
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
- frequency: 'month'
|
||||
interval: 1
|
||||
bymonthday: '-1'
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- results is failed
|
||||
- "'In rule 2 bymonthday must be between 1 and 31' in results.msg"
|
||||
|
||||
|
||||
- name: call rruleset with a monthly rule with invalid bymonthday (32)
|
||||
set_fact:
|
||||
complex_rule: "{{ query(ruleset_plugin_name, '2022-04-30 10:30:45', rules=rrules ) }}"
|
||||
ignore_errors: True
|
||||
register: results
|
||||
vars:
|
||||
rrules:
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
- frequency: 'month'
|
||||
interval: 1
|
||||
bymonthday: 32
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- results is failed
|
||||
- "'In rule 2 bymonthday must be between 1 and 31' in results.msg"
|
||||
|
||||
|
||||
- name: call rruleset with a monthly rule with invalid bysetpos (junk)
|
||||
set_fact:
|
||||
complex_rule: "{{ query(ruleset_plugin_name, '2022-04-30 10:30:45', rules=rrules ) }}"
|
||||
ignore_errors: True
|
||||
register: results
|
||||
vars:
|
||||
rrules:
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
- frequency: 'month'
|
||||
interval: 1
|
||||
bysetpos: 'junk'
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- results is failed
|
||||
- "'In rule 2 bysetpos must only contain values in first, second, third, fourth, last' in results.msg"
|
||||
|
||||
|
||||
- name: call rruleset with an invalid timezone
|
||||
set_fact:
|
||||
complex_rule: "{{ query(ruleset_plugin_name, '2022-04-30 10:30:45', rules=rrules, timezone='junk' ) }}"
|
||||
ignore_errors: True
|
||||
register: results
|
||||
vars:
|
||||
rrules:
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
byweekday: 'sunday'
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- results is failed
|
||||
- "'Timezone parameter is not valid' in results.msg"
|
||||
|
||||
|
||||
- name: call rruleset with only exclude rules
|
||||
set_fact:
|
||||
complex_rule: "{{ query(ruleset_plugin_name, '2022-04-30 10:30:45', rules=rrules ) }}"
|
||||
ignore_errors: True
|
||||
register: results
|
||||
vars:
|
||||
rrules:
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
include: False
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
byweekday: 'sunday'
|
||||
include: False
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- results is failed
|
||||
- "'A ruleset must contain at least one RRULE' in results.msg"
|
||||
|
||||
|
||||
- name: Every day except for Sundays
|
||||
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
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
byweekday: 'sunday'
|
||||
include: False
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- results is success
|
||||
- "'DTSTART;TZID=UTC:20220430T103045 RRULE:FREQ=DAILY;INTERVAL=1 EXRULE:FREQ=DAILY;BYDAY=SU;INTERVAL=1' == complex_rule"
|
||||
|
||||
|
||||
- name: Every day except for April 30th
|
||||
set_fact:
|
||||
complex_rule: "{{ query(ruleset_plugin_name, '2023-04-28 17:00:00', rules=rrules, timezone='UTC' ) }}"
|
||||
ignore_errors: True
|
||||
register: results
|
||||
vars:
|
||||
rrules:
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
- frequency: 'day'
|
||||
interval: 1
|
||||
bymonth: '4'
|
||||
bymonthday: 30
|
||||
include: False
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- results is success
|
||||
- "'DTSTART;TZID=UTC:20230428T170000 RRULE:FREQ=DAILY;INTERVAL=1 EXRULE:FREQ=DAILY;BYMONTH=4;BYMONTHDAY=30;INTERVAL=1' == complex_rule"
|
||||
|
||||
|
||||
- name: Every 5 minutes but not on Mondays from 5-7pm
|
||||
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: 'minute'
|
||||
interval: 5
|
||||
- frequency: 'minute'
|
||||
interval: 5
|
||||
byweekday: 'monday'
|
||||
byhour:
|
||||
- 17
|
||||
- 18
|
||||
include: False
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- results is success
|
||||
- "'DTSTART;TZID=UTC:20220430T103045 RRULE:FREQ=MINUTELY;INTERVAL=5 EXRULE:FREQ=MINUTELY;INTERVAL=5;BYDAY=MO;BYHOUR=17,18' == complex_rule"
|
||||
|
||||
|
||||
- name: Every 15 minutes Monday to Friday from 10:01am to 6:02pm (inclusive)
|
||||
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: 'minute'
|
||||
byweekday:
|
||||
- monday
|
||||
- tuesday
|
||||
- wednesday
|
||||
- thursday
|
||||
- friday
|
||||
interval: 15
|
||||
byhour: [10, 11, 12, 13, 14, 15, 16, 17, 18]
|
||||
- frequency: 'minute'
|
||||
interval: 1
|
||||
byweekday: "monday,tuesday,wednesday, thursday,friday"
|
||||
byhour: 18
|
||||
byminute: "{{ range(3, 60) | list }}"
|
||||
include: False
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- results is success
|
||||
- "'DTSTART;TZID=UTC:20220430T103045 RRULE:FREQ=MINUTELY;INTERVAL=15;BYDAY=MO,TU,WE,TH,FR;BYHOUR=10,11,12,13,14,15,16,17,18 EXRULE:FREQ=MINUTELY;BYDAY=MO,TU,WE,TH,FR;BYHOUR=18;BYMINUTE=3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59;INTERVAL=1' == complex_rule"
|
||||
|
||||
|
||||
- name: Any Saturday whose month day is between 12 and 18
|
||||
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: 'month'
|
||||
interval: 1
|
||||
byweekday: 'saturday'
|
||||
bymonthday: "{{ range(12,19) | list }}"
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- results is success
|
||||
- "'DTSTART;TZID=UTC:20220430T103045 RRULE:FREQ=MONTHLY;BYMONTHDAY=12,13,14,15,16,17,18;BYDAY=SA;INTERVAL=1' == complex_rule"
|
||||
Reference in New Issue
Block a user