Skip to content

Commit

Permalink
Cronjob automation
Browse files Browse the repository at this point in the history
Signed-off-by: Swapnil Bobade <[email protected]>
  • Loading branch information
swapnil-bobade27 committed Feb 1, 2023
1 parent facf1b8 commit bf214e7
Show file tree
Hide file tree
Showing 8 changed files with 198 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ This repository consists of additional ansible playbooks for the following:
1. Configure and run verification-tests
1. Enabling Stream Control Transmission Protocol (SCTP) and run e2e
1. Deploy Kubernetes NMState Operator and run e2e
1. Cronjob automation

## Assumptions:

Expand Down
9 changes: 9 additions & 0 deletions examples/all.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,15 @@ fio_git_token: ""
fio_git_branch: ""
fio_cleanup: true

#cron-job vars
enable_cronjob: false # Set true to enable the cronjob
cronjob_schedule: "* * * * *"
cronjob_concurrencyPolicy: "Allow"
cronjob_startingDeadlineSeconds:
cronjob_suspend:
cronjob_successfulJobsHistoryLimit:
cronjob_failedJobsHistoryLimit:

#ocp-verification-tests vars
verification_enabled: false
verification_dir: "/root/verification-tests"
Expand Down
3 changes: 3 additions & 0 deletions playbooks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,9 @@
- import_playbook: request-header-identity-provider.yml
when: request_header_provider is defined and request_header_provider

- import_playbook: ocp-cronjob.yml
when: enable_cronjob is defined and enable_cronjob

- import_playbook: ocp-descheduler.yml
when: descheduler_role_enable is defined and descheduler_role_enable

Expand Down
5 changes: 5 additions & 0 deletions playbooks/ocp-cronjob.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
- name: Start cronjob
hosts: bastion
roles:
- ocp-cronjob
66 changes: 66 additions & 0 deletions playbooks/roles/ocp-cronjob/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
OCP Cronjob creation
=======================================

The role *"roles/ocp-cronjob"* provides automated creation of cronjobs. User can add cronjob value in the role variables for creation **Role Variables** section.
This role will create the cronjob and we can monitor the jobs usig oc commands


Requirements
------------

- Running OCP 4.x cluster.


Role Variables
--------------

| Variable | Required | Default |Comments |
|-------------------------------------|----------|---------------------------|---------------------------------------------------------------------------------------------------------------------------------|
| enable_cronjob | no | false | Flag to be set to true to enable cronjob |
| cronjob_schedule | no | * * * * * | schedule field for the job is specified in cron format. Here, the job run every minute |
| cronjob_concurrencyPolicy | no | Allow | specifies how the job controller treats concurrent jobs within a cron job, values can be - ["Allow","forbid","replace"] |
| cronjob_startingDeadlineSeconds | no | 200 | starting deadline specifies a deadline (in seconds) for starting the job |
| cronjob_suspend | no | false | prevent subsequent runs of the cron job |
| cronjob_successfulJobsHistoryLimit | no | 3 | store the successful jobs history limit |
| cronjob_failedJobsHistoryLimit | no | 2 | store the failed jobs history limit |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|


Dependencies
------------

- None


Example Playbook
----------------

- name: Start cronjob
hosts: bastion
roles:
- ocp-cronjob


Steps to run playbook
----------------------

- Copy the ocp4-playbooks-extras/examples/inventory to the home/working directory
- To execute the playbook run the below sample command


Sample Command
---------------

ansible-playbook -i inventory -e @examples/all.yaml ~/ocp4-playbooks-extras/playbooks/ocp-cronjob.yml


License
-------

See LICENCE.txt


Author Information
------------------

Swapnil Bobade ([email protected])
15 changes: 15 additions & 0 deletions playbooks/roles/ocp-cronjob/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
# defaults file for playbooks/roles/ocp-cronjob
# all these values can be updated as needed
container_name: "busybox"
container_image: "busybox"
cronjob_namespace: "openshift-cronjob"
delete_cronjob: false
job_name: "cronjob"
enable_cronjob: false
cronjob_schedule: "*/1 * * * *"
cronjob_concurrencyPolicy: "Allow"
cronjob_startingDeadlineSeconds: 200
cronjob_suspend: false
cronjob_successfulJobsHistoryLimit: 4
cronjob_failedJobsHistoryLimit: 2
70 changes: 70 additions & 0 deletions playbooks/roles/ocp-cronjob/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
---
# Creating namespace for cronjob
- name: Create namespace for cronjob
k8s:
state: present
definition:
apiVersion: v1
kind: Namespace
metadata:
name: "{{ cronjob_namespace }}"

# create cronjobs
- name: Create Cronjobs
block:
- name: Create Cronjob
template:
src: "{{ role_path }}/templates/cron-job.yml.j2"
dest: "{{ role_path }}/files/cronjob.yml"

- name: Apply the cronjob
shell: oc apply -f "{{ role_path }}/files/cronjob.yml"

- name: Check if pods are created
shell: oc get pods -n {{ cronjob_namespace }} --no-headers | wc -l
register: pod_count
until: pod_count.stdout|int > 0
retries: 3
delay: 30

- name: Check pod status
shell: oc wait -l parent=cronjobpi --for=condition=Ready pods
register: pod_status

- debug:
msg: "{{ pod_status.stdout_lines }}"

- name: Check if jobs are getting created
shell: oc get jobs -n {{ cronjob_namespace }} --no-headers | wc -l
register: job_count
until: job_count.stdout|int > 0
retries: 3
delay: 30

- name: Check if jobs are running
shell: oc get jobs -n {{ cronjob_namespace }}
register: output_jobs

- name: Check if pods are running
shell: oc get pods -n {{ cronjob_namespace }} | grep "Completed\|Running"
register: output_pods

- name: Fail if pods are not getting created
fail:
msg: "Pods are not getting created !"
when: pod_count.stdout|int == 0

- name: Fail if jobs are not getting created
fail:
msg: "Jobs are not getting created !"
when: job_count.stdout|int == 0

- debug:
msg: "{{ output_jobs.stdout_lines }}"

- debug:
msg: "{{ output_pods.stdout_lines }}"

- name: Delete cronjob if requested
shell: oc delete -f "{{ role_path }}/files/cronjob.yml"
when: delete_cronjob
29 changes: 29 additions & 0 deletions playbooks/roles/ocp-cronjob/templates/cron-job.yml.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
apiVersion: batch/v1
kind: CronJob
metadata:
name: {{ job_name }}
namespace: "{{ cronjob_namespace }}"
spec:
schedule: "{{ cronjob_schedule }}"
concurrencyPolicy: "{{ cronjob_concurrencyPolicy }}"
startingDeadlineSeconds: {{ cronjob_startingDeadlineSeconds }}
suspend: {{ cronjob_suspend }}
successfulJobsHistoryLimit: {{ cronjob_successfulJobsHistoryLimit }}
failedJobsHistoryLimit: {{ cronjob_failedJobsHistoryLimit }}
jobTemplate:
spec:
template:
metadata:
labels:
parent: "cronjobpi"
spec:
containers:
- name: {{ container_name }}
image: {{ container_image }}
{% if cronjob_concurrencyPolicy or cronjob_startingDeadlineSeconds %}
command: ["sleep", "80"]
{% else %}
command: ["echo", "Hello Openshift !!"]
{% endif %}
restartPolicy: Never

0 comments on commit bf214e7

Please sign in to comment.