From 5778e0d99945fad0d74c8d868a166c8b5f20ea32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Bompard?= Date: Tue, 6 Aug 2024 07:49:53 +0200 Subject: [PATCH] Create a role to run jobs in OpenShift MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Inspired by Koschei's `koschei/job` role. Adapt the MirrorManager move-to-archive job to it. Signed-off-by: Aurélien Bompard --- .../move-to-archive.yml} | 17 ++--------- .../{cmd-move-to-archive.yml => job.yml} | 11 ++----- roles/openshift/job/defaults/main.yml | 2 ++ roles/openshift/job/tasks/main.yml | 30 +++++++++++++++++++ 4 files changed, 38 insertions(+), 22 deletions(-) rename playbooks/manual/{mirrormanager-move-to-archive.yml => mirrormanager/move-to-archive.yml} (64%) rename roles/openshift-apps/mirrormanager/templates/{cmd-move-to-archive.yml => job.yml} (80%) create mode 100644 roles/openshift/job/defaults/main.yml create mode 100644 roles/openshift/job/tasks/main.yml diff --git a/playbooks/manual/mirrormanager-move-to-archive.yml b/playbooks/manual/mirrormanager/move-to-archive.yml similarity index 64% rename from playbooks/manual/mirrormanager-move-to-archive.yml rename to playbooks/manual/mirrormanager/move-to-archive.yml index 01e6af7c6c..ea7bbbb986 100644 --- a/playbooks/manual/mirrormanager-move-to-archive.yml +++ b/playbooks/manual/mirrormanager/move-to-archive.yml @@ -16,8 +16,6 @@ - /srv/web/infra/ansible/vars/apps/mirrormanager.yml handlers: - import_tasks: "{{ handlers_path }}/restart_services.yml" - vars: - job_name: move-to-archive-{{ product|lower|replace(" ", "-") }}-{{ version|lower|replace(" ", "-") }}-{{ ansible_date_time.epoch }} pre_tasks: - name: Validate the product {{ product }} @@ -33,16 +31,7 @@ fail_msg: "The 'version' variable is not defined" roles: - - role: openshift/object + - role: openshift/job app: mirrormanager - template: cmd-move-to-archive.yml - objectname: cmd-move-to-archive.yml - always_apply: true - - tasks: - - debug: - msg: "Job started. You can watch the logs with: oc -n mirrormanager logs -f job/{{job_name}}" - - debug: - msg: "You can cancel it with: oc -n mirrormanager delete job/{{job_name}}" - - debug: - msg: "When it's done, clean it up with: oc -n mirrormanager delete job/{{job_name}}" + name: move-to-archive-{{ product|lower|replace(" ", "-") }}-{{ version|lower|replace(" ", "-") }} + command: "/opt/app-root/bin/mm2_move-to-archive --product {{ product }} --version {{ version }}" diff --git a/roles/openshift-apps/mirrormanager/templates/cmd-move-to-archive.yml b/roles/openshift-apps/mirrormanager/templates/job.yml similarity index 80% rename from roles/openshift-apps/mirrormanager/templates/cmd-move-to-archive.yml rename to roles/openshift-apps/mirrormanager/templates/job.yml index 3f7c4e1beb..34b5003719 100644 --- a/roles/openshift-apps/mirrormanager/templates/cmd-move-to-archive.yml +++ b/roles/openshift-apps/mirrormanager/templates/job.yml @@ -1,10 +1,10 @@ {% from "_macros.yml" import common_volume_mounts, common_volumes, common_env, security_context with context %} -# Manual command: move-to-archive +# A template for manual commands --- apiVersion: batch/v1 kind: Job metadata: - name: "{{ job_name }}" + name: "job-{{ name }}" spec: parallelism: 1 completions: 1 @@ -16,12 +16,7 @@ spec: containers: - name: mirrormanager image: image-registry.openshift-image-registry.svc:5000/mirrormanager/mirrormanager2:latest - command: - - "/opt/app-root/bin/mm2_move-to-archive" - - "--product" - - "{{ product }}" - - "--version" - - "{{ version }}" + command: ["/bin/bash", "-euxc", "{{command}}"] env: {{ common_env() }} volumeMounts: diff --git a/roles/openshift/job/defaults/main.yml b/roles/openshift/job/defaults/main.yml new file mode 100644 index 0000000000..de4dc17659 --- /dev/null +++ b/roles/openshift/job/defaults/main.yml @@ -0,0 +1,2 @@ +os_app: "{{app}}" +template: job.yml diff --git a/roles/openshift/job/tasks/main.yml b/roles/openshift/job/tasks/main.yml new file mode 100644 index 0000000000..239e1aa923 --- /dev/null +++ b/roles/openshift/job/tasks/main.yml @@ -0,0 +1,30 @@ +- name: Validate the job name {{ name }} + assert: + that: + - name is defined + fail_msg: "The 'name' variable is not defined" + +- name: Validate the command {{ command }} + assert: + that: + - command is defined + fail_msg: "The 'command' variable is not defined" + +- name: Copy job template to a temporary file + template: + src: "{{roles_path}}/openshift-apps/{{app}}/templates/{{template}}" + dest: "/etc/openshift_apps/{{app}}/job-{{name}}.yml" + +- name: Delete previous job (if any) + shell: oc -n {{os_app}} delete --ignore-not-found=true -f /etc/openshift_apps/{{app}}/job-{{name}}.yml + +- name: Start job + shell: oc -n {{os_app}} create -f /etc/openshift_apps/{{app}}/job-{{name}}.yml + +- debug: + msg: "Job started. You can watch the logs with: oc -n {{os_app}} logs -f job/job-{{name}}" +- debug: + msg: "You can cancel it with: oc -n {{os_app}} delete job/job-{{name}}" + +- name: Wait for job to complete + shell: oc -n {{os_app}} wait job/job-{{name}} --for condition=complete