From d1a2a0d0290f0b55ff52c418f35270537b5dfa1e Mon Sep 17 00:00:00 2001 From: hu-weihua Date: Sun, 16 Feb 2020 15:49:41 +0800 Subject: [PATCH 1/3] automate the test case ocp-25022-cronjob-quiesced --- e2e_mig_samples.yml | 1 + .../defaults/main.yml | 15 +++++ .../tasks/deploy.yml | 9 +++ .../ocp-25022-cronjob-quiesced/tasks/main.yml | 25 ++++++++ .../tasks/migrate.yml | 4 ++ .../tasks/track.yml | 3 + .../tasks/validate-source.yml | 45 ++++++++++++++ .../tasks/validate-target.yml | 60 +++++++++++++++++++ .../templates/deployment.yml.j2 | 35 +++++++++++ 9 files changed, 197 insertions(+) create mode 100644 roles/ocp-25022-cronjob-quiesced/defaults/main.yml create mode 100644 roles/ocp-25022-cronjob-quiesced/tasks/deploy.yml create mode 100644 roles/ocp-25022-cronjob-quiesced/tasks/main.yml create mode 100644 roles/ocp-25022-cronjob-quiesced/tasks/migrate.yml create mode 100644 roles/ocp-25022-cronjob-quiesced/tasks/track.yml create mode 100644 roles/ocp-25022-cronjob-quiesced/tasks/validate-source.yml create mode 100644 roles/ocp-25022-cronjob-quiesced/tasks/validate-target.yml create mode 100644 roles/ocp-25022-cronjob-quiesced/templates/deployment.yml.j2 diff --git a/e2e_mig_samples.yml b/e2e_mig_samples.yml index 930076b..6631f64 100644 --- a/e2e_mig_samples.yml +++ b/e2e_mig_samples.yml @@ -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" diff --git a/roles/ocp-25022-cronjob-quiesced/defaults/main.yml b/roles/ocp-25022-cronjob-quiesced/defaults/main.yml new file mode 100644 index 0000000..b5dac8f --- /dev/null +++ b/roles/ocp-25022-cronjob-quiesced/defaults/main.yml @@ -0,0 +1,15 @@ +namespace: ocp-25022-cronjob-quiesced + +app_name: hellocron +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 + diff --git a/roles/ocp-25022-cronjob-quiesced/tasks/deploy.yml b/roles/ocp-25022-cronjob-quiesced/tasks/deploy.yml new file mode 100644 index 0000000..e858a0d --- /dev/null +++ b/roles/ocp-25022-cronjob-quiesced/tasks/deploy.yml @@ -0,0 +1,9 @@ +- 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: "{{ app_name }}" + docker_image: "{{ docker_image }}" + diff --git a/roles/ocp-25022-cronjob-quiesced/tasks/main.yml b/roles/ocp-25022-cronjob-quiesced/tasks/main.yml new file mode 100644 index 0000000..99e565b --- /dev/null +++ b/roles/ocp-25022-cronjob-quiesced/tasks/main.yml @@ -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) + diff --git a/roles/ocp-25022-cronjob-quiesced/tasks/migrate.yml b/roles/ocp-25022-cronjob-quiesced/tasks/migrate.yml new file mode 100644 index 0000000..6717d4f --- /dev/null +++ b/roles/ocp-25022-cronjob-quiesced/tasks/migrate.yml @@ -0,0 +1,4 @@ +- name: Execute migration + include_role: + name: migration_run + diff --git a/roles/ocp-25022-cronjob-quiesced/tasks/track.yml b/roles/ocp-25022-cronjob-quiesced/tasks/track.yml new file mode 100644 index 0000000..8a3cf7c --- /dev/null +++ b/roles/ocp-25022-cronjob-quiesced/tasks/track.yml @@ -0,0 +1,3 @@ +- name: Track migration + include_role: + name: migration_track diff --git a/roles/ocp-25022-cronjob-quiesced/tasks/validate-source.yml b/roles/ocp-25022-cronjob-quiesced/tasks/validate-source.yml new file mode 100644 index 0000000..e24d4c1 --- /dev/null +++ b/roles/ocp-25022-cronjob-quiesced/tasks/validate-source.yml @@ -0,0 +1,45 @@ +- 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 {{ app_name }} pod status + k8s_facts: + api_version: v1 + kind: Pod + namespace: "{{ migration_sample_name }}" + label_selectors: "cronowner={{ 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 cronquiesced-test|grep Completed|tail -1|awk '{print $1}') + 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 {{ 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" diff --git a/roles/ocp-25022-cronjob-quiesced/tasks/validate-target.yml b/roles/ocp-25022-cronjob-quiesced/tasks/validate-target.yml new file mode 100644 index 0000000..3024882 --- /dev/null +++ b/roles/ocp-25022-cronjob-quiesced/tasks/validate-target.yml @@ -0,0 +1,60 @@ +- name: check the migmigration running status + k8s_facts: + api_version: migration.openshift.io/v1alpha1 + kind: MigMigration + namespace: "{{ migration_namespace }}" + field_selectors: + - metadata.name={{ metadata }} + register: mig_result + until: "mig_result.resources[0].status.conditions.message is The migration has completed successfully." + 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 {{ app_name }} pod status + k8s_facts: + api_version: v1 + kind: Pod + namespace: "{{ migration_sample_name }}" + label_selectors: "cronowner={{ 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 cronquiesced-test|grep Completed|tail -1|awk '{print $1}') + 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 {{ 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. + diff --git a/roles/ocp-25022-cronjob-quiesced/templates/deployment.yml.j2 b/roles/ocp-25022-cronjob-quiesced/templates/deployment.yml.j2 new file mode 100644 index 0000000..aa2b809 --- /dev/null +++ b/roles/ocp-25022-cronjob-quiesced/templates/deployment.yml.j2 @@ -0,0 +1,35 @@ +apiVersion: v1 +items: +- apiVersion: {{ cronjob_api }} + 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: {} From 315d6840216f65b107824c50bf9f17e6d1b0b37b Mon Sep 17 00:00:00 2001 From: hu-weihua Date: Sun, 16 Feb 2020 21:02:30 +0800 Subject: [PATCH 2/3] update some typo --- .../defaults/main.yml | 4 ++-- .../ocp-25022-cronjob-quiesced/tasks/deploy.yml | 15 +++++++++++++-- .../tasks/validate-source.yml | 17 +++++++++-------- .../tasks/validate-target.yml | 14 +++++++------- .../templates/deployment.yml.j2 | 2 +- 5 files changed, 32 insertions(+), 20 deletions(-) diff --git a/roles/ocp-25022-cronjob-quiesced/defaults/main.yml b/roles/ocp-25022-cronjob-quiesced/defaults/main.yml index b5dac8f..221e343 100644 --- a/roles/ocp-25022-cronjob-quiesced/defaults/main.yml +++ b/roles/ocp-25022-cronjob-quiesced/defaults/main.yml @@ -1,7 +1,7 @@ namespace: ocp-25022-cronjob-quiesced -app_name: hellocron -docker_image: docker.io/alpine +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 }}" diff --git a/roles/ocp-25022-cronjob-quiesced/tasks/deploy.yml b/roles/ocp-25022-cronjob-quiesced/tasks/deploy.yml index e858a0d..6901e48 100644 --- a/roles/ocp-25022-cronjob-quiesced/tasks/deploy.yml +++ b/roles/ocp-25022-cronjob-quiesced/tasks/deploy.yml @@ -1,9 +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: "{{ app_name }}" - docker_image: "{{ docker_image }}" + app_name: "{{ cur_app_name }}" + docker_image: "{{ cur_docker_image }}" diff --git a/roles/ocp-25022-cronjob-quiesced/tasks/validate-source.yml b/roles/ocp-25022-cronjob-quiesced/tasks/validate-source.yml index e24d4c1..f8414d8 100644 --- a/roles/ocp-25022-cronjob-quiesced/tasks/validate-source.yml +++ b/roles/ocp-25022-cronjob-quiesced/tasks/validate-source.yml @@ -13,12 +13,12 @@ - name: sleep 1 minute to wait cron job to run shell: sleep 60 -- name: Check app {{ app_name }} pod status +- name: Check app {{ cur_app_name }} pod status k8s_facts: api_version: v1 kind: Pod namespace: "{{ migration_sample_name }}" - label_selectors: "cronowner={{ app_name }}" + label_selectors: "cronowner={{ cur_app_name }}" field_selectors: - status.phase=Succeeded register: pod @@ -28,8 +28,9 @@ - debug: msg: "{{ pod }}" -- name: get the lof of cron job - shell: oc logs $(oc get pod -n cronquiesced-test|grep Completed|tail -1|awk '{print $1}') +- 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: @@ -37,9 +38,9 @@ - name: set expected log string set_fact: - expected_log_str: "Hello! from namespace{{ migration_sample_name }} while using image {{ docker_image }}" + 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" + fail: + msg: "the log of cron job is wrong" + when: "expected_log_str not in cronjob_log.stdout" diff --git a/roles/ocp-25022-cronjob-quiesced/tasks/validate-target.yml b/roles/ocp-25022-cronjob-quiesced/tasks/validate-target.yml index 3024882..972ce31 100644 --- a/roles/ocp-25022-cronjob-quiesced/tasks/validate-target.yml +++ b/roles/ocp-25022-cronjob-quiesced/tasks/validate-target.yml @@ -4,7 +4,7 @@ kind: MigMigration namespace: "{{ migration_namespace }}" field_selectors: - - metadata.name={{ metadata }} + - metadata.name={{ migration_name }} register: mig_result until: "mig_result.resources[0].status.conditions.message is The migration has completed successfully." retries: 30 @@ -25,12 +25,12 @@ - name: sleep 1 minute to wait cron job to run shell: sleep 60 -- name: Check app {{ app_name }} pod status +- name: Check app {{ cur_app_name }} pod status k8s_facts: api_version: v1 kind: Pod namespace: "{{ migration_sample_name }}" - label_selectors: "cronowner={{ app_name }}" + label_selectors: "cronowner={{ cur_app_name }}" field_selectors: - status.phase=Succeeded register: pod @@ -41,7 +41,7 @@ msg: "{{ pod }}" - name: get the lof of cron job - shell: oc logs $(oc get pod -n cronquiesced-test|grep Completed|tail -1|awk '{print $1}') + 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: @@ -49,12 +49,12 @@ - name: set expected log string set_fact: - expected_log_str: "Hello! from namespace{{ migration_sample_name }} while using image {{ docker_image }}" + expected_log_str: "Hello! from namespace {{ migration_sample_name }} while using image {{ cur_docker_image }}" - name: check the log of cron job - fail: + fail: msg: "the log of cron job is wrong" - when: "expected_log_str not in cronjob_log.stdout" + when: "expected_log_str not in cronjob_log.stdout" #TODO: when possible, check that original cronjobs have not been quiesced. diff --git a/roles/ocp-25022-cronjob-quiesced/templates/deployment.yml.j2 b/roles/ocp-25022-cronjob-quiesced/templates/deployment.yml.j2 index aa2b809..a42cf38 100644 --- a/roles/ocp-25022-cronjob-quiesced/templates/deployment.yml.j2 +++ b/roles/ocp-25022-cronjob-quiesced/templates/deployment.yml.j2 @@ -1,6 +1,6 @@ apiVersion: v1 items: -- apiVersion: {{ cronjob_api }} +- apiVersion: batch/v1beta1 kind: CronJob metadata: labels: From f24d5088baa80638f9086d8d7e9e62ee7885c4cd Mon Sep 17 00:00:00 2001 From: hu-weihua Date: Sun, 16 Feb 2020 21:58:53 +0800 Subject: [PATCH 3/3] change check method --- roles/ocp-25022-cronjob-quiesced/tasks/validate-target.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/roles/ocp-25022-cronjob-quiesced/tasks/validate-target.yml b/roles/ocp-25022-cronjob-quiesced/tasks/validate-target.yml index 972ce31..92a8bd9 100644 --- a/roles/ocp-25022-cronjob-quiesced/tasks/validate-target.yml +++ b/roles/ocp-25022-cronjob-quiesced/tasks/validate-target.yml @@ -1,3 +1,7 @@ +- 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 @@ -6,7 +10,7 @@ field_selectors: - metadata.name={{ migration_name }} register: mig_result - until: "mig_result.resources[0].status.conditions.message is The migration has completed successfully." + until: "expected_string in (mig_result| json_query('resources[0].status.conditions[].message')|string)" retries: 30