Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions e2e_mig_samples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
- { role: ocp-26160-max-pvs, tags: ["ocp-26160-max-pvs", "ocp"] }
- { role: ocp-24787-redis, tags: ["ocp-24787-redis", "ocp"] }
- { role: ocp-24797-mongodb, tags: ["ocp-24797-mongodb", "ocp"] }
- { role: ocp-25022-cronjob-quiesced, tags: ["ocp-25022-cronjob-quiesced", "ocp"] }
vars_files:
- "{{ playbook_dir }}/config/mig_controller.yml"
- "{{ playbook_dir }}/config/defaults.yml"
15 changes: 15 additions & 0 deletions roles/ocp-25022-cronjob-quiesced/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
namespace: ocp-25022-cronjob-quiesced

cur_app_name: hellocron
cur_docker_image: docker.io/alpine

migration_sample_name: "{{ namespace }}"
migration_plan_name: "{{ migration_sample_name }}-migplan-{{ ansible_date_time.epoch }}"
migration_name: "{{ migration_sample_name }}-mig-{{ ansible_date_time.epoch }}"
with_deploy: true
with_migrate: true
with_cleanup: true
with_validate: true
pv: false
quiesce: true

20 changes: 20 additions & 0 deletions roles/ocp-25022-cronjob-quiesced/tasks/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
- name: Check namespace
k8s_facts:
kind: Namespace
name: "{{ namespace }}"
register: ns

- name: Create namespace
shell: "{{ oc_binary }} new-project {{ migration_sample_name }} --skip-config-write=true"
when: ns.resources | length == 0


- name: Deploy simple hello world cron job using external image in migration source cluster {{ migcluster_source_name }}
k8s:
state : present
namespace : "{{ migration_sample_name }}"
definition: "{{ lookup('template', 'deployment.yml.j2' )}}"
vars:
app_name: "{{ cur_app_name }}"
docker_image: "{{ cur_docker_image }}"

25 changes: 25 additions & 0 deletions roles/ocp-25022-cronjob-quiesced/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
- name: Cleanup resources
include_role:
name: migration_cleanup
when: with_cleanup|bool

- name: Create resources
import_tasks: deploy.yml
when: with_deploy|bool

- name: Start migration
import_tasks: migrate.yml
when: with_migrate|bool

- name: Track migration
import_tasks: track.yml
when: with_migrate|bool

- name: Validate source
import_tasks: validate-source.yml
when: (with_validate|bool) and (with_deploy|bool)

- name: Validate migration
import_tasks: validate-target.yml
when: (with_validate|bool) and (with_migrate|bool)

4 changes: 4 additions & 0 deletions roles/ocp-25022-cronjob-quiesced/tasks/migrate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
- name: Execute migration
include_role:
name: migration_run

3 changes: 3 additions & 0 deletions roles/ocp-25022-cronjob-quiesced/tasks/track.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
- name: Track migration
include_role:
name: migration_track
46 changes: 46 additions & 0 deletions roles/ocp-25022-cronjob-quiesced/tasks/validate-source.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
- name: check cronjob status in source cluster {{ migcluster_source_name }}
k8s_facts:
api_version: batch/v1beta1
kind: CronJob
namespace: "{{ migration_sample_name }}"
register: cronjob_info
until: cronjob_info.resources | length > 0
retries: 30

- debug:
msg: "{{ cronjob_info }}"

- name: sleep 1 minute to wait cron job to run
shell: sleep 60

- name: Check app {{ cur_app_name }} pod status
k8s_facts:
api_version: v1
kind: Pod
namespace: "{{ migration_sample_name }}"
label_selectors: "cronowner={{ cur_app_name }}"
field_selectors:
- status.phase=Succeeded
register: pod
until: pod.resources | length > 0
retries: 30

- debug:
msg: "{{ pod }}"

- name: get the log of cron job
#shell: oc logs $(oc get pod -n {{ migration_sample_name }}|grep Completed|tail -1|awk '{print $1}') -n {{ migration_sample_name }}
shell: oc logs $(oc get pod -n {{ migration_sample_name }}|tail -1|awk '{print $1}') -n {{ migration_sample_name }}
register: cronjob_log

- debug:
msg: "{{ cronjob_log }}"

- name: set expected log string
set_fact:
expected_log_str: "Hello! from namespace {{ migration_sample_name }} while using image {{ cur_docker_image }}"

- name: check the log of cron job
fail:
msg: "the log of cron job is wrong"
when: "expected_log_str not in cronjob_log.stdout"
64 changes: 64 additions & 0 deletions roles/ocp-25022-cronjob-quiesced/tasks/validate-target.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
- name: set expected output for MigMigration
set_fact:
expected_string: "The migration has completed successfully"

- name: check the migmigration running status
k8s_facts:
api_version: migration.openshift.io/v1alpha1
kind: MigMigration
namespace: "{{ migration_namespace }}"
field_selectors:
- metadata.name={{ migration_name }}
register: mig_result
until: "expected_string in (mig_result| json_query('resources[0].status.conditions[].message')|string)"
retries: 30


- name: check cronjob status in target cluster {{ migcluster_target_name }}
k8s_facts:
api_version: batch/v1beta1
kind: CronJob
namespace: "{{ migration_sample_name }}"
register: cronjob_info
until: cronjob_info.resources | length > 0
retries: 30

- debug:
msg: "{{ cronjob_info }}"

- name: sleep 1 minute to wait cron job to run
shell: sleep 60

- name: Check app {{ cur_app_name }} pod status
k8s_facts:
api_version: v1
kind: Pod
namespace: "{{ migration_sample_name }}"
label_selectors: "cronowner={{ cur_app_name }}"
field_selectors:
- status.phase=Succeeded
register: pod
until: pod.resources | length > 0
retries: 30

- debug:
msg: "{{ pod }}"

- name: get the lof of cron job
shell: oc logs $(oc get pod -n {{ migration_sample_name }}|grep Completed|tail -1|awk '{print $1}') -n {{ migration_sample_name }}
register: cronjob_log

- debug:
msg: "{{ cronjob_log }}"

- name: set expected log string
set_fact:
expected_log_str: "Hello! from namespace {{ migration_sample_name }} while using image {{ cur_docker_image }}"

- name: check the log of cron job
fail:
msg: "the log of cron job is wrong"
when: "expected_log_str not in cronjob_log.stdout"

#TODO: when possible, check that original cronjobs have not been quiesced.

35 changes: 35 additions & 0 deletions roles/ocp-25022-cronjob-quiesced/templates/deployment.yml.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
apiVersion: v1
items:
- apiVersion: batch/v1beta1
kind: CronJob
metadata:
labels:
app: '{{ app_name }}'
name: '{{ app_name }}'
spec:
jobTemplate:
metadata:
labels:
cronowner: '{{ app_name }}'
spec:
template:
metadata:
labels:
cronowner: '{{ app_name }}'
spec:
containers:
- args:
- /bin/sh
- -c
- echo "Hello! from namespace $CURRENT_NAMESPACE while using image {{ docker_image }}"
env:
- name: CURRENT_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
image: '{{ docker_image }}'
name: '{{ app_name }}'
restartPolicy: OnFailure
schedule: '*/1 * * * *'
kind: List
metadata: {}