Merge "Automate the undercloud leapp upgrade."

This commit is contained in:
Zuul 2019-06-19 20:01:54 +00:00 committed by Gerrit Code Review
commit 70dab47ef9
10 changed files with 156 additions and 49 deletions

View File

@ -16,6 +16,7 @@ overcloud_stack_name: "overcloud"
upgrade_noop: false
update_noop: false
undercloud_upgrade: false
undercloud_os_upgrade: false
containerized_undercloud_upgrade: true
overcloud_upgrade: false
undercloud_update: false
@ -252,3 +253,6 @@ roles_upgrade_order: '__undefined__'
# Packet loss threshold for a ping test
loss_threshold: 1
# Leapp OS upgrade variables
leapp_unregister: true

View File

@ -6,7 +6,10 @@
become: true
become_method: sudo
become_user: stack
vars:
# Explicit ansible_python_interpreter to allow connecting
# to different OS releases (EL7/8) while using delegate_to.
ansible_python_interpreter: /usr/libexec/platform-python
pre_tasks:
- name: Set upgrade workload launch
@ -44,6 +47,11 @@
undercloud_upgrade: true
when: install.undercloud.upgrade
- name: Set undercloud operating system upgrade
set_fact:
undercloud_os_upgrade: true
when: install.undercloud.os.upgrade
- name: Set undercloud reboot
set_fact:
undercloud_reboot: true

View File

@ -14,6 +14,11 @@ subparsers:
NOTE: Upgrade require overcloud deployment script to be available in home directory of undercloud
user at undercloud node
default: false
undercloud-os-upgrade:
type: Bool
help: |
Upgrade Undercloud's Operating System
default: false
undercloud-upgrade:
type: Bool
help: |

View File

@ -0,0 +1,45 @@
---
- name: reboot the undercloud
shell: "sleep 2 && shutdown -r now"
async: 1
poll: 0
ignore_errors: true
become: true
become_user: root
- name: wait for node to go down
become: false
command: ping -c1 {{ ansible_host }}
register: node_down
until: node_down.rc != 0
retries: 60
delay: 3
ignore_errors: true
delegate_to: localhost
when: "'hypervisor' not in groups and 'virthost' not in groups"
- name: wait for node to go down
command: ping -c1 {{ ansible_host }}
register: node_down
until: node_down.rc != 0
retries: 60
delay: 3
ignore_errors: true
delegate_to: hypervisor
when: "'hypervisor' in groups"
- name: wait for node to go down
command: ping -c1 {{ ansible_host }}
register: node_down
until: node_down.rc != 0
retries: 60
delay: 3
ignore_errors: true
delegate_to: virthost
when: "'virthost' in groups"
- name: waiting for the undercloud to be ssh-able
wait_for_connection:
connect_timeout: 5
sleep: 3
timeout: 630

View File

@ -22,50 +22,8 @@
- name: handle undercloud reboot
block:
- name: reboot the undercloud
shell: "sleep 2 && shutdown -r now"
async: 1
poll: 0
ignore_errors: true
become: true
become_user: root
- name: wait for node to go down
become: false
command: ping -c1 {{ ansible_host }}
register: node_down
until: node_down.rc != 0
retries: 60
delay: 3
ignore_errors: true
delegate_to: localhost
when: "'hypervisor' not in groups and 'virthost' not in groups"
- name: wait for node to go down
command: ping -c1 {{ ansible_host }}
register: node_down
until: node_down.rc != 0
retries: 60
delay: 3
ignore_errors: true
delegate_to: hypervisor
when: "'hypervisor' in groups"
- name: wait for node to go down
command: ping -c1 {{ ansible_host }}
register: node_down
until: node_down.rc != 0
retries: 60
delay: 3
ignore_errors: true
delegate_to: virthost
when: "'virthost' in groups"
- name: waiting for the undercloud to be ssh-able
wait_for_connection:
connect_timeout: 5
sleep: 3
timeout: 630
- name: Reboot the undercloud
import_tasks: undercloud_reboot.yaml
- name: assert UC services started
shell: |

View File

@ -11,10 +11,20 @@
when: workload_launch
- include: upgrade/main.yml
when: upgrade_noop|bool or undercloud_upgrade|bool or overcloud_upgrade|bool
when: >
upgrade_noop|bool or
undercloud_upgrade|bool or
undercloud_os_upgrade|bool or
overcloud_upgrade|bool
- include: update/main.yml
when: update_noop|bool or undercloud_update|bool or overcloud_update|bool
when: >
update_noop|bool or
undercloud_update|bool or
overcloud_update|bool
- include: fast-forward-upgrade/main.yml
when: ffu_noop|bool or ffu_undercloud_upgrade|bool or ffu_overcloud_upgrade|bool
when: >
ffu_noop|bool or
ffu_undercloud_upgrade|bool or
ffu_overcloud_upgrade|bool

View File

@ -12,6 +12,7 @@
dest: "{{ working_dir }}/{{ item }}.sh"
mode: 0775
loop:
- 'pre_undercloud_os_upgrade_workarounds'
- 'pre_undercloud_upgrade_workarounds'
- 'post_undercloud_upgrade_workarounds'
when: upgrade_workarounds

View File

@ -5,7 +5,28 @@
apply:
tags: create_undercloud_upgrade_scripts
tags: create_undercloud_upgrade_scripts
when: upgrade_noop|bool or undercloud_upgrade|bool
when: >
upgrade_noop|bool or
undercloud_upgrade|bool or
undercloud_os_upgrade|bool
- block:
- 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
args:
chdir: "{{ working_dir }}"
when: upgrade_workarounds|bool
- name: Upgrade operating system
become: true
become_user: root
import_tasks: undercloud_os_upgrade.yaml
when: not use_oooq|bool
when: undercloud_os_upgrade|bool
tags: undercloud_os_upgrade
- block:
- name: apply pre undercloud upgrade workarounds

View File

@ -0,0 +1,53 @@
---
- name: Remove old RHEL7 packages
shell: |
yum -y remove *el7ost* -- \
-*openvswitch* \
-python2-babel \
-python2-dateutil \
-python2-ipaddress \
-python2-jinja2 \
-python2-markupsafe \
-python2-jsonpatch \
-python2-six \
-python-PyMySQL \
-python-jsonpointer
- name: Install leapp
package:
name: leapp
state: latest
- name: Check if rhos-release is installed
package:
name: rhos-release
state: present
check_mode: true
failed_when: false
register: rhos_release_installed
- block:
- name: Remove rhos-release repos
command: rhos-release -x
- name: Remove conflicting rhos-release package
package:
name: rhos-release
state: absent
when:
- rhos_release_installed.rc == 0
- not rhos_release_installed.changed
- name: Run leapp upgrade (download packages)
shell: |
set -o pipefail
leapp upgrade --debug 2>&1 | \
tee {{ working_dir }}/undercloud_leapp_upgrade.log
- name: Reboot the undercloud
import_tasks: ../common/undercloud_reboot.yaml
- name: Unregister the node once the OS was upgraded if desired
redhat_subscription:
state: absent
when: leapp_unregister|bool

View File

@ -45,6 +45,8 @@ apply_patch {{ value.basedir }} {{ value.id }}
{% endif -%}
{% endmacro -%}
{{ 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') }}
{# finish pre_undercloud_upgrade_workarounds #}
{{ render_workarounds(post_undercloud_upgrade_workarounds|default([]),'post_undercloud_upgrade_workarounds') }}