Siamak Sadeghianfar
2018-06-14 671d69dc677197560f12a3297051c7682b99fb17
fixed too many recursions issue during msac demo verify
1 files added
7 files modified
561 ■■■■ changed files
ansible/configs/openshift-demos/msa-cicd-eap-full.yml 118 ●●●●● patch | view | raw | blame | history
ansible/configs/openshift-demos/msa-cicd-eap-min.yml 106 ●●●●● patch | view | raw | blame | history
ansible/configs/openshift-demos/msa-full.yml 28 ●●●● patch | view | raw | blame | history
ansible/configs/openshift-demos/msa-min.yml 28 ●●●● patch | view | raw | blame | history
ansible/configs/openshift-demos/requirements-prod.yml 18 ●●●●● patch | view | raw | blame | history
ansible/configs/openshift-demos/requirements.yml 6 ●●●●● patch | view | raw | blame | history
ansible/configs/openshift-demos/verify_all.yml 84 ●●●●● patch | view | raw | blame | history
ansible/configs/openshift-demos/verify_tasks.yml 173 ●●●●● patch | view | raw | blame | history
ansible/configs/openshift-demos/msa-cicd-eap-full.yml
@@ -73,118 +73,6 @@
        prune_deployments_selector_stage: "comp-required!=true,app!=inventory"
      tags: demo
    # verify database deployments in cicd project
    - name: wait for database deployments in project {{ project_cicd }} to complete (succeed or fail)
      shell: "oc get pods -n {{ project_cicd }} -l comp-type=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_cicd }} selector="comp-type=database"
      tags: verify
    # verify database deployments in prod project
    - name: wait for database deployments in project {{ project_prod }} to complete (succeed or fail)
      shell: "oc get pods -n {{ project_prod }} -l comp-type=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_prod }} selector="comp-type=database"
    # verify database deployments in test project
    - name: wait for database deployments in project {{ project_test }} to complete (succeed or fail)
      shell: "oc get pods -n {{ project_test }} -l comp-type=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_test }} selector="comp-type=database"
    # verify database deployments in dev project
    - name: wait for database deployments in project {{ project_dev }} to complete (succeed or fail)
      shell: "oc get pods -n {{ project_dev }} -l comp-type=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_dev }} selector="comp-type=database"
      tags: verify
    # verify other deployments in cicd project
    - name: wait for other deployments in project {{ project_cicd }} to complete (succeed or fail)
      shell: "oc get pods -n {{ project_cicd }} -l comp-type!=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_cicd }} selector="comp-type!=database"
      tags: verify
    # verify other deployments in prod project
    - name: wait for other deployments in project {{ project_prod }} to complete (succeed or fail)
      shell: "oc get pods -n {{ project_prod }} -l comp-type!=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_prod }} selector="comp-type!=database"
      tags: verify
    # verify other deployments in stage project
    - name: wait for other deployments in project {{ project_stage }} to complete (succeed or fail)
      shell: "oc get pods -n {{ project_stage }} -l comp-type!=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_stage }} selector="comp-type!=database"
      tags: verify
    # verify other deployments in test project
    - name: wait for other deployments in project {{ project_test }} to complete (succeed or fail)
      shell: "oc get pods -n {{ project_test }} -l comp-type!=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_test }} selector="comp-type!=database"
      tags: verify
    # verify other deployments in dev project
    - name: wait for other deployments in project {{ project_dev }} to complete (succeed or fail)
      shell: "oc get pods -n {{ project_dev }} -l comp-type!=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_dev }} selector="comp-type!=database"
      tags: verify
    # verify deployed successfully
    - include_tasks: verify_all.yml
      tags: verify
ansible/configs/openshift-demos/msa-cicd-eap-min.yml
@@ -75,106 +75,6 @@
        disable_stage_project: true
      tags: demo
    # verify database deployments in cicd project
    - name: wait for database deployments in project {{ project_cicd }} to complete (succeed or fail)
      shell: "oc get pods -n {{ project_cicd }} -l comp-type=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_cicd }} selector="comp-type=database"
      tags: verify
    # verify database deployments in prod project
    - name: wait for database deployments in project {{ project_prod }} to complete (succeed or fail)
      shell: "oc get pods -n {{ project_prod }} -l comp-type=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_prod }} selector="comp-type=database"
    # verify database deployments in test project
    - name: wait for database deployments in project {{ project_test }} to complete (succeed or fail)
      shell: "oc get pods -n {{ project_test }} -l comp-type=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_test }} selector="comp-type=database"
    # verify database deployments in dev project
    - name: wait for database deployments in project {{ project_dev }} to complete (succeed or fail)
      shell: "oc get pods -n {{ project_dev }} -l comp-type=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_dev }} selector="comp-type=database"
      tags: verify
    # verify other deployments in cicd project
    - name: wait for other deployments in project {{ project_cicd }} to complete (succeed or fail)
      shell: "oc get pods -n {{ project_cicd }} -l comp-type!=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_cicd }} selector="comp-type!=database"
      tags: verify
    # verify other deployments in prod project
    - name: wait for other deployments in project {{ project_prod }} to complete (succeed or fail)
      shell: "oc get pods -n {{ project_prod }} -l comp-type!=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_prod }} selector="comp-type!=database"
      tags: verify
    # verify other deployments in test project
    - name: wait for other deployments in project {{ project_test }} to complete (succeed or fail)
      shell: "oc get pods -n {{ project_test }} -l comp-type!=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_test }} selector="comp-type!=database"
      tags: verify
    # verify other deployments in dev project
    - name: wait for other deployments in project {{ project_dev }} to complete (succeed or fail)
      shell: "oc get pods -n {{ project_dev }} -l comp-type!=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_dev }} selector="comp-type!=database"
      tags: verify
    # verify deployed successfully
    - include_tasks: verify_all.yml
      tags: verify
ansible/configs/openshift-demos/msa-full.yml
@@ -19,28 +19,6 @@
        hostname_suffix: "{{ apps_hostname_suffix }}"
        enable_cicd: false
    # verify database deployments
    - name: wait for database deployments to complete (succeed or fail)
      shell: "oc get pods -n {{ project_default }} -l comp-type=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_default }} selector="comp-type=database"
      tags: verify
    # verify other deployments
    - name: wait for other deployments to complete (succeed or fail)
      shell: "oc get pods -n {{ project_default }} -l comp-type!=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_default }} selector="comp-type!=database"
      tags: verify
    # verify deployed successfully
    - include_tasks: verify_all.yml
      tags: verify
ansible/configs/openshift-demos/msa-min.yml
@@ -22,28 +22,6 @@
        prune_deployments_selector: "comp-required!=true"
    # verify database deployments
    - name: wait for database deployments to complete (succeed or fail)
      shell: "oc get pods -n {{ project_default }} -l comp-type=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_default }} selector="comp-type=database"
      tags: verify
    # verify other deployments
    - name: wait for other deployments to complete (succeed or fail)
      shell: "oc get pods -n {{ project_default }} -l comp-type!=database | grep '\\-deploy\\s' | grep 'Running'"
      register: deployment_running
      until: deployment_running|failed
      retries: 20
      delay: 30
      ignore_errors: true
      tags: verify
    - include_tasks: verify_tasks.yml project_name={{ project_default }} selector="comp-type!=database"
      tags: verify
    # verify deployed successfully
    - include_tasks: verify_all.yml
      tags: verify
ansible/configs/openshift-demos/requirements-prod.yml
@@ -1,30 +1,24 @@
---
- src: siamaksade.openshift_common_facts
  # src: https://github.com/siamaksade/ansible-openshift-common-facts.git
  name: openshift_commons_facts
  version: ocp-3.7
  version: ocp-3.9
- src: siamaksade.openshift_sonatype_nexus
  # src: https://github.com/siamaksade/ansible-openshift-nexus.git
  name: openshift_sonatype_nexus
  version: ocp-3.7
  version: ocp-3.9
- src: siamaksade.openshift_gogs
  # src: https://github.com/siamaksade/ansible-openshift-gogs.git
  name: openshift_gogs
  version: ocp-3.7
  version: ocp-3.9
- src: siamaksade.openshift_jenkins
  # src: https://github.com/siamaksade/ansible-openshift-jenkins.git
  name: openshift_jenkins
  version: ocp-3.7
  version: ocp-3.9
- src: siamaksade.openshift_workshopper
  # src: https://github.com/siamaksade/ansible-openshift-workshopper.git
  name: openshift_workshopper
  version: ocp-3.7
  version: ocp-3.9
- src: siamaksade.openshift_coolstore
  # src: https://github.com/siamaksade/ansible-openshift-coolstore.git
  name: openshift_coolstore
  version: ocp-3.7
  version: ocp-3.9
ansible/configs/openshift-demos/requirements.yml
@@ -1,24 +1,18 @@
---
- src: siamaksade.openshift_common_facts
  # src: https://github.com/siamaksade/ansible-openshift-common-facts.git
  name: openshift_commons_facts
- src: siamaksade.openshift_sonatype_nexus
  # src: https://github.com/siamaksade/ansible-openshift-nexus.git
  name: openshift_sonatype_nexus
- src: siamaksade.openshift_gogs
  # src: https://github.com/siamaksade/ansible-openshift-gogs.git
  name: openshift_gogs
- src: siamaksade.openshift_jenkins
  # src: https://github.com/siamaksade/ansible-openshift-jenkins.git
  name: openshift_jenkins
- src: siamaksade.openshift_workshopper
  # src: https://github.com/siamaksade/ansible-openshift-workshopper.git
  name: openshift_workshopper
- src: siamaksade.openshift_coolstore
  # src: https://github.com/siamaksade/ansible-openshift-coolstore.git
  name: openshift_coolstore
ansible/configs/openshift-demos/verify_all.yml
New file
@@ -0,0 +1,84 @@
---
# wait for database deployments to finish
- name: wait for database deployments in project {{ project_cicd }} to complete (succeed or fail)
  shell: "oc get pods -n {{ project_cicd }} -l comp-type=database | grep '\\-deploy\\s' | grep 'Running'"
  register: deployment_running
  until: deployment_running|failed
  retries: 20
  delay: 30
  ignore_errors: true
- name: wait for database deployments in project {{ project_prod }} to complete (succeed or fail)
  shell: "oc get pods -n {{ project_prod }} -l comp-type=database | grep '\\-deploy\\s' | grep 'Running'"
  register: deployment_running
  until: deployment_running|failed
  retries: 20
  delay: 30
  ignore_errors: true
- name: wait for database deployments in project {{ project_test }} to complete (succeed or fail)
  shell: "oc get pods -n {{ project_test }} -l comp-type=database | grep '\\-deploy\\s' | grep 'Running'"
  register: deployment_running
  until: deployment_running|failed
  retries: 20
  delay: 30
  ignore_errors: true
- name: wait for database deployments in project {{ project_dev }} to complete (succeed or fail)
  shell: "oc get pods -n {{ project_dev }} -l comp-type=database | grep '\\-deploy\\s' | grep 'Running'"
  register: deployment_running
  until: deployment_running|failed
  retries: 20
  delay: 30
  ignore_errors: true
# verify database deployments
- include_tasks: verify_tasks.yml
  vars:
    selector: comp-type=database
# wait for non-database deployments to finish
- name: wait for other deployments in project {{ project_cicd }} to complete (succeed or fail)
  shell: "oc get pods -n {{ project_cicd }} -l comp-type!=database | grep '\\-deploy\\s' | grep 'Running'"
  register: deployment_running
  until: deployment_running|failed
  retries: 20
  delay: 30
  ignore_errors: true
- name: wait for other deployments in project {{ project_prod }} to complete (succeed or fail)
  shell: "oc get pods -n {{ project_prod }} -l comp-type!=database | grep '\\-deploy\\s' | grep 'Running'"
  register: deployment_running
  until: deployment_running|failed
  retries: 20
  delay: 30
  ignore_errors: true
- name: wait for other deployments in project {{ project_stage }} to complete (succeed or fail)
  shell: "oc get pods -n {{ project_stage }} -l comp-type!=database | grep '\\-deploy\\s' | grep 'Running'"
  register: deployment_running
  until: deployment_running|failed
  retries: 20
  delay: 30
  ignore_errors: true
- name: wait for other deployments in project {{ project_test }} to complete (succeed or fail)
  shell: "oc get pods -n {{ project_test }} -l comp-type!=database | grep '\\-deploy\\s' | grep 'Running'"
  register: deployment_running
  until: deployment_running|failed
  retries: 20
  delay: 30
  ignore_errors: true
- name: wait for other deployments in project {{ project_dev }} to complete (succeed or fail)
  shell: "oc get pods -n {{ project_dev }} -l comp-type!=database | grep '\\-deploy\\s' | grep 'Running'"
  register: deployment_running
  until: deployment_running|failed
  retries: 20
  delay: 30
  ignore_errors: true
# verify non-database deployments
- import_tasks: verify_tasks.yml
  vars:
    selector: comp-type!=database
ansible/configs/openshift-demos/verify_tasks.yml
@@ -1,29 +1,30 @@
---
- name: check if project {{ project_name }} exists
  shell: "{{ openshift_cli }} get project {{ project_name }}"
# verify cicd
- name: check if project {{ project_cicd }} exists
  shell: "{{ openshift_cli }} get project {{ project_cicd }}"
  register: result
  ignore_errors: true
  changed_when: false
- name: get deploymentconfig names in {{ project_name }}
  shell: "{{ openshift_cli }} get dc -l {{ selector }} -o jsonpath='{.items[*].metadata.name}' -n {{ project_name }}"
- name: get deploymentconfig names in {{ project_cicd }}
  shell: "{{ openshift_cli }} get dc -l {{ selector }} -o jsonpath='{.items[*].metadata.name}' -n {{ project_cicd }}"
  register: deploymentconfigs_list
  when: result|succeeded
  changed_when: false
- name: get deployment config replica counts in {{ project_name }}
  shell: "{{ openshift_cli }} get dc {{ deploymentconfigs_list.stdout }} -o json -n {{ project_name }}"
- name: get deployment config replica counts in {{ project_cicd }}
  shell: "{{ openshift_cli }} get dc {{ deploymentconfigs_list.stdout }} -o json -n {{ project_cicd }}"
  register: deploymentconfigs_list_json
  when: result|succeeded
  changed_when: false
- name: redeploy if deployment has failed
  shell: |
    {{ openshift_cli }} rollout cancel dc/{{ dc.metadata.name }} -n {{ project_name }} | true
    {{ openshift_cli }} rollout cancel dc/{{ dc.metadata.name }} -n {{ project_cicd }} | true
    sleep 30
    {{ openshift_cli }} rollout latest dc/{{ dc.metadata.name }} -n {{ project_name }}
    {{ openshift_cli }} rollout status dc/{{ dc.metadata.name }} -n {{ project_name }}
  when:
    {{ openshift_cli }} rollout latest dc/{{ dc.metadata.name }} -n {{ project_cicd }}
    {{ openshift_cli }} rollout status dc/{{ dc.metadata.name }} -n {{ project_cicd }}
  when:
    - result|succeeded
    - deploymentconfigs_list_json|succeeded
    - dc.metadata is defined
@@ -35,3 +36,155 @@
    label: "{{ dc.metadata.name if dc.metadata is defined else dc }}"
  with_items: "{{ deploymentconfigs_list_json.stdout|default('[]')|from_json|json_query('items') }}"
  ignore_errors: true
# verify prod
- name: check if project {{ project_prod }} exists
  shell: "{{ openshift_cli }} get project {{ project_prod }}"
  register: result
  ignore_errors: true
  changed_when: false
- name: get deploymentconfig names in {{ project_prod }}
  shell: "{{ openshift_cli }} get dc -l {{ selector }} -o jsonpath='{.items[*].metadata.name}' -n {{ project_prod }}"
  register: deploymentconfigs_list
  when: result|succeeded
  changed_when: false
- name: get deployment config replica counts in {{ project_prod }}
  shell: "{{ openshift_cli }} get dc {{ deploymentconfigs_list.stdout }} -o json -n {{ project_prod }}"
  register: deploymentconfigs_list_json
  when: result|succeeded
  changed_when: false
- name: redeploy if deployment has failed
  shell: |
    {{ openshift_cli }} rollout cancel dc/{{ dc.metadata.name }} -n {{ project_prod }} | true
    sleep 30
    {{ openshift_cli }} rollout latest dc/{{ dc.metadata.name }} -n {{ project_prod }}
    {{ openshift_cli }} rollout status dc/{{ dc.metadata.name }} -n {{ project_prod }}
  when:
    - result|succeeded
    - deploymentconfigs_list_json|succeeded
    - dc.metadata is defined
    - dc.status is defined
    - dc.spec is defined
    - dc.status.availableReplicas != dc.spec.replicas
  loop_control:
    loop_var: dc
    label: "{{ dc.metadata.name if dc.metadata is defined else dc }}"
  with_items: "{{ deploymentconfigs_list_json.stdout|default('[]')|from_json|json_query('items') }}"
  ignore_errors: true
# verify stage
- name: check if project {{ project_stage }} exists
  shell: "{{ openshift_cli }} get project {{ project_stage }}"
  register: result
  ignore_errors: true
  changed_when: false
- name: get deploymentconfig names in {{ project_stage }}
  shell: "{{ openshift_cli }} get dc -l {{ selector }} -o jsonpath='{.items[*].metadata.name}' -n {{ project_stage }}"
  register: deploymentconfigs_list
  when: result|succeeded
  changed_when: false
- name: get deployment config replica counts in {{ project_stage }}
  shell: "{{ openshift_cli }} get dc {{ deploymentconfigs_list.stdout }} -o json -n {{ project_stage }}"
  register: deploymentconfigs_list_json
  when: result|succeeded
  changed_when: false
- name: redeploy if deployment has failed
  shell: |
    {{ openshift_cli }} rollout cancel dc/{{ dc.metadata.name }} -n {{ project_stage }} | true
    sleep 30
    {{ openshift_cli }} rollout latest dc/{{ dc.metadata.name }} -n {{ project_stage }}
    {{ openshift_cli }} rollout status dc/{{ dc.metadata.name }} -n {{ project_stage }}
  when:
    - result|succeeded
    - deploymentconfigs_list_json|succeeded
    - dc.metadata is defined
    - dc.status is defined
    - dc.spec is defined
    - dc.status.availableReplicas != dc.spec.replicas
  loop_control:
    loop_var: dc
    label: "{{ dc.metadata.name if dc.metadata is defined else dc }}"
  with_items: "{{ deploymentconfigs_list_json.stdout|default('[]')|from_json|json_query('items') }}"
  ignore_errors: true
# verify test
- name: check if project {{ project_test }} exists
  shell: "{{ openshift_cli }} get project {{ project_test }}"
  register: result
  ignore_errors: true
  changed_when: false
- name: get deploymentconfig names in {{ project_test }}
  shell: "{{ openshift_cli }} get dc -l {{ selector }} -o jsonpath='{.items[*].metadata.name}' -n {{ project_test }}"
  register: deploymentconfigs_list
  when: result|succeeded
  changed_when: false
- name: get deployment config replica counts in {{ project_test }}
  shell: "{{ openshift_cli }} get dc {{ deploymentconfigs_list.stdout }} -o json -n {{ project_test }}"
  register: deploymentconfigs_list_json
  when: result|succeeded
  changed_when: false
- name: redeploy if deployment has failed
  shell: |
    {{ openshift_cli }} rollout cancel dc/{{ dc.metadata.name }} -n {{ project_test }} | true
    sleep 30
    {{ openshift_cli }} rollout latest dc/{{ dc.metadata.name }} -n {{ project_test }}
    {{ openshift_cli }} rollout status dc/{{ dc.metadata.name }} -n {{ project_test }}
  when:
    - result|succeeded
    - deploymentconfigs_list_json|succeeded
    - dc.metadata is defined
    - dc.status is defined
    - dc.spec is defined
    - dc.status.availableReplicas != dc.spec.replicas
  loop_control:
    loop_var: dc
    label: "{{ dc.metadata.name if dc.metadata is defined else dc }}"
  with_items: "{{ deploymentconfigs_list_json.stdout|default('[]')|from_json|json_query('items') }}"
  ignore_errors: true
# verify dev
- name: check if project {{ project_dev }} exists
  shell: "{{ openshift_cli }} get project {{ project_dev }}"
  register: result
  ignore_errors: true
  changed_when: false
- name: get deploymentconfig names in {{ project_dev }}
  shell: "{{ openshift_cli }} get dc -l {{ selector }} -o jsonpath='{.items[*].metadata.name}' -n {{ project_dev }}"
  register: deploymentconfigs_list
  when: result|succeeded
  changed_when: false
- name: get deployment config replica counts in {{ project_dev }}
  shell: "{{ openshift_cli }} get dc {{ deploymentconfigs_list.stdout }} -o json -n {{ project_dev }}"
  register: deploymentconfigs_list_json
  when: result|succeeded
  changed_when: false
- name: redeploy if deployment has failed
  shell: |
    {{ openshift_cli }} rollout cancel dc/{{ dc.metadata.name }} -n {{ project_dev }} | true
    sleep 30
    {{ openshift_cli }} rollout latest dc/{{ dc.metadata.name }} -n {{ project_dev }}
    {{ openshift_cli }} rollout status dc/{{ dc.metadata.name }} -n {{ project_dev }}
  when:
    - result|succeeded
    - deploymentconfigs_list_json|succeeded
    - dc.metadata is defined
    - dc.status is defined
    - dc.spec is defined
    - dc.status.availableReplicas != dc.spec.replicas
  loop_control:
    loop_var: dc
    label: "{{ dc.metadata.name if dc.metadata is defined else dc }}"
  with_items: "{{ deploymentconfigs_list_json.stdout|default('[]')|from_json|json_query('items') }}"
  ignore_errors: true