Add composable upgrade workflow for tripleo-quickstart

Implement the composable upgrade workflow for tripleo-quickstart
- Download a newton overcloud image and remove the current one (master)
- Deploy a newton overcloud with the newton tht repo
- Upgrade only the overcloud to master

Change-Id: Ib0ad132f419b2fd3c23287d2f1374909c4ad486d
This commit is contained in:
Mathieu Bultel 2017-01-04 09:53:14 +01:00 committed by Ronelle Landy
parent b16cfa42d0
commit a74e8d27a7
13 changed files with 210 additions and 30 deletions

View File

@ -34,6 +34,10 @@ extra_args: ""
ssl_overcloud: false
libvirt_args: "--libvirt-type qemu"
use_git_tht_repo: false
tht_branch: master
overcloud_release: "{{ release }}"
# we generally assume that the argument to --control-flavor will
# always be the `oooq_control` that we create from the flavors: key.
# If the deployer needs to use a different name, she can configure a

View File

@ -122,7 +122,7 @@
extra_args: >-
{{ extra_args }}
-e {{ working_dir }}/overcloud_services.yaml
when: composable_services
when: composable_services|bool
- name: set the scenario args for composable roles
set_fact:

View File

@ -13,3 +13,6 @@ step_install_undercloud: true
step_root_device_size: false
disk_root_device_size: 1843
whole_disk_images: false
download_overcloud_image: false
overcloud_full_tar_name: overcloud-full.tar

View File

@ -14,6 +14,19 @@ set -eux
source {{ working_dir }}/stackrc
{% if download_overcloud_image|bool %}
## * Download specific Overcloud images
## ::
if [ -f overcloud-full.qcow2 ]; then
sudo rm -rf overcloud-full*
fi
curl -L -O "{{ overcloud_image_url }}"
tar xvfp {{ overcloud_full_tar_name }}
{% endif %}
{% if step_overcloud_image|bool %}
## * Upload images to glance.

View File

@ -64,6 +64,14 @@ sudo ifup ifcfg-eth6
{% endfor %}
{% else %}
## * Set the DNS server in the control plane network
## ::
# Set DNS server for the overcloud nodes
neutron subnet-update $(neutron net-list | awk '/ctlplane/{print $(NF-2) }') --dns-nameserver $(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }' | sed ':a;N;$!ba;s/\n/ --dns-nameserver /g')
{%endif%}
{% if enable_tls_everywhere|bool and overcloud_dns_servers and release not in ['mitaka', 'newton'] %}

View File

@ -1,5 +1,17 @@
Ansible-role-tripleo-overcloud-upgrade
======================================
overcloud-upgrade
=================
This role aim to upgrade an existing Tripleo deployment, Undercloud and
Overcloud from the deployed version to the next version, major or minor version.
It supports upgrade for:
Liberty (major and minor)
Mitaka (major and minor)
Newton (major only)
It provides a set of tools and scripts to upgrade, the undercloud or the
overcloud or both.
Both upgrade workflow are supported, the legacy upgrade workflow and the
composable upgrade workflow.
Requirements
------------
@ -8,16 +20,88 @@ This role can be used on top of an existing Overcloud deployment.
You just need to provide the required inventory file (see tests/ for more
details).
Composable Upgrade
------------------
The composable upgrade workflow has been implemented on Ocata release, for doing
major upgrade from Newton to Ocata.
This workflow aims to be more flexible than the previous one and decrease the
number of steps to be applied by the operator.
Also, it's using Ansible tasks to upgrade the services on the Overcloud nodes.
The workflow provides two possible methods for upgrading the Overcloud:
* all-in-one step (mostly made for CI)
* main upgrade steps and a converge step.
The goal of the second method is to give the option to the operator to not
upgrade all nodes in one shot. Then, it is possible to not stop the cloud and to
migrate the workload from one compute to another.
The upgrade step is done in major-upgrade-overcloud.sh.j2
(see lines below "execute overcloud upgrade"). This step allows
the user to provide custom environment files for the heat stack update.
The main point is that you can provide a custom file with only the
services that you want to deploy and upgrade
(see: tripleo-quickstart/config/general_config/composable_upgrade.yml)
For example, if you want to test the upgrade with only Neutron and Keystone
services, you just have to provide the extra file to your Ansible command
with this yaml:
overcloud_services:
- name: 'ControllerServices:'
services:
- OS::TripleO::Services::CACerts
- OS::TripleO::Services::Core
- OS::TripleO::Services::Kernel
- OS::TripleO::Services::Keystone
- OS::TripleO::Services::NeutronDhcpAgent
- OS::TripleO::Services::NeutronL3Agent
- OS::TripleO::Services::NeutronMetadataAgent
- OS::TripleO::Services::NeutronServer
- OS::TripleO::Services::NeutronCorePlugin
- OS::TripleO::Services::NeutronOvsAgent
- OS::TripleO::Services::MySQL
- OS::TripleO::Services::RabbitMQ
- OS::TripleO::Services::HAproxy
- OS::TripleO::Services::Keepalived
- OS::TripleO::Services::Memcached
- OS::TripleO::Services::Ntp
- OS::TripleO::Services::Timezone
- OS::TripleO::Services::TripleoPackages
- OS::TripleO::Services::TripleoFirewall
Legacy Upgrade Workflow
-----------------------
The legacy workflow supports Liberty to Mitaka, and Mitaka to Newton, upgrade.
It is composed of three main steps:
1. script delivery
2. controller upgrade
3. converge step
and few extras steps for upgrading Block Storage, Compute and Ceph nodes.
From Liberty to Mitaka, we need to apply two pre-upgrade steps to migrate Aodh
and Keystone. (see major-upgrade-overcloud.sh.j2 - lines following "execute aodh upgrade")
From mitaka to Newton, we need to apply one pre-upgrade step to migrate
Ceilometer Alarm: major-upgrade-ceilometer-wsgi-mitaka-newton.yaml
(see major-upgrade-overcloud.sh.j2- lines following "execute ceilometer migration")
The Block Storage should be upgraded before the Controller step, and the
Compute and Ceph nodes should be upgraded after the Controller step and before
the converge step.
Role Variables
--------------
Here is the default parameters for overcloud upgrade role:
Below are the default parameters for the overcloud upgrade role:
```
# pre upgrade settings:
oc_dns_server: 192.168.122.1
# set-repo settings:
target_upgrade_version: mitaka
target_upgrade_version: master
delorean_hash: current-passed-ci
repos:
- delorean.repo

View File

@ -10,7 +10,7 @@ network_isolation_ipv4_cidr: "10.0.0.1/24"
network_isolation_vlan_tag: 10
network_isolation_vlan: "vlan{{ network_isolation_vlan_tag }}"
# set-repo settings:
target_upgrade_version: mitaka
target_upgrade_version: master
upgrade_delorean_hash: current-passed-ci
repos:
- delorean.repo
@ -52,6 +52,7 @@ upgrade_custom_templates_script_delivery:
- overcloud-repo.yaml
upgrade_custom_templates_controller: {}
upgrade_custom_templates_converge: {}
upgrade_custom_templates: {}
update_custom_templates: {}
# custom templates:
# example:
@ -75,6 +76,7 @@ step_upgrade_overcloud: true
major_upgrade: true
mixed_upgrade: false
enable_ceph: false
enable_pacemaker: true
# heat workers:
set_heat_workers: true
# Update:

View File

@ -0,0 +1,33 @@
---
- name: Create upgrade repo script for undercloud
template:
src: "{{ upgrade_undercloud_repo_script }}"
dest: "{{ upgrade_working_dir }}/upgrade-undercloud-repo.sh"
mode: 0744
- name: Copy custom heat templates files if provided
template:
src: "{{ item.value.src }}"
dest: "{{ upgrade_working_dir }}/{{ item.value.name }}"
with_dict: "{{ upgrade_templates }}"
# Need to set fact here because tht_dir is used in the templated script
# in "Create major overcloud upgrade script" task
- name: set fact for tht_dir
when: target_upgrade_version in ['ocata', 'master']
set_fact:
tht_dir: "/usr/share/openstack-tripleo-heat-templates"
- name: Create major overcloud upgrade script
when: major_upgrade|bool
template:
src: "{{ major_upgrade_script }}"
dest: "{{ upgrade_working_dir }}/overcloud-upgrade.sh"
mode: 0755
- name: Create minor overcloud upgrade script
when: not major_upgrade|bool
template:
src: "{{ minor_upgrade_script }}"
dest: "{{ upgrade_working_dir }}/overcloud-upgrade.sh"
mode: 0755

View File

@ -1,4 +1,8 @@
---
- include: create-scripts.yml
tags:
- overcloud-upgrade-scripts
- include: pre-undercloud.yml
when: step_pre_undercloud_upgrade
tags:
@ -10,7 +14,7 @@
- upgrade-undercloud
- include: pre-overcloud.yml
when: step_pre_overcloud_upgrade
when: step_pre_overcloud_upgrade and target_upgrade_version in ['mitaka', 'newton']
tags:
- pre-upgrade-overcloud

View File

@ -36,20 +36,6 @@
sudo iptables-save > /etc/sysconfig/iptables;
when: network_isolation|bool and deployment_type == "virtual"
- name: Create major overcloud upgrade script
when: major_upgrade
template:
src: "{{ major_upgrade_script }}"
dest: "{{ upgrade_working_dir }}/overcloud-upgrade.sh"
mode: 0755
- name: Create minor overcloud upgrade script
when: not major_upgrade|bool
template:
src: "{{ minor_upgrade_script }}"
dest: "{{ upgrade_working_dir }}/overcloud-upgrade.sh"
mode: 0755
- name: get the number of core
when: set_heat_workers
register: core

View File

@ -5,12 +5,6 @@
with_items: "{{ repos }}"
when: step_pre_undercloud_upgrade
- name: Create upgrade repo script for undercloud
template:
src: "{{ upgrade_undercloud_repo_script }}"
dest: "{{ upgrade_working_dir }}/upgrade-undercloud-repo.sh"
mode: 0744
- name: Execute upgrade repo script
become: yes
shell: |

View File

@ -30,6 +30,7 @@ git clone https://github.com/openstack/tripleo-heat-templates.git -b stable/newt
{% endif %}
source {{ upgrade_working_dir }}/stackrc
{% if target_upgrade_version in ['mitaka', 'newton'] %}
{% if target_upgrade_version == 'mitaka' %}
if heat stack-show overcloud | grep "stack_status " | egrep "(CREATE|UPDATE)_COMPLETE"; then
echo "execute aodh upgrade"
@ -161,6 +162,35 @@ if heat stack-show overcloud | grep "stack_status " | egrep "(CREATE|UPDATE)_COM
-e ~/network-environment.yaml
{% endif %}
fi
{% endif %}
{% if target_upgrade_version in ['ocata', 'master'] %}
if openstack stack show -c stack_status overcloud -f value | egrep "(CREATE|UPDATE)_COMPLETE"; then
echo "execute overcloud upgrade"
openstack overcloud deploy --templates {{ tht_dir }} \
-e {{ tht_dir }}/overcloud-resource-registry-puppet.yaml \
{% if network_isolation|bool == true %}
-e {{ tht_dir }}/environments/network-isolation.yaml \
-e {{ tht_dir }}/environments/net-single-nic-with-vlans.yaml \
-e ~/network-environment.yaml \
{% endif %}
{% if enable_pacemaker|bool %}
-e {{ tht_dir }}/environments/puppet-pacemaker.yaml \
{% endif %}
-e {{ tht_dir }}/environments/major-upgrade-all-in-one.yaml \
{% for item in upgrade_custom_templates_script_delivery %}
-e {{ item }} \
{% endfor %}
{% for item in upgrade_custom_templates %}
-e {{ item }} \
{% endfor %}
fi
{% endif %}
if heat stack-show overcloud | grep "stack_status " | egrep "(CREATE|UPDATE)_COMPLETE"; then
echo "Update successful"

View File

@ -1,10 +1,29 @@
parameter_defaults:
UpgradeInitCommand: |
set -e
pushd /etc/yum.repos.d/
rm -rf delorean*
{% if upgrade_delorean_hash == 'current-passed-ci' %}
curl -o /etc/yum.repos.d/delorean.repo http://buildlogs.centos.org/centos/7/cloud/x86_64/rdo-trunk-{{ target_upgrade_version }}-tested/delorean.repo
curl -o -L http://buildlogs.centos.org/centos/7/cloud/x86_64/rdo-trunk-{{ target_upgrade_version }}-tested/delorean.repo
{% else %}
curl -o /etc/yum.repos.d/delorean.repo http://buildlogs.centos.org/centos/7/cloud/x86_64/rdo-trunk-{{ target_upgrade_version }}/delorean.repo
curl -o -L http://buildlogs.centos.org/centos/7/cloud/x86_64/rdo-trunk-{{ target_upgrade_version }}/delorean.repo
{% endif %}
curl -o /etc/yum.repos.d/delorean-deps.repo http://trunk.rdoproject.org/centos7-{{ target_upgrade_version }}/delorean-deps.repo
curl -o -L http://trunk.rdoproject.org/centos7-{{ target_upgrade_version }}/delorean-deps.repo
popd
yum clean all
{% if target_upgrade_version in ['ocata', 'master'] %}
yum install -y python-heat-agent-*
# update ansible.cfg
# FIXME: Workaround for bigswitch vendor pluging
# we need to remove those package which is broken with Ocata neutron python code
yum remove -y python-UcsSdk openstack-neutron-bigswitch-agent python-networking-bigswitch openstack-neutron-bigswitch-lldp python-networking-odl
crudini --set /etc/ansible/ansible.cfg DEFAULT library /usr/share/ansible-modules/
# Ref https://review.openstack.org/#/c/392615 disable the old hiera hook
# FIXME - this should probably be handled via packaging?
rm -f /usr/libexec/os-apply-config/templates/etc/puppet/hiera.yaml
rm -f /usr/libexec/os-refresh-config/configure.d/40-hiera-datafiles
rm -f /etc/puppet/hieradata/*.yaml
{% endif %}