Sync up upgrades and updates workarounds mechanism.

Up to now, the minor updates workarounds was not being used very much
being a little bit left away in comparision with what it was implemented
for the upgrades one. This patch allows minor updates to benefit from
the same workarounds mechanism, at the same time that any improvement
in the upgrades mechanism will be available for updates too.

Also, it was removed the references to the {{ working_dir }} variable
in those shell tasks which have the argument changing directory to that
very same {{ working_dir }}, mostly to simplify the tasks and remove
redundancy.

Change-Id: Ibc57c51ff19ebad093c887bee545ca6a7d51827f
This commit is contained in:
Jose Luis Franco Arza 2019-09-24 22:02:20 +02:00 committed by Lukas Bezdicka
parent 4d189c08d4
commit ef15456503
10 changed files with 191 additions and 92 deletions

View File

@ -85,22 +85,11 @@ overcloud_upgrade_converge_script: "{{ working_dir }}/overcloud_upgrade_converge
workload_launch_script: "{{ working_dir }}/workload_launch.sh"
# overcloud jinja template name
overcloud_pre_update_workarounds_template: overcloud_pre_update_workarounds.sh.j2
update_workarounds_template: update_workarounds.sh.j2
overcloud_update_prepare_template: overcloud_update_prepare.sh.j2
overcloud_update_run_template: overcloud_update_run.sh.j2
overcloud_update_converge_template: overcloud_update_converge.sh.j2
# overcloud update scripts
pre_undercloud_update_workarounds_script: "{{ working_dir }}/pre_undercloud_update_workarounds.sh"
post_undercloud_update_workarounds_script: "{{ working_dir }}/post_undercloud_update_workarounds.sh"
pre_overcloud_update_prepare_workarounds_script: "{{ working_dir }}/pre_overcloud_update_prepare_workarounds.sh"
post_overcloud_update_prepare_workarounds_script: "{{ working_dir }}/post_overcloud_update_prepare_workarounds.sh"
pre_overcloud_update_run_workarounds_script: "{{ working_dir }}/pre_overcloud_update_run_workarounds.sh"
post_overcloud_update_run_workarounds_script: "{{ working_dir }}/post_overcloud_update_run_workarounds.sh"
pre_overcloud_update_converge_workarounds_script: "{{ working_dir }}/pre_overcloud_update_converge_workarounds.sh"
post_overcloud_update_converge_workarounds_script: "{{ working_dir }}/post_overcloud_update_converge_workarounds.sh"
overcloud_update_prepare_script: "{{ working_dir }}/overcloud_update_prepare.sh"
overcloud_update_run_script_base: "{{ working_dir }}/overcloud_update_run"
overcloud_update_converge_script: "{{ working_dir }}/overcloud_update_converge.sh"

View File

@ -14,18 +14,19 @@
- name: get auxiliary facts for major upgrades
import_tasks: ../common/auxilary-facts.yaml
- name: create scripts with workarounds
- name: create update workaround scripts
template:
src: "{{ update_workarounds_template }}"
dest: "{{ working_dir }}/{{ item.script }}"
mode: 0755
src: workarounds.sh.j2
dest: "{{ working_dir }}/{{ item }}.sh"
mode: 0775
force: true
loop: '{{ pre_overcloud_update_prepare_workarounds|default([]) }}
+ {{ post_overcloud_update_prepare_workarounds|default([]) }}
+ {{ pre_overcloud_update_run_workarounds|default([]) }}
+ {{ post_overcloud_update_run_workarounds|default([]) }}
+ {{ pre_overcloud_update_converge_workarounds|default([]) }}
+ {{ post_overcloud_update_converge_workarounds|default([]) }}'
loop:
- 'pre_overcloud_update_prepare_workarounds'
- 'post_overcloud_update_prepare_workarounds'
- 'pre_overcloud_update_run_workarounds'
- 'post_overcloud_update_run_workarounds'
- 'pre_overcloud_update_converge_workarounds'
- 'post_overcloud_update_converge_workarounds'
when: updates_workarounds|bool
- name: include l3 agent tasks

View File

@ -6,12 +6,13 @@
mode: 0775
force: true
- name: create scripts with workarounds
- name: create update workaround scripts for undercloud
template:
src: "{{ update_workarounds_template }}"
dest: "{{ working_dir }}/{{ item.script }}"
mode: 0755
src: workarounds.sh.j2
dest: "{{ working_dir }}/{{ item }}.sh"
mode: 0775
force: true
loop: '{{ pre_undercloud_update_workarounds|default([])
+ post_undercloud_update_workarounds|default([]) }}'
loop:
- 'pre_undercloud_update_workarounds'
- 'post_undercloud_update_workarounds'
when: updates_workarounds|bool

View File

@ -9,13 +9,17 @@
when: update_noop|bool or undercloud_update|bool
- block:
- name: undercloud pre-update workarounds
- name: apply pre undercloud update workarounds
shell: |
set -o pipefail
source {{ undercloud_rc }}
bash {{ pre_undercloud_update_workarounds_script }} 2>&1 {{ timestamper_cmd }} > \
{{ working_dir }}/uc_pre_update_workarounds.log
bash pre_undercloud_update_workarounds.sh 2>&1 {{ timestamper_cmd }} > \
pre_undercloud_update_workarounds.log
args:
chdir: "{{ working_dir }}"
when: updates_workarounds|bool
tags:
- undercloud_update
- name: install/update required packages before updating the undercloud
become: true
@ -29,13 +33,17 @@
{{ working_dir }}/undercloud_update.log
tags: undercloud_update
- name: undercloud post-update workarounds
- name: apply post undercloud update workarounds
shell: |
set -o pipefail
source {{ undercloud_rc }}
bash {{ post_undercloud_update_workarounds_script }} 2>&1 {{ timestamper_cmd }} > \
{{ working_dir }}/uc_post_update_workarounds.log
bash post_undercloud_update_workarounds.sh 2>&1 {{ timestamper_cmd }} > \
post_undercloud_update_workarounds.log
args:
chdir: "{{ working_dir }}"
when: updates_workarounds|bool
tags:
- undercloud_update
- name: validate undercloud update
import_tasks: ../common/undercloud_validate_upgrade.yaml
@ -53,64 +61,81 @@
when: update_noop|bool or overcloud_update|bool
- block:
- name: overcloud pre-update prepare workarounds
- name: apply pre overcloud update prepare workarounds
shell: |
set -o pipefail
source {{ undercloud_rc }}
bash {{ pre_overcloud_update_prepare_workarounds_script }} 2>&1 {{ timestamper_cmd }} > \
{{ working_dir }}/pre_overcloud_update_prepare_workarounds.log
bash pre_overcloud_update_prepare_workarounds.sh 2>&1 {{ timestamper_cmd }} > \
pre_overcloud_update_prepare_workarounds.log
args:
chdir: "{{ working_dir }}"
when: updates_workarounds|bool
tags:
- overcloud_update_prepare
- name: import oc update prepare tasks
import_tasks: overcloud_update_prepare.yml
tags:
- overcloud_update
- overcloud_update_prepare
- name: overcloud post-update prepare workarounds
- name: apply post overcloud update prepare workarounds
shell: |
set -o pipefail
source {{ undercloud_rc }}
bash {{ post_overcloud_update_prepare_workarounds_script }} 2>&1 {{ timestamper_cmd }} > \
{{ working_dir }}/post_overcloud_update_prepare_workarounds.log
bash post_overcloud_update_prepare_workarounds.sh 2>&1 {{ timestamper_cmd }} > \
post_overcloud_update_prepare_workarounds.log
args:
chdir: "{{ working_dir }}"
when: updates_workarounds|bool
tags:
- overcloud_update_prepare
- name: prepare containers for overcloud update
args:
chdir: "{{ working_dir }}"
shell: |
set -o pipefail
bash {{ working_dir }}/overcloud_prepare_containers.sh {{ timestamper_cmd }} > overcloud_update_prepare_containers.log
tags: overcloud_update_prepare_containers
bash overcloud_prepare_containers.sh {{ timestamper_cmd }} > overcloud_update_prepare_containers.log
tags:
- overcloud_update_prepare_containers
- name: Ensure ansible-pacemaker module is present in CI.
package:
name: ansible-pacemaker
state: latest
when: tripleo_ci|default(false)|bool
tags: overcloud_update
become: true
tags:
- overcloud_update_run
- name: overcloud pre-update run workarounds
- name: apply pre overcloud update run workarounds
shell: |
set -o pipefail
source {{ undercloud_rc }}
bash {{ pre_overcloud_update_run_workarounds_script }} 2>&1 {{ timestamper_cmd }} > \
{{ working_dir }}/pre_overcloud_update_run_workarounds.log
bash pre_overcloud_update_run_workarounds.sh 2>&1 {{ timestamper_cmd }} > \
pre_overcloud_update_run_workarounds.log
args:
chdir: "{{ working_dir }}"
when: updates_workarounds|bool
tags:
- overcloud_update_run
- name: import overcloud update run tasks
import_tasks: overcloud_update_run.yml
tags:
- overcloud_update
- overcloud_update_run
- name: overcloud post-update run workarounds
- name: apply post overcloud update run workarounds
shell: |
set -o pipefail
source {{ undercloud_rc }}
bash {{ post_overcloud_update_run_workarounds_script }} 2>&1 {{ timestamper_cmd }} > \
{{ working_dir }}/post_overcloud_update_run_workarounds.log
bash post_overcloud_update_run_workarounds.sh 2>&1 {{ timestamper_cmd }} > \
post_overcloud_update_run_workarounds.log
args:
chdir: "{{ working_dir }}"
when: updates_workarounds|bool
tags:
- overcloud_update_run
- name: update Ceph
include_tasks: ceph_update_run.yml
@ -124,8 +149,14 @@
bash {{ working_dir }}/overcloud_online_data_migration.sh 2>&1 {{ timestamper_cmd }} > overcloud_update_data_migration.log
- name: apply pre overcloud update converge workarounds
command: "{{ working_dir }}/pre_overcloud_update_converge_workarounds.sh"
when: updates_workarounds
shell: |
set -o pipefail
source {{ undercloud_rc }}
bash pre_overcloud_update_converge_workarounds.sh 2>&1 {{ timestamper_cmd }} > \
pre_overcloud_update_converge_workarounds.log
args:
chdir: "{{ working_dir }}"
when: updates_workarounds|bool
tags: overcloud_update_converge
- name: import overcloud update converge tasks
@ -133,8 +164,14 @@
tags: overcloud_update_converge
- name: apply post overcloud update converge workarounds
command: "{{ working_dir }}/post_overcloud_update_converge_workarounds.sh"
when: updates_workarounds
shell: |
set -o pipefail
source {{ undercloud_rc }}
bash post_overcloud_update_converge_workarounds.sh 2>&1 {{ timestamper_cmd }} > \
post_overcloud_update_converge_workarounds.log
args:
chdir: "{{ working_dir }}"
when: updates_workarounds|bool
tags: overcloud_update_converge
- name: validate overcloud docker images/containers
@ -145,7 +182,7 @@
{{ working_dir }}/validate_oc_images_containers.log
when: overcloud_images_validate|bool
tags:
- overcloud_update
- overcloud_images_validate
- name: import nova_actions_check tasks
import_tasks: ../common/nova_actions_check.yml

View File

@ -39,6 +39,7 @@
src: workarounds.sh.j2
dest: "{{ working_dir }}/{{ item }}.sh"
mode: 0775
force: true
loop:
- 'pre_overcloud_upgrade_prepare_workarounds'
- 'post_overcloud_upgrade_prepare_workarounds'

View File

@ -14,7 +14,7 @@
- name: apply pre undercloud OS upgrade workarounds
shell: |
set -o pipefail
bash {{ working_dir }}/pre_undercloud_os_upgrade_workarounds.sh 2>&1 {{ timestamper_cmd }} > pre_undercloud_os_upgrade_workarounds.log
bash pre_undercloud_os_upgrade_workarounds.sh 2>&1 {{ timestamper_cmd }} > pre_undercloud_os_upgrade_workarounds.log
args:
chdir: "{{ working_dir }}"
when: upgrade_workarounds|bool
@ -28,7 +28,7 @@
- name: apply post undercloud OS upgrade workarounds
shell: |
set -o pipefail
bash {{ working_dir }}/post_undercloud_os_upgrade_workarounds.sh 2>&1 {{ timestamper_cmd }} > post_undercloud_os_upgrade_workarounds.log
bash post_undercloud_os_upgrade_workarounds.sh 2>&1 {{ timestamper_cmd }} > post_undercloud_os_upgrade_workarounds.log
args:
chdir: "{{ working_dir }}"
when: upgrade_workarounds|bool
@ -40,7 +40,7 @@
- name: apply pre undercloud upgrade workarounds
shell: |
set -o pipefail
bash {{ working_dir }}/pre_undercloud_upgrade_workarounds.sh 2>&1 {{ timestamper_cmd }} > pre_undercloud_upgrade_workarounds.log
bash pre_undercloud_upgrade_workarounds.sh 2>&1 {{ timestamper_cmd }} > pre_undercloud_upgrade_workarounds.log
args:
chdir: "{{ working_dir }}"
when: upgrade_workarounds
@ -68,7 +68,7 @@
- name: apply post undercloud upgrade workarounds
shell: |
set -o pipefail
bash {{ working_dir }}/post_undercloud_upgrade_workarounds.sh 2>&1 {{ timestamper_cmd }} > post_undercloud_upgrade_workarounds.log
bash post_undercloud_upgrade_workarounds.sh 2>&1 {{ timestamper_cmd }} > post_undercloud_upgrade_workarounds.log
args:
chdir: "{{ working_dir }}"
when: upgrade_workarounds
@ -87,7 +87,7 @@
- name: apply pre overcloud upgrade prepare workarounds
shell: |
set -o pipefail
bash {{ working_dir }}/pre_overcloud_upgrade_prepare_workarounds.sh 2>&1 {{ timestamper_cmd }} > pre_overcloud_upgrade_prepare_workarounds.log
bash pre_overcloud_upgrade_prepare_workarounds.sh 2>&1 {{ timestamper_cmd }} > pre_overcloud_upgrade_prepare_workarounds.log
args:
chdir: "{{ working_dir }}"
when: upgrade_workarounds
@ -99,7 +99,7 @@
- name: apply post overcloud upgrade prepare workarounds
shell: |
set -o pipefail
bash {{ working_dir }}/post_overcloud_upgrade_prepare_workarounds.sh 2>&1 {{ timestamper_cmd }} > post_overcloud_upgrade_prepare_workarounds.log
bash post_overcloud_upgrade_prepare_workarounds.sh 2>&1 {{ timestamper_cmd }} > post_overcloud_upgrade_prepare_workarounds.log
args:
chdir: "{{ working_dir }}"
when: upgrade_workarounds
@ -110,7 +110,7 @@
chdir: "{{ working_dir }}"
shell: |
set -o pipefail
bash {{ working_dir }}/overcloud_prepare_containers.sh {{ timestamper_cmd }} > overcloud_upgrade_prepare_containers.log
bash overcloud_prepare_containers.sh {{ timestamper_cmd }} > overcloud_upgrade_prepare_containers.log
tags: overcloud_upgrade_prepare_containers
- name: Ensure ansible-pacemaker module is present in CI.
@ -133,7 +133,7 @@
- name: apply pre Ceph upgrade workarounds
shell: |
set -o pipefail
bash {{ working_dir }}/pre_ceph_upgrade_workarounds.sh 2>&1 {{ timestamper_cmd }} > pre_ceph_upgrade_workarounds.log
bash pre_ceph_upgrade_workarounds.sh 2>&1 {{ timestamper_cmd }} > pre_ceph_upgrade_workarounds.log
args:
chdir: "{{ working_dir }}"
when: upgrade_workarounds
@ -145,7 +145,7 @@
- name: apply post Ceph upgrade workarounds
shell: |
set -o pipefail
bash {{ working_dir }}/post_ceph_upgrade_workarounds.sh 2>&1 {{ timestamper_cmd }} > post_ceph_upgrade_workarounds.log
bash post_ceph_upgrade_workarounds.sh 2>&1 {{ timestamper_cmd }} > post_ceph_upgrade_workarounds.log
args:
chdir: "{{ working_dir }}"
when: upgrade_workarounds
@ -155,13 +155,13 @@
chdir: "{{ working_dir }}"
shell: |
set -o pipefail
bash {{ working_dir }}/overcloud_online_data_migration.sh 2>&1 {{ timestamper_cmd }} > overcloud_upgrade_data_migration.log
bash overcloud_online_data_migration.sh 2>&1 {{ timestamper_cmd }} > overcloud_upgrade_data_migration.log
######## Overcloud upgrade converge ########
- name: apply pre overcloud upgrade converge workarounds
shell: |
set -o pipefail
bash {{ working_dir }}/pre_overcloud_upgrade_converge_workarounds.sh 2>&1 {{ timestamper_cmd }} > pre_overcloud_upgrade_converge_workarounds.log
bash pre_overcloud_upgrade_converge_workarounds.sh 2>&1 {{ timestamper_cmd }} > pre_overcloud_upgrade_converge_workarounds.log
args:
chdir: "{{ working_dir }}"
when: upgrade_workarounds
@ -173,7 +173,7 @@
- name: apply post overcloud upgrade converge workarounds
shell: |
set -o pipefail
bash {{ working_dir }}/post_overcloud_upgrade_converge_workarounds.sh 2>&1 {{ timestamper_cmd }} > post_overcloud_upgrade_converge_workarounds.log
bash post_overcloud_upgrade_converge_workarounds.sh 2>&1 {{ timestamper_cmd }} > post_overcloud_upgrade_converge_workarounds.log
args:
chdir: "{{ working_dir }}"
when: upgrade_workarounds

View File

@ -1,23 +0,0 @@
#!/bin/env bash
#
# Apply workarounds for minor updates
#
set -euo pipefail
{% if item.workarounds|default([]) %}
{% for workaround in item.workarounds %}
{% if workaround.patch_id %}
curl -4 'https://review.opendev.org/changes/{{workaround.patch_id}}/revisions/current/patch?download' | \
base64 -d | \
sudo patch -d {{ workaround.directory }} -p1 {{ workaround.misc }}
{% endif %} {# end of item.patch_id #}
{% if workaround.command %}
{{ workaround.command }}
{% endif %} {# apply command for workaround #}
{% endfor %} {# end of workarounds iteration #}
{% else %} {# if workarounds not needed #}
echo "No Workarounds Needed"
exit 0
{% endif %} {# end if no workarounds #}

View File

@ -34,9 +34,9 @@ function apply_patch {
if sudo patch --dry-run --reverse --force -d ${patch_dir} -p1 < ${temp_dir}/patch.txt >/dev/null 2>&1
then
echo "Patch ${patch_id} already applied, skipping"
else
sudo patch -Ns -d ${patch_dir} -p1 < ${temp_dir}/patch.txt
else
echo "Patch ${patch_id} already applied, skipping"
fi
sudo rm -Rf ${temp_dir}
@ -128,6 +128,8 @@ ansible_patch {{ key }}
{% endif -%}
{% endmacro -%}
{% if upgrade_workarounds|bool -%}
# Render for Upgrades
{{ render_workarounds(pre_undercloud_os_upgrade_workarounds|default([]),'pre_undercloud_os_upgrade_workarounds') }}
{# finish pre_undercloud_os_upgrade_workarounds #}
{{ render_workarounds(pre_undercloud_upgrade_workarounds|default([]),'pre_undercloud_upgrade_workarounds') }}
@ -154,3 +156,24 @@ ansible_patch {{ key }}
{# finish pre_ceph_upgrade_workarounds #}
{{ render_workarounds(post_ceph_upgrade_workarounds|default([]),'post_ceph_upgrade_workarounds') }}
{# finish post_ceph_upgrade_workarounds #}
{% endif -%}
{% if updates_workarounds|bool -%}
# Render for Updates
{{ render_workarounds(pre_undercloud_update_workarounds|default([]),'pre_undercloud_update_workarounds') }}
{# finish pre_undercloud_update_workarounds #}
{{ render_workarounds(post_undercloud_update_workarounds|default([]),'post_undercloud_update_workarounds') }}
{# finish post_undercloud_update_workarounds #}
{{ render_workarounds(pre_overcloud_update_prepare_workarounds|default([]),'pre_overcloud_update_prepare_workarounds') }}
{# finish pre_overcloud_update_prepare_workarounds #}
{{ render_workarounds(post_overcloud_update_prepare_workarounds|default([]),'post_overcloud_update_prepare_workarounds') }}
{# finish post_overcloud_update_prepare_workarounds #}
{{ render_workarounds(pre_overcloud_update_run_workarounds|default([]),'pre_overcloud_update_run_workarounds') }}
{# finish pre_overcloud_update_run_workarounds #}
{{ render_workarounds(post_overcloud_update_run_workarounds|default([]),'post_overcloud_update_run_workarounds') }}
{# finish post_overcloud_update_run_workarounds #}
{{ render_workarounds(pre_overcloud_update_converge_workarounds|default([]),'pre_overcloud_update_converge_workarounds') }}
{# finish pre_overcloud_update_converge_workarounds #}
{{ render_workarounds(post_overcloud_update_converge_workarounds|default([]),'post_overcloud_update_converge_workarounds') }}
{# finish post_overcloud_update_converge_workarounds #}
{% endif -%}

40
tests/workarounds-update Normal file
View File

@ -0,0 +1,40 @@
---
pre_undercloud_update_workarounds:
- rhbz1:
patch: true
basedir: /usr/share/openstack-tripleo-heat-templates
id: 112345
command:
- rhbz2:
patch: true
basedir: /usr/share/openstack-tripleo-heat-templates
id: 212321
command:
- rhbz3:
patch: false
basedir: ''
id: ''
command: 'some command goes here'
post_undercloud_update_workarounds:
- rhbz10:
patch: false
basedir: ''
id: ''
command: |
echo "This is a nice workaround"
pre_overcloud_update_run_workarounds:
- rhbz11:
patch: false
basedir: ''
id: ''
ansible_hosts: "overcloud"
command: |
cat /etc/redhat-release
post_overcloud_update_converge_workarounds:
- rhbz12:
patch: false
basedir: ''
id: ''
ansible_hosts: "overcloud"
command: |
echo "Update finished, awesome!"

30
tests/workarounds-upgrade Normal file
View File

@ -0,0 +1,30 @@
---
pre_undercloud_upgrade_workarounds:
- rhbz1:
patch: true
basedir: /home/stack/
id: 112233
command:
- rhbz2:
patch: true
basedir: /home/stack/
id: 112234
command:
- rhbz3:
patch: false
basedir: ''
id: ''
command: 'some command goes here'
post_undercloud_upgrade_workarounds:
- rhbz10:
patch: true
basedir: /usr/share/
id: 223344
command: ''
post_overcloud_upgrade_workarounds:
- rhbz11:
patch: false
basedir: ''
id: ''
ansible_hosts: "overcloud"
command: 'Ansible task to run in overcloud nodes'