From 805a2192edda9f9c3817d652f833c84422817714 Mon Sep 17 00:00:00 2001 From: Sandeep Yadav Date: Mon, 23 Nov 2020 19:48:49 +0530 Subject: [PATCH] Modify overcloud-deploy to support multiple stacks To make overcloud-deploy role support deployment of multiple overcloud stacks using a single undercloud node - we have generalized the vars for stack name and removed hardcoding on "overcloud" name. We also created a new playbook which install two overcloud stack - overcloud and overcloud-two. we also created j2 version of deploy and post-deploy script for overcloud-two stack. Intention is to create a new ci periodic job which test multi overcloud stack deployment, The new ci job will not be executed upstream but rather in periodic only. Change-Id: I353a0497cb4d44f82806381ee0a33b978c86be5f --- playbooks/multinode-multiple-overcloud.yml | 87 +++++++++++++++++++ roles/overcloud-deploy/defaults/main.yml | 5 +- .../overcloud-deploy/tasks/create-scripts.yml | 4 +- .../tasks/deploy-overcloud.yml | 2 +- roles/overcloud-deploy/tasks/post-deploy.yml | 6 +- .../templates/overcloud-deploy-post.sh.j2 | 10 +-- .../templates/overcloud-deploy.sh.j2 | 14 +-- 7 files changed, 108 insertions(+), 20 deletions(-) create mode 100644 playbooks/multinode-multiple-overcloud.yml diff --git a/playbooks/multinode-multiple-overcloud.yml b/playbooks/multinode-multiple-overcloud.yml new file mode 100644 index 000000000..f0f7e5ca7 --- /dev/null +++ b/playbooks/multinode-multiple-overcloud.yml @@ -0,0 +1,87 @@ +--- + +########################## +# Prepare for deployment # +########################## + +# From tripleo-quickstart/playbooks +- import_playbook: quickstart.yml +- import_playbook: multinode-undercloud.yml +- import_playbook: multinode-overcloud-prep.yml + +################################## +# Deploy First stack - overcloud # +################################## + +- name: Deploy the first overcloud + hosts: undercloud + gather_facts: false + roles: + - overcloud-deploy + environment: + TRIPLEO_ROOT: "{{ lookup('env','TRIPLEO_ROOT') }}" + +- name: Check the result of the deployment + hosts: localhost + tags: + - overcloud-deploy + tasks: + - name: ensure the deployment result has been read into memory + include_vars: "{{ local_working_dir }}/overcloud_deployment_result.json" + + # overcloud_deploy_result = ["failed", "passed"] + - name: did the deployment pass or fail? + debug: var=overcloud_deploy_result + failed_when: overcloud_deploy_result == "failed" + +####################################### +# Deploy Second stack - overcloud-two # +####################################### + +- name: Deploy the second overcloud + hosts: undercloud + gather_facts: false + vars: + stack_name: "overcloud-two" + overcloud_cloud_name: "{{ stack_name }}.localdomain" + overcloud_cloud_name_internal: "{{ stack_name }}.internalapi.localdomain" + overcloud_cloud_name_storage: "{{ stack_name }}.storage.localdomain" + overcloud_cloud_name_storage_management: "{{ stack_name }}.storagemgmt.localdomain" + overcloud_cloud_name_ctlplane: "{{ stack_name }}.ctlplane.localdomain" + roles: + - overcloud-deploy + environment: + TRIPLEO_ROOT: "{{ lookup('env','TRIPLEO_ROOT') }}" + +- name: Check the result of the deployment for overcloud-two + hosts: localhost + tags: + - overcloud-deploy + tasks: + - name: ensure the deployment result has been read into memory + include_vars: "{{ local_working_dir }}/overcloud_deployment_result.json" + + # overcloud_deploy_result = ["failed", "passed"] + - name: did the deployment pass or fail? + debug: var=overcloud_deploy_result + failed_when: overcloud_deploy_result == "failed" + +- name: Run tripleo-validations post-deployment tests + hosts: undercloud + gather_facts: false + tags: + - tripleo-validations + vars: + validations_group: ['post-deployment'] + roles: + - {role: tripleo-validations, + when: run_tripleo_validations|bool or run_tripleo_validations_negative_tests|bool} + +###################################### +# Run tempest on overcloud-two stack # +###################################### + +# From tripleo-quickstart/playbooks +- import_playbook: multinode-validate.yml + vars: + tempest_cloud_name: 'overcloud-two' diff --git a/roles/overcloud-deploy/defaults/main.yml b/roles/overcloud-deploy/defaults/main.yml index 2f47f20dc..18a704d44 100644 --- a/roles/overcloud-deploy/defaults/main.yml +++ b/roles/overcloud-deploy/defaults/main.yml @@ -1,12 +1,13 @@ --- # Script and log locations used during the deploy process. +stack_name: "overcloud" deploy_script: overcloud-deploy.sh.j2 deploy_cell_script: overcloud-deploy-cell.sh.j2 -deploy_log: "{{ working_dir }}/overcloud_deploy.log" +deploy_log: "{{ working_dir }}/{{ stack_name }}_deploy.log" deploy_cell_log: "{{ working_dir }}/cell_deploy.log" post_deploy_script: overcloud-deploy-post.sh.j2 -post_deploy_log: "{{ working_dir }}/overcloud_deploy_post.log" +post_deploy_log: "{{ working_dir }}/{{ stack_name }}_deploy_post.log" failed_deployments_log: "{{ working_dir }}/failed_deployments.log" failed_deployment_list: "{{ working_dir }}/failed_deployment_list.log" failed_cell_deployment_list: "{{ working_dir }}/failed_cell_deployment_list.log" diff --git a/roles/overcloud-deploy/tasks/create-scripts.yml b/roles/overcloud-deploy/tasks/create-scripts.yml index 37fbdc973..c47d76667 100644 --- a/roles/overcloud-deploy/tasks/create-scripts.yml +++ b/roles/overcloud-deploy/tasks/create-scripts.yml @@ -20,13 +20,13 @@ - name: Create overcloud deploy script template: src: "{{ deploy_script }}" - dest: "{{ working_dir }}/overcloud-deploy.sh" + dest: "{{ working_dir }}/{{ stack_name }}-deploy.sh" mode: 0755 - name: Create post-deploy script template: src: "{{ post_deploy_script }}" - dest: "{{ working_dir }}/overcloud-deploy-post.sh" + dest: "{{ working_dir }}/{{ stack_name }}-deploy-post.sh" mode: 0755 - name: Copy neutron l3 ha heat template diff --git a/roles/overcloud-deploy/tasks/deploy-overcloud.yml b/roles/overcloud-deploy/tasks/deploy-overcloud.yml index a4961fb0f..44c367fb6 100644 --- a/roles/overcloud-deploy/tasks/deploy-overcloud.yml +++ b/roles/overcloud-deploy/tasks/deploy-overcloud.yml @@ -2,7 +2,7 @@ - name: Deploy the overcloud shell: > set -o pipefail && - {{ working_dir }}/overcloud-deploy.sh 2>&1 {{ timestamper_cmd }} > {{ deploy_log }} + {{ working_dir }}/{{ stack_name }}-deploy.sh 2>&1 {{ timestamper_cmd }} > {{ deploy_log }} register: deploy_script_result ignore_errors: true when: step_deploy_overcloud|bool diff --git a/roles/overcloud-deploy/tasks/post-deploy.yml b/roles/overcloud-deploy/tasks/post-deploy.yml index 2491fa6be..6a4cd2dae 100644 --- a/roles/overcloud-deploy/tasks/post-deploy.yml +++ b/roles/overcloud-deploy/tasks/post-deploy.yml @@ -5,12 +5,12 @@ - name: Copy overcloudrc to ansible host fetch: flat: true - src: overcloudrc - dest: "{{ local_working_dir }}/overcloudrc" + src: "{{ stack_name }}rc" + dest: "{{ local_working_dir }}/{{ stack_name }}rc" - name: Run post-deploy script shell: > set -o pipefail && - {{ working_dir }}/overcloud-deploy-post.sh 2>&1 {{ timestamper_cmd }} > + {{ working_dir }}/{{ stack_name }}-deploy-post.sh 2>&1 {{ timestamper_cmd }} > {{ post_deploy_log }} changed_when: true diff --git a/roles/overcloud-deploy/templates/overcloud-deploy-post.sh.j2 b/roles/overcloud-deploy/templates/overcloud-deploy-post.sh.j2 index 4909c256d..8ea249e23 100644 --- a/roles/overcloud-deploy/templates/overcloud-deploy-post.sh.j2 +++ b/roles/overcloud-deploy/templates/overcloud-deploy-post.sh.j2 @@ -29,10 +29,10 @@ sudo sed -i '/^## BEGIN OVERCLOUD HOSTS/,/^## END OVERCLOUD HOSTS/ d' $HOSTFILE cat < /dev/null 2>&1; then openstack role create heat_stack_owner diff --git a/roles/overcloud-deploy/templates/overcloud-deploy.sh.j2 b/roles/overcloud-deploy/templates/overcloud-deploy.sh.j2 index e02204928..45c70b633 100644 --- a/roles/overcloud-deploy/templates/overcloud-deploy.sh.j2 +++ b/roles/overcloud-deploy/templates/overcloud-deploy.sh.j2 @@ -31,7 +31,7 @@ done {% if baremetal_provision|bool %} ## * Provision the baremetal nodes ## :: -openstack overcloud node provision --stack overcloud --output {{ working_dir }}/overcloud-baremetal-deployed.yaml {{ working_dir }}/overcloud_baremetal_deploy.yaml +openstack overcloud node provision --stack {{ stack_name }} --output {{ working_dir }}/overcloud-baremetal-deployed.yaml {{ working_dir }}/overcloud_baremetal_deploy.yaml if [ $? -ne 0 ]; then exit 1 fi @@ -39,7 +39,7 @@ fi ## * Deploy the overcloud! ## :: -openstack overcloud deploy {% if release is not in ['newton', 'ocata', 'pike', 'queens'] %}--override-ansible-cfg {{ working_dir }}/custom_ansible.cfg{% endif %} \ +openstack overcloud deploy --stack {{ stack_name }} {% if release is not in ['newton', 'ocata', 'pike', 'queens'] %}--override-ansible-cfg {{ working_dir }}/custom_ansible.cfg{% endif %} \ --templates {{overcloud_templates_path}} \ {{ deploy_args | regex_replace("\n", " ") }} \ "$@" && status_code=0 || status_code=$? @@ -47,7 +47,7 @@ openstack overcloud deploy {% if release is not in ['newton', 'ocata', 'pike', ' ### --stop_docs # Check if the deployment has started. If not, exit gracefully. If yes, check for errors. -if ! openstack stack list | grep -q overcloud; then +if ! openstack stack list | grep -q {{ stack_name }}; then echo "overcloud deployment not started. Check the deploy configurations" exit 1 @@ -57,12 +57,12 @@ if ! openstack stack list | grep -q overcloud; then elif ! openstack stack list | grep -Eq '(CREATE|UPDATE)_COMPLETE'; then {%if release not in ['mitaka', 'liberty'] %} # get the failures list - openstack stack failures list overcloud --long > {{ failed_deployment_list }} || true + openstack stack failures list {{ stack_name }} --long > {{ failed_deployment_list }} || true {% endif %} # get any puppet related errors for failed in $(openstack stack resource list \ - --nested-depth 5 overcloud | grep FAILED | + --nested-depth 5 {{ stack_name }} | grep FAILED | grep 'StructuredDeployment ' | cut -d '|' -f3) do echo "openstack software deployment show output for deployment: $failed" >> {{ failed_deployments_log }} @@ -80,9 +80,9 @@ elif ! openstack stack list | grep -Eq '(CREATE|UPDATE)_COMPLETE'; then done exit 1 {%if release in ['rocky', 'master'] %} -elif ! openstack overcloud status | grep -Eq 'DEPLOY_SUCCESS'; then +elif ! openstack overcloud status --plan {{ stack_name }} | grep -Eq 'DEPLOY_SUCCESS'; then # NOTE(emilien) "openstack overcloud failures" was introduced in Rocky - openstack overcloud failures >> {{ failed_deployment_list }} || true + openstack overcloud failures --plan {{ stack_name }} >> {{ failed_deployment_list }} || true {% endif %} fi exit $status_code