From 741bf8d002749cc407654bb94d75f2e1ce73df28 Mon Sep 17 00:00:00 2001 From: Mathieu Bultel Date: Fri, 1 Apr 2016 15:38:02 +0200 Subject: [PATCH] Add upgrade tasks for overcloud deployment Change-Id: Iee02924908c938828669cf3d8d03c34eeda32183 --- .gitreview | 6 +++ README.md | 62 ++++++++++++++++++++++ ansible.cfg | 14 +++++ defaults/main.yml | 27 ++++++++++ handlers/main.yml | 9 ++++ meta/main.yml | 34 ++++++++++++ requirements.txt | 2 + setup.cfg | 36 +++++++++++++ setup.py | 19 +++++++ tasks/main.yml | 23 ++++++++ tasks/post-upgrade.yml | 0 tasks/pre-upgrade.yml | 8 +++ tasks/set-repo.yml | 14 +++++ tasks/upgrade-overcloud.yml | 25 +++++++++ tasks/upgrade-undercloud.yml | 10 ++++ templates/delorean-repo.sh.j2 | 20 +++++++ templates/upgrade-controller-liberty.sh.j2 | 27 ++++++++++ test.yaml | 6 +++ tests/inventory | 2 + tests/test.yml | 31 +++++++++++ vars/main.yml | 2 + 21 files changed, 377 insertions(+) create mode 100644 .gitreview create mode 100644 README.md create mode 100644 ansible.cfg create mode 100644 defaults/main.yml create mode 100644 handlers/main.yml create mode 100644 meta/main.yml create mode 100644 requirements.txt create mode 100644 setup.cfg create mode 100644 setup.py create mode 100644 tasks/main.yml create mode 100644 tasks/post-upgrade.yml create mode 100644 tasks/pre-upgrade.yml create mode 100644 tasks/set-repo.yml create mode 100644 tasks/upgrade-overcloud.yml create mode 100644 tasks/upgrade-undercloud.yml create mode 100644 templates/delorean-repo.sh.j2 create mode 100644 templates/upgrade-controller-liberty.sh.j2 create mode 100644 test.yaml create mode 100644 tests/inventory create mode 100644 tests/test.yml create mode 100644 vars/main.yml diff --git a/.gitreview b/.gitreview new file mode 100644 index 000000000..2c96e4031 --- /dev/null +++ b/.gitreview @@ -0,0 +1,6 @@ +[gerrit] +host=review.gerrithub.io +port=29418 +project=redhat-openstack/ansible-role-tripleo-overcloud-upgrade.git +defaultbranch=master + diff --git a/README.md b/README.md new file mode 100644 index 000000000..f926dc0aa --- /dev/null +++ b/README.md @@ -0,0 +1,62 @@ +Ansible-role-tripleo-overcloud-upgrade +====================================== + +Requirements +------------ + +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). + +Role Variables +-------------- + +Here is the default parameters for overcloud upgrade role: + +``` +# pre upgrade settings: +oc_dns_server: 192.168.122.1 +# set-repo settings: +target_upgrade_version: mitaka +delorean_hash: current-passed-ci +repos: + - delorean.repo + - delorean-deps.repo +yum_repo_path: /etc/yum.repos.d/ +# Url of the delorean repos: +repos_url: + - http://trunk.rdoproject.org/centos7-{{ target_upgrade_version }}/{{ delorean_hash | default('current-passed-ci')}}/delorean.repo + - http://trunk.rdoproject.org/centos7-{{ target_upgrade_version }}/delorean-deps.repo +``` + +Dependencies +------------ + +Depends on: +Tripleo-quickstart: +https://github.com/redhat-openstack/tripleo-quickstart.git +Ansible-role-tripleo-overcloud: +https://github.com/redhat-openstack/ansible-role-tripleo-overcloud.git + + +Example Playbook +---------------- + +``` +- name: Upgrade overcloud + hosts: undercloud + gather_facts: no + sudo: yes + roles: + - ansible-role-tripleo-overcloud-upgrade +``` + +License +------- + +Apache + +Author Information +------------------ + +mbultel@redhat.com diff --git a/ansible.cfg b/ansible.cfg new file mode 100644 index 000000000..26c3257bb --- /dev/null +++ b/ansible.cfg @@ -0,0 +1,14 @@ +[defaults] +gathering = smart +command_warnings = False +retry_files_enabled = False +callback_whitelist = profile_tasks + +# Attempt to load custom modules whether it's installed system-wide or from a virtual environment +test_plugins = /usr/lib/python2.7/site-packages/tripleo-quickstart/playbooks/test_plugins:$VIRTUAL_ENV/usr/local/share/tripleo-quickstart/playbooks/test_plugins:playbooks/test_plugins +library = /usr/lib/python2.7/site-packages/tripleo-quickstart/playbooks/library:$VIRTUAL_ENV/usr/local/share/tripleo-quickstart/playbooks/library:playbooks/library +roles_path = playbooks/roles:$VIRTUAL_ENV/usr/local/share/tripleo-quickstart/playbooks/roles:$VIRTUAL_ENV/usr/local/share/ + + +[ssh_connection] +control_path = %(directory)s/%%h-%%r diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 000000000..3a3833274 --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1,27 @@ +--- +# pre upgrade settings: +oc_dns_server: 192.168.122.1 +# set-repo settings: +target_upgrade_version: mitaka +upgrade_delorean_hash: current-passed-ci +repos: + - delorean.repo + - delorean-deps.repo +yum_repo_path: /etc/yum.repos.d/ +# Url of the delorean repos: +repos_url: + - http://trunk.rdoproject.org/centos7-{{ target_upgrade_version }}/{{ upgrade_delorean_hash | default('current-passed-ci')}}/delorean.repo + - http://trunk.rdoproject.org/centos7-{{ target_upgrade_version }}/delorean-deps.repo +# upgrade settings: +upgrade_working_dir: /home/stack +tht_dir: tripleo-heat-templates +upgrade_script: upgrade-controller-liberty.sh.j2 +upgrade_non_controller_script: /bin/upgrade-non-controller.sh +upgrade_log: upgrade_console.log +undercloud_upgrade_user: stack + +# upgrade steps: +step_pre_upgrade: false +step_upgrade_set_repo: true +step_upgrade_undercloud: true +step_upgrade_overcloud: true diff --git a/handlers/main.yml b/handlers/main.yml new file mode 100644 index 000000000..c9cee59e5 --- /dev/null +++ b/handlers/main.yml @@ -0,0 +1,9 @@ +--- +# handlers file for upgrade +- name: restart openstack services + service: name={{item}} state=restarted + sudo: yes + with_items: + - openstack-heat-api + - openstack-heat-engine + - openstack-nova-api diff --git a/meta/main.yml b/meta/main.yml new file mode 100644 index 000000000..84b62b8e8 --- /dev/null +++ b/meta/main.yml @@ -0,0 +1,34 @@ +--- +# Copyright 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. +# + +galaxy_info: + author: redhat-openstack + description: Ansible set of tasks for upgrading Tripleo-Overcloud + company: Red Hat + license: Apache2 + min_ansible_version: 2.0.0 + platforms: + - name: EL + versions: + - all + categories: + - cloud + - python + - development + - openstack + +#dependencies: +# - role: "common" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..729b89c9e --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pbr>=1.6 +ansible==2.0.0 diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 000000000..0734355fb --- /dev/null +++ b/setup.cfg @@ -0,0 +1,36 @@ +[metadata] +name = ansible-role-tripleo-overcloud-upgrade +summary = ansible-role-tripleo-overcloud-upgrade - A ansible role for upgrading a tripleo overcloud +description-file = + README.md +author = RDO-CI Team +author-email = mbultel@redhat.com, whayutin@redhat.com +home-page = https://github.com/redhat-openstack/ansible-role-tripleo-overcloud +classifier = + License :: OSI Approved :: Apache Software License + Development Status :: 4 - Beta + Intended Audience :: Developers + Intended Audience :: System Administrators + Intended Audience :: Information Technology + Topic :: Utilities + +[global] +setup-hooks = + pbr.hooks.setup_hook + +[files] +data_files = + usr/local/share/ansible-role-tripleo-overcloud-upgrade/defaults = ../ansible-role-tripleo-overcloud-upgrade/defaults/* + usr/local/share/ansible-role-tripleo-overcloud-upgrade/handlers = ../ansible-role-tripleo-overcloud-upgrade/handlers/* + usr/local/share/ansible-role-tripleo-overcloud-upgrade/meta = ../ansible-role-tripleo-overcloud-upgrade/meta/* + usr/local/share/ansible-role-tripleo-overcloud-upgrade/tasks = ../ansible-role-tripleo-overcloud-upgrade/tasks/* + usr/local/share/ansible-role-tripleo-overcloud-upgrade/templates = ../ansible-role-tripleo-overcloud-upgrade/templates/* + usr/local/share/ansible-role-tripleo-overcloud-upgrade/tests = ../ansible-role-tripleo-overcloud-upgrade/tests/* + usr/local/share/ansible-role-tripleo-overcloud-upgrade/vars = ../ansible-role-tripleo-overcloud-upgrade/vars/* + +[wheel] +universal = 1 + +[pbr] +skip_authors = True +skip_changelog = True diff --git a/setup.py b/setup.py new file mode 100644 index 000000000..6a931a61c --- /dev/null +++ b/setup.py @@ -0,0 +1,19 @@ +# Copyright 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. + +import setuptools + +setuptools.setup( + setup_requires=['pbr'], + pbr=True) diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 000000000..b118543b7 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,23 @@ +--- +- include: pre-upgrade.yml + tags: + - upgrade-pre-tasks + +- include: set-repo.yml + when: step_upgrade_set_repo + tags: + - upgrade-repo + +- include: upgrade-undercloud.yml + when: step_upgrade_undercloud + tags: + - upgrade-undercloud + +- include: upgrade-overcloud.yml + when: step_upgrade_overcloud + tags: + - upgrade-overcloud + +- include: post-upgrade.yml + tags: + - upgrade-post-tasks diff --git a/tasks/post-upgrade.yml b/tasks/post-upgrade.yml new file mode 100644 index 000000000..e69de29bb diff --git a/tasks/pre-upgrade.yml b/tasks/pre-upgrade.yml new file mode 100644 index 000000000..f700b79b8 --- /dev/null +++ b/tasks/pre-upgrade.yml @@ -0,0 +1,8 @@ +--- +- name: Update overcloud dns server + sudo: yes + lineinfile: + regexp: "nameserver" + line: "nameserver {{ oc_dns_server }}" + dest: "/etc/resolv.conf" + when: step_pre_upgrade diff --git a/tasks/set-repo.yml b/tasks/set-repo.yml new file mode 100644 index 000000000..da5ac94e2 --- /dev/null +++ b/tasks/set-repo.yml @@ -0,0 +1,14 @@ +--- +- name: Clean up the repos + sudo: yes + file: path=/etc/yum.repos.d/{{ item }} state=absent + with_items: "{{ repos }}" + +- name: Get delorean repo + sudo: yes + get_url: url={{ item }} dest={{ yum_repo_path }} + with_items: "{{ repos_url }}" + +- name: Clean yum cache + sudo: yes + shell: yum clean all diff --git a/tasks/upgrade-overcloud.yml b/tasks/upgrade-overcloud.yml new file mode 100644 index 000000000..7fefbe6f2 --- /dev/null +++ b/tasks/upgrade-overcloud.yml @@ -0,0 +1,25 @@ +--- +- name: Make sure no Tht repo is present + file: path={{ upgrade_working_dir }}/{{ tht_dir }} state=absent + +- name: Copy new Tht directory to the upgrade working dir + shell: > + cp -R /usr/share/openstack-tripleo-heat-templates \ + {{ upgrade_working_dir }}/{{ tht_dir }}; + +- name: Add the no ssh finger print checking into upgrade-non-controller.sh + sudo: yes + shell: > + sed -i 's/ssh/ssh -o StrictHostKeyChecking=no/' \ + {{ upgrade_non_controller_script }} + +- name: Create overcloud deploy script + template: + src: "{{ upgrade_script }}" + dest: "{{ upgrade_working_dir }}/overcloud-upgrade.sh" + mode: 0755 + +- name: Upgrade the overcloud + shell: > + {{ upgrade_working_dir }}/overcloud-upgrade.sh > {{ upgrade_log }} 2>&1 + when: step_upgrade_overcloud diff --git a/tasks/upgrade-undercloud.yml b/tasks/upgrade-undercloud.yml new file mode 100644 index 000000000..bacc0f2bf --- /dev/null +++ b/tasks/upgrade-undercloud.yml @@ -0,0 +1,10 @@ +--- +- name: Execute yum update on the undercloud + sudo: yes + yum: name=* state=latest + +- name: Upgrade the undercloud + shell: openstack undercloud install &> upgrade_undercloud.log + when: step_upgrade_undercloud + notify: + - restart openstack services diff --git a/templates/delorean-repo.sh.j2 b/templates/delorean-repo.sh.j2 new file mode 100644 index 000000000..e4003e6e3 --- /dev/null +++ b/templates/delorean-repo.sh.j2 @@ -0,0 +1,20 @@ +#!/bin/bash +# Script for set up the target repositories for Upgrade + +set -eux + +curl -o /etc/yum.repos.d/delorean.repo http://trunk.rdoproject.org/centos7-{{ target_upgrade_version }}/{{ delorean_hash | default('current-passed-ci')}}/delorean.repo + +curl -o /etc/yum.repos.d/delorean-deps.repo http://trunk.rdoproject.org/centos7-{{ target_upgrade_version }}/delorean-deps.repo + +# We need EPEL for the ceph packages currently, so make EPEL +# available only for those packages. +cat <<-EOF>>/etc/yum.repos.d/ceph.repo +[ceph] +name=Ceph packages from EPEL +mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=x86_64 +failovermethod=priority +enabled=1 +gpgcheck=0 +includepkgs=ceph,leveldb,libcephfs1,python-cephfs +EOF diff --git a/templates/upgrade-controller-liberty.sh.j2 b/templates/upgrade-controller-liberty.sh.j2 new file mode 100644 index 000000000..bed3b9e37 --- /dev/null +++ b/templates/upgrade-controller-liberty.sh.j2 @@ -0,0 +1,27 @@ +#!/bin/bash +source {{ upgrade_working_dir }}/stackrc +echo "execute script delivery" +openstack overcloud deploy --templates {{ tht_dir }} \ + -e {{ tht_dir }}/overcloud-resource-registry-puppet.yaml \ + -e {{ tht_dir }}/environments/puppet-pacemaker.yaml \ + -e {{ tht_dir }}/environments/major-upgrade-pacemaker-init.yaml + +echo "execute major upgrade controller" +openstack overcloud deploy --templates {{ tht_dir }} \ + -e {{ tht_dir }}/overcloud-resource-registry-puppet.yaml \ + -e {{ tht_dir }}/environments/puppet-pacemaker.yaml \ + -e {{ tht_dir }}/environments/major-upgrade-pacemaker.yaml + +echo "get compute uuid and update compute" +compute_uuid=`nova list | grep overcloud-novacompute-0 | awk '{ print $2; }'` +{{ upgrade_non_controller_script }} --upgrade $compute_uuid + +echo "get ceph uuid and update ceph" +ceph_uuid=`nova list | grep overcloud-cephstorage-0 | awk '{ print $2; }'` +{{ upgrade_non_controller_script }} --upgrade $ceph_uuid + +echo "execute converge" +openstack overcloud deploy --templates {{ tht_dir }} \ + -e {{ tht_dir }}/overcloud-resource-registry-puppet.yaml \ + -e {{ tht_dir }}/environments/puppet-pacemaker.yaml \ + -e {{ tht_dir }}/environments/major-upgrade-pacemaker-converge.yaml diff --git a/test.yaml b/test.yaml new file mode 100644 index 000000000..fce648b74 --- /dev/null +++ b/test.yaml @@ -0,0 +1,6 @@ +- name: Set undercloud repo + hosts: undercloud + gather_facts: no + sudo: yes + roles: + - { role: ansible-role-tripleo-overcloud-upgrade, tags: ['upgrade-repo'] } diff --git a/tests/inventory b/tests/inventory new file mode 100644 index 000000000..a53c21a46 --- /dev/null +++ b/tests/inventory @@ -0,0 +1,2 @@ +[undercloud] +undercloud diff --git a/tests/test.yml b/tests/test.yml new file mode 100644 index 000000000..2291f6f6e --- /dev/null +++ b/tests/test.yml @@ -0,0 +1,31 @@ +- name: Execute pre-task for upgrade + hosts: overcloud + gather_facts: no + sudo: yes + roles: + - { role: ansible-role-tripleo-overcloud-upgrade, tags: ['upgrade-pre-tasks'] } + +- name: Set undercloud repo + hosts: undercloud + gather_facts: no + sudo: yes + roles: + - { role: ansible-role-tripleo-overcloud-upgrade, tags: ['upgrade-repo'] } + +- name: Upgrade the undercloud + hosts: undercloud + gather_facts: no + roles: + - { role: ansible-role-tripleo-overcloud-upgrade, tags: ['upgrade-undercloud'] } + +- name: Upgrade the overcloud + hosts: undercloud + gather_facts: no + roles: + - { role: ansible-role-tripleo-overcloud-upgrade, tags: ['upgrade-overcloud'] } + +- name: Execute post upgrade tasks + hosts: undercloud + gather_facts: no + roles: + - { role: ansible-role-tripleo-overcloud-upgrade, tags: ['upgrade-post-tasks'] } diff --git a/vars/main.yml b/vars/main.yml new file mode 100644 index 000000000..0f95dba16 --- /dev/null +++ b/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for upgrade