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:
parent
b16cfa42d0
commit
a74e8d27a7
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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'] %}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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: |
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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 %}
|
||||
|
|
Loading…
Reference in New Issue