67ce344e30
All roles that have a hyphen in them need to be renamed to use an underscore. This change creates a symlink to all roles using their original name which will ensure we maintain compatibility with the rest of the TripleO stack. This is being done because roles with hyphens are no longer valid within collections. A temp PBR update has been made to accomodate all of the symlinks to the legacy role names. [0] https://docs.ansible.com/ansible/devel/dev_guide/developing_collections.html#roles-directory Change-Id: Id00a3670351990e5489a297c4c7200f8c05af096 Signed-off-by: Kevin Carter <kecarter@redhat.com>
334 lines
11 KiB
YAML
334 lines
11 KiB
YAML
---
|
|
# Copyright 2019 Red Hat, Inc.
|
|
# All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
|
|
- name: system_upgrade_prepare step 3
|
|
when: (step | int) == 3
|
|
tags:
|
|
- never
|
|
- system_upgrade
|
|
- system_upgrade_prepare
|
|
block:
|
|
- name: remove all OpenStack packages
|
|
shell: |-
|
|
yum -y remove *el7ost* -- \
|
|
-*openvswitch* \
|
|
-python2-babel \
|
|
-python2-dateutil \
|
|
-python2-ipaddress \
|
|
-python2-jinja2 \
|
|
-python2-markupsafe \
|
|
-python2-six
|
|
when:
|
|
- upgrade_leapp_enabled | bool
|
|
|
|
- name: install leapp
|
|
package:
|
|
name: leapp
|
|
state: latest
|
|
when:
|
|
- upgrade_leapp_enabled | bool
|
|
|
|
- name: system_upgrade_prepare step 4
|
|
when: (step | int) == 4
|
|
tags:
|
|
- never
|
|
- system_upgrade
|
|
- system_upgrade_prepare
|
|
block:
|
|
- name: run leapp upgrade (download packages)
|
|
shell: >-
|
|
{% if upgrade_leapp_devel_skip_rhsm|default(false) %}LEAPP_DEVEL_SKIP_RHSM=1{% endif %}
|
|
leapp upgrade
|
|
{% if upgrade_leapp_debug|default(true) %}--debug{% endif %}
|
|
when:
|
|
- upgrade_leapp_enabled | bool
|
|
|
|
- name: system_upgrade_run step 4
|
|
when:
|
|
- (step | int) == 4
|
|
tags:
|
|
- never
|
|
- system_upgrade
|
|
- system_upgrade_run
|
|
# In case someone needs to re-run system_upgrade_run post-tasks
|
|
# but doesn't want to reboot, they can run with
|
|
# `--skip-tags system_upgrade_reboot`.
|
|
- system_upgrade_reboot
|
|
block:
|
|
- name: reboot to perform the upgrade
|
|
reboot:
|
|
reboot_timeout: "{{ upgrade_leapp_reboot_timeout }}"
|
|
when:
|
|
- upgrade_leapp_enabled | bool
|
|
|
|
- name: Package and repo update tasks
|
|
when:
|
|
- (step | int) == 0
|
|
block:
|
|
- name: Run UpgradeInitCommand
|
|
shell: |-
|
|
set -o pipefail
|
|
if [[ -f /etc/resolv.conf.save ]]; then
|
|
rm /etc/resolv.conf.save
|
|
fi
|
|
{{ tripleo_packages_upgrade_init_command }}
|
|
args:
|
|
executable: /bin/bash
|
|
- name: Run UpgradeInitCommonCommand
|
|
shell: |-
|
|
set -o pipefail
|
|
{{ tripleo_packages_upgrade_init_common_command }}
|
|
args:
|
|
executable: /bin/bash
|
|
when:
|
|
- (tripleo_packages_upgrade_init_common_command | length) > 0
|
|
- name: Ensure TripleO prerequisite packages are installed
|
|
package:
|
|
name:
|
|
- jq
|
|
- lvm2
|
|
- net-snmp
|
|
- openstack-selinux
|
|
- os-net-config
|
|
- pacemaker
|
|
- pcs
|
|
- puppet-tripleo
|
|
- python3-heat-agent*
|
|
state: present
|
|
when:
|
|
- ansible_distribution_major_version == '8'
|
|
|
|
# With the layered product packaging, the key package is rhosp-openvswitch. It depends on
|
|
# a openvswitch package that includes the version as part of the name (e.g openvswitch2.10).
|
|
# This requires some additional special handling:
|
|
# - During an upgrade the package name for openvswitch may change so
|
|
# upgrading the currently installed package won't do anything.
|
|
# - The rhosp-openvswitch package "obsoletes" several packages,
|
|
# including older openvswitch packages. This results in a pretty
|
|
# severe uninstall/install sequence of operations that stops and
|
|
# removes openvswitch which could break network links required to
|
|
# continue the upgrade.
|
|
# - To prevent rhosp-openvswitch breaking connectivity, the currently
|
|
# installed core openvswitch packages need to be erased from the rpm
|
|
# database but leave the binaries intact. This effectively
|
|
# short-circuits the obsoletes mechanism in rhosp-openvswitch and
|
|
# leaves the core elements of openvswitch running. In the future we
|
|
# may replace this mechanism with "an upgrade on reboot". We only
|
|
# do this for the core openvswitch packages so other packages
|
|
# obsoleted by rhosp-openvswitch will be removed when
|
|
# rhosp-openvswitch is installed/upgraded.
|
|
# - Neither the rhosp-openvswitch nor openvswitch{m.n} package enables
|
|
# or starts the systemd service so there must always be a task
|
|
# to ensure that it is enabled or OpenvSwitch functionality won't be
|
|
# available on reboot.
|
|
# - With LP, we expect that the core openvswitch package name will
|
|
# change with every major upgrade so this special handling will
|
|
# eventually replace the special handling of upgrading the
|
|
# openvswitch package "in place"
|
|
- name: Block for gathering information for upgrading OpenvSwitch layered product packaging
|
|
when: (step | int) == 2
|
|
block:
|
|
- name: Process rhosp-openvswitch layered package for new version number
|
|
shell: |-
|
|
set -o pipefail
|
|
yum info -q rhosp-openvswitch | awk '/^Version/{print $NF}'
|
|
register: rhosp_package_result
|
|
ignore_errors: true
|
|
|
|
- name: Set fact for triggering OpenvSwitch layered product package handling
|
|
set_fact:
|
|
ovs_lp_packaging: "{{ rhosp_package_result.rc == 0 }}"
|
|
|
|
- name: Capture the expected OpenvSwitch version.
|
|
set_fact:
|
|
new_ovs_version: "{{ rhosp_package_result.stdout }}"
|
|
when:
|
|
- ovs_lp_packaging | default(false)
|
|
|
|
- name: Get current OpenvSwitch package name
|
|
register: ovs_pkg_out
|
|
shell: |-
|
|
set -o pipefail
|
|
rpm -qa | awk -F- '/^(openvswitch[0-9]+\.[0-9]+-|openvswitch-2)/{print $1}'
|
|
|
|
- name: Get version from current OpenvSwitch package
|
|
register: ovs_version_out
|
|
shell: |-
|
|
set -o pipefail
|
|
rpm -qi "{{ ovs_pkg_out.stdout }}" | awk '/^Version/{print $NF}'
|
|
|
|
- name: split numeric version for OpenvSwitch into parts
|
|
set_fact:
|
|
ovs_version_parts: "{{ ovs_version_out.stdout.split('.') }}"
|
|
|
|
- name: get major minor version for OpenvSwitch package naming
|
|
set_fact:
|
|
current_ovs_version: "{{ ovs_version_parts[0] }}.{{ ovs_version_parts[1] }}"
|
|
|
|
- name: get OpenvSwitch major version
|
|
set_fact:
|
|
current_ovs_major_version: "{{ ovs_version_parts[0]|int }}"
|
|
|
|
- name: get OpenvSwitch minor version
|
|
set_fact:
|
|
current_ovs_minor_version: "{{ ovs_version_parts[1]|int }}"
|
|
|
|
- name: Block for upgrading OpenvSwitch when layer package is present
|
|
when:
|
|
- (step | int) == 2
|
|
- ovs_lp_packaging | default(false)
|
|
block:
|
|
- name: set current OpenvSwitch package suffix if old version is layered product format
|
|
set_fact:
|
|
package_suffix: "{{ current_ovs_version }}"
|
|
when:
|
|
- ((current_ovs_major_version | int) >= 3) or
|
|
((current_ovs_minor_version | int) >= 10)
|
|
|
|
- name: remove old OpenvSwitch package(s) if version doesn't match
|
|
shell: |-
|
|
rpm -e --noscripts \
|
|
--nopreun \
|
|
--nopostun \
|
|
--notriggers \
|
|
--nodeps $(rpm -qa 'openvswitch{{ package_suffix|default('') }}*' | grep -v 'selinux')
|
|
args:
|
|
warn: false
|
|
when:
|
|
- new_ovs_version != current_ovs_version
|
|
|
|
- name: install/upgrade OpenvSwitch LP package
|
|
package:
|
|
name: rhosp-openvswitch
|
|
state: latest
|
|
notify: start openvswitch
|
|
|
|
- name: set flag to skip other upgrade steps since OpenvSwitch is already upgraded!
|
|
set_fact:
|
|
run_ovs_update: false
|
|
|
|
- name: Check for openvswitch upgrade if not layered package installs
|
|
when:
|
|
- (step | int) == 2
|
|
- run_ovs_update|default(true)
|
|
block:
|
|
- name: check if an upgrade is required
|
|
register: ovs_need_upgrade
|
|
ignore_errors: true
|
|
shell: |
|
|
yum check-upgrade openvswitch | awk '/openvswitch/{print}'
|
|
|
|
- name: Check openvswitch packaging.
|
|
shell: |-
|
|
set -o pipefail
|
|
rpm -q --scripts openvswitch | awk '/postuninstall/,/*/' | grep -q "systemctl.*try-restart"
|
|
register: ovs_packaging_issue
|
|
ignore_errors: true
|
|
|
|
- name: Upgrade openvswitch
|
|
when:
|
|
- (step | int) == 2
|
|
- run_ovs_update | default(true)
|
|
- ovs_packaging_issue is success
|
|
- ovs_need_upgrade.stdout | default('')
|
|
block:
|
|
- name: "Ensure empty directory: emptying."
|
|
file:
|
|
state: absent
|
|
path: /root/OVS_UPGRADE
|
|
|
|
- name: "Ensure empty directory: creating."
|
|
file:
|
|
state: directory
|
|
path: /root/OVS_UPGRADE
|
|
owner: root
|
|
group: root
|
|
mode: 0750
|
|
|
|
- name: Make yum cache.
|
|
command: yum makecache
|
|
|
|
- name: Download OVS packages
|
|
shell: |-
|
|
if command -v yumdownloader; then
|
|
yumdownloader --destdir /root/OVS_UPGRADE --resolve openvswitch
|
|
else
|
|
dnf download --destdir /root/OVS_UPGRADE --resolve openvswitch
|
|
fi
|
|
|
|
- name: Get rpm list for manual upgrade of OVS.
|
|
shell: ls -1 /root/OVS_UPGRADE/*.rpm
|
|
register: ovs_list_of_rpms
|
|
|
|
- name: Manual upgrade of OVS
|
|
shell: |
|
|
rpm -U --replacepkgs --notriggerun --nopostun {{ item }}
|
|
args:
|
|
chdir: /root/OVS_UPGRADE
|
|
loop: "{{ ovs_list_of_rpms.stdout_lines }}"
|
|
notify: "start openvswitch"
|
|
|
|
- name: Install libibverbs (https://bugs.launchpad.net/tripleo/+bug/1817743)
|
|
when:
|
|
- (step | int) == 2
|
|
package:
|
|
name: libibverbs
|
|
state: installed
|
|
|
|
- name: Check for os-net-config upgrade
|
|
shell: |-
|
|
set -o pipefail
|
|
yum check-upgrade | awk '/os-net-config/{print}'
|
|
ignore_errors: true
|
|
register: os_net_config_need_upgrade
|
|
when:
|
|
- (step | int) == 3
|
|
|
|
- name: Check that os-net-config has configuration
|
|
shell: test -s /etc/os-net-config/config.json
|
|
register: os_net_config_has_config
|
|
ignore_errors: true
|
|
when:
|
|
- (step | int) == 3
|
|
|
|
- name: os-net-config block
|
|
when:
|
|
- (step | int) == 3
|
|
- os_net_config_need_upgrade.rc == 0
|
|
- (os_net_config_need_upgrade.stdout | length) > 0
|
|
- os_net_config_has_config.rc == 0
|
|
block:
|
|
- name: Upgrade os-net-config
|
|
package:
|
|
name: os-net-config
|
|
state: latest
|
|
|
|
- name: take new os-net-config parameters into account now
|
|
command: os-net-config --no-activate -c /etc/os-net-config/config.json -v --detailed-exit-codes
|
|
register: os_net_config_upgrade
|
|
failed_when: os_net_config_upgrade.rc not in [0,2]
|
|
changed_when: os_net_config_upgrade.rc == 2
|
|
|
|
# Ansbile cannot upgrade itself as it will cause the current execution to fail.
|
|
# https://github.com/ansible/ansible/issues/56636
|
|
- name: Update all packages
|
|
when: (step | int) == 3
|
|
yum:
|
|
name: '*'
|
|
state: latest
|
|
exclude: ansible
|