ansible/test/integration/targets/cron/tasks/main.yml
Rick Elrod 698eae3f3d [tests] Work around vixie-cron and PAM issue, el6
Change:
- This works around an issue that causes the cron test to fail sometimes
  on el6.

Test Plan:
- ansible-test integration cron --docker centos6

Signed-off-by: Rick Elrod <rick@elrod.me>
2021-04-19 20:41:30 -07:00

224 lines
6.2 KiB
YAML

# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=726661
- name: Work around vixie-cron/PAM issue on old distros
command: sed -i '/pam_loginuid/ s/^/#/' /etc/pam.d/crond
when:
- ansible_distribution in ('RedHat', 'CentOS')
- ansible_distribution_major_version is version('6', '==')
- name: add cron task (check mode enabled, cron task not already created)
cron:
name: test cron task
job: 'date > {{ remote_dir }}/cron_canary1'
check_mode: yes
register: check_mode_enabled_state_present
- assert:
that: check_mode_enabled_state_present is changed
- name: add cron task (check mode disabled, task hasn't already been created)
cron:
name: test cron task
job: 'date > {{ remote_dir }}/cron_canary1'
register: add_cron_task
- assert:
that: add_cron_task is changed
- name: add cron task (check mode enabled, cron task already exists)
cron:
name: test cron task
job: 'date > {{ remote_dir }}/cron_canary1'
check_mode: yes
register: check_mode_enabled_state_present_cron_task_already_exists
- assert:
that: check_mode_enabled_state_present_cron_task_already_exists is not changed
- name: add cron task (check mode disabled, cron task already created)
cron:
name: test cron task
job: 'date > {{ remote_dir }}/cron_canary1'
register: cron_task_already_created
- assert:
that: cron_task_already_created is not changed
- block:
- name: wait for canary creation
wait_for:
path: '{{ remote_dir }}/cron_canary1'
timeout: '{{ 20 if faketime_pkg else 70 }}'
register: wait_canary
always:
- name: display some logs in case of failure
command: 'journalctl -u {{ cron_service }}'
when: wait_canary is failed and ansible_service_mgr == 'systemd'
- debug:
msg: 'elapsed time waiting for canary: {{ wait_canary.elapsed }}'
- name: Check check_mode
cron:
name: test cron task
job: 'date > {{ remote_dir }}/cron_canary1'
state: absent
check_mode: yes
register: check_check_mode
- assert:
that: check_check_mode is changed
- name: Remove a cron task
cron:
name: test cron task
job: 'date > {{ remote_dir }}/cron_canary1'
state: absent
register: remove_task
- assert:
that: remove_task is changed
- name: 'cron task missing: check idempotence (check mode enabled, state=absent)'
cron:
name: test cron task
job: 'date > {{ remote_dir }}/cron_canary1'
state: absent
register: check_mode_enabled_remove_task_idempotence
- assert:
that: check_mode_enabled_remove_task_idempotence is not changed
- name: 'cron task missing: check idempotence (check mode disabled, state=absent)'
cron:
name: test cron task
job: 'date > {{ remote_dir }}/cron_canary1'
state: absent
register: remove_task_idempotence
- assert:
that: remove_task_idempotence is not changed
- name: Check that removing a cron task with cron_file and without specifying a user is allowed (#58493)
cron:
name: test cron task
cron_file: unexistent_cron_file
state: absent
register: remove_cron_file
- assert:
that: remove_cron_file is not changed
- name: Non regression test - cron file should not be empty after adding var (#71207)
when: ansible_distribution != 'Alpine'
block:
- name: Cron file creation
cron:
cron_file: cron_filename
name: "simple cron job"
job: 'echo "_o/"'
user: root
- name: Add var to the cron file
cron:
cron_file: cron_filename
env: yes
name: FOO
value: bar
user: root
- name: "Ensure cron_file still contains job string"
replace:
path: /etc/cron.d/cron_filename
regexp: "_o/"
replace: "OK"
register: find_chars
failed_when: (find_chars is not changed) or (find_chars is failed)
# BusyBox does not have /etc/cron.d
- name: Removing a cron file when the name is specified is allowed (#57471)
when: ansible_distribution != 'Alpine'
block:
- name: Cron file creation
cron:
cron_file: cron_filename
name: "integration test cron"
job: 'ls'
user: root
- name: Cron file deletion
cron:
cron_file: cron_filename
name: "integration test cron"
state: absent
- name: Check file succesfull deletion
stat:
path: /etc/cron.d/cron_filename
register: cron_file_stats
- assert:
that: not cron_file_stats.stat.exists
- name: Allow non-ascii chars in job (#69492)
when: ansible_distribution != 'Alpine'
block:
- name: Cron file creation
cron:
cron_file: cron_filename
name: "cron job that contain non-ascii chars in job (これは日本語です; This is Japanese)"
job: 'echo "うどんは好きだがお化け👻は苦手である。"'
user: root
- name: "Ensure cron_file contains job string"
replace:
path: /etc/cron.d/cron_filename
regexp: "うどんは好きだがお化け👻は苦手である。"
replace: "それは機密情報🔓です。"
register: find_chars
failed_when: (find_chars is not changed) or (find_chars is failed)
- name: Cron file deletion
cron:
cron_file: cron_filename
name: "cron job that contain non-ascii chars in job (これは日本語です; This is Japanese)"
state: absent
- name: Check file succesfull deletion
stat:
path: /etc/cron.d/cron_filename
register: cron_file_stats
- assert:
that: not cron_file_stats.stat.exists
- name: Allow non-ascii chars in cron_file (#69492)
when: ansible_distribution != 'Alpine'
block:
- name: Cron file creation with non-ascii filename (これは日本語です; This is Japanese)
cron:
cron_file: 'なせば大抵なんとかなる👊'
name: "integration test cron"
job: 'echo "Hello, ansible!"'
user: root
- name: Check file exists
stat:
path: "/etc/cron.d/なせば大抵なんとかなる👊"
register: cron_file_stats
- assert:
that: cron_file_stats.stat.exists
- name: Cron file deletion
cron:
cron_file: 'なせば大抵なんとかなる👊'
name: "integration test cron"
state: absent
- name: Check file succesfull deletion
stat:
path: "/etc/cron.d/なせば大抵なんとかなる👊"
register: cron_file_stats
- assert:
that: not cron_file_stats.stat.exists