Merge "Minor update steps for ODL" into stable/queens

This commit is contained in:
Zuul 2018-03-16 23:40:48 +00:00 committed by Gerrit Code Review
commit a33c1290aa
8 changed files with 135 additions and 34 deletions

View File

@ -23,6 +23,7 @@
{% set post_upgrade_steps_max = 4 -%}
{% set fast_forward_upgrade_steps_max = 9 -%}
{% set fast_forward_upgrade_prep_steps_max = 3 -%}
{% set post_update_steps_max = 4 -%}
heat_template_version: queens
@ -619,3 +620,15 @@ outputs:
- include_tasks: {{role.name}}/fast_forward_upgrade_tasks.yaml
when: role_name == '{{role.name}}' and ansible_hostname == {{role.name}}[0]
{%- endfor %}
post_update_steps_tasks: |
{%- for role in roles %}
- include: {{role.name}}/post_update_tasks.yaml
when: role_name == '{{role.name}}'
{%- endfor %}
post_update_steps_playbook: |
- hosts: overcloud
tasks:
- include: post_update_steps_tasks.yaml
with_sequence: start=0 end={{post_update_steps_max-1}}
loop_control:
loop_var: step

View File

@ -283,6 +283,16 @@ resources:
expression: coalesce($.data, []).where($ != null).select($.get('update_tasks')).where($ != null).flatten().distinct()
data: {get_attr: [ServiceChain, role_data]}
PostUpdateTasks:
type: OS::Heat::Value
properties:
type: comma_delimited_list
value:
yaql:
# Note we use distinct() here to filter any identical tasks, e.g yum update for all services
expression: coalesce($.data, []).where($ != null).select($.get('post_update_tasks')).where($ != null).flatten().distinct()
data: {get_attr: [ServiceChain, role_data]}
UpgradeBatchTasks:
type: OS::Heat::Value
properties:
@ -349,6 +359,7 @@ outputs:
upgrade_tasks: {get_attr: [UpgradeTasks, value]}
post_upgrade_tasks: {get_attr: [PostUpgradeTasks, value]}
update_tasks: {get_attr: [UpdateTasks, value]}
post_update_tasks: {get_attr: [PostUpdateTasks, value]}
upgrade_batch_tasks: {get_attr: [UpgradeBatchTasks, value]}
service_metadata_settings: {get_attr: [ServiceServerMetadataHook, metadata]}

View File

@ -44,6 +44,14 @@ parameters:
type: string
description: Specifies the default CA cert to use if TLS is used for
services in the internal network.
ODLUpdateLevel:
default: 1
description: Specify the level of update
type: number
constraints:
- allowed_values:
- 1
- 2
conditions:
@ -167,23 +175,25 @@ outputs:
- opendaylight_enabled.rc == 0
service: name=opendaylight state=stopped enabled=no
# Containarised deployment upgrade steps
- name: remove journal and snapshots
when: step|int == 0
file:
path: /var/lib/opendaylight/{{item}}
state: absent
with_items:
- snapshots
- journal
- name: Set ODL upgrade flag to True
copy:
dest: /var/lib/opendaylight/etc/opendaylight/datastore/initial/config/genius-mdsalutil-config.xml
content: |
<config xmlns="urn:opendaylight:params:xml:ns:yang:mdsalutil">
<upgradeInProgress>true</upgradeInProgress>
</config>
when: step|int == 1
post_upgrade_tasks:
- name: ODL container L2 update and upgrade tasks
block: &odl_container_upgrade_tasks
- name: remove journal and snapshots
when: step|int == 0
file:
path: /var/lib/opendaylight/{{item}}
state: absent
with_items:
- snapshots
- journal
- name: Set ODL upgrade flag to True
copy:
dest: /var/lib/opendaylight/etc/opendaylight/datastore/initial/config/genius-mdsalutil-config.xml
content: |
<config xmlns="urn:opendaylight:params:xml:ns:yang:mdsalutil">
<upgradeInProgress>true</upgradeInProgress>
</config>
when: step|int == 1
post_upgrade_tasks: &odl_container_post_upgrade_tasks
- name: Unset upgrade flag in ODL
shell:
str_replace:
@ -192,7 +202,20 @@ outputs:
-H "Content-Type: application/json" \
$ODL_URI/restconf/config/genius-mdsalutil:config'
params:
$ODL_USERNAME: {get_param: [OpenDaylightBase, OpenDaylightUsername]}
$ODL_PASSWORD: {get_param: [OpenDaylightBase, OpenDaylightPassword]}
$ODL_USERNAME: {get_attr: [OpenDaylightBase, role_data, config_settings, 'opendaylight::username']}
$ODL_PASSWORD: {get_attr: [OpenDaylightBase, role_data, config_settings, 'opendaylight::password']}
$ODL_URI: {get_param: [EndpointMap, OpenDaylightInternal, uri]}
when: step|int == 0
update_tasks:
- name: Get ODL update level
block: &get_odl_update_level
- name: store update level to update_level variable
set_fact:
odl_update_level: {get_param: ODLUpdateLevel}
- name: Run L2 update tasks that are similar to upgrade_tasks when update level is 2
block: *odl_container_upgrade_tasks
when: odl_update_level == 2
post_update_tasks:
- block: *get_odl_update_level
- block: *odl_container_post_upgrade_tasks
when: odl_update_level == 2

View File

@ -0,0 +1,11 @@
# This file describes parameters needed for ODL update.
# This file is to be used along with other env files during
# level 2 minor update.
# Level 2 update involves yang changes in ODL within same ODL release and
# hence needs DB wipe and resync.
# Level 1 is simple update - stop ODL, pull new image, start ODL
# This file is not be used during level1 update or major upgrade.
# In case doubt, please reach out to ODL developers on #tripleo IRC channel
parameter_defaults:
ODLUpdateLevel: 2

View File

@ -104,6 +104,14 @@ parameters:
type: string
description: Specifies the default CA cert to use if TLS is used for
services in the internal network.
ODLUpdateLevel:
default: 1
description: Specify the level of update
type: number
constraints:
- allowed_values:
- 1
- 2
parameter_groups:
- label: deprecated
@ -230,14 +238,16 @@ outputs:
- openvswitch_enabled.rc == 0
service: name=openvswitch state=stopped
# Container upgrade steps.
- name: Block connections to ODL. #This rule will be inserted at the top.
iptables: chain=OUTPUT action=insert protocol=tcp destination_port={{ item }} jump=DROP
when: step|int == 0
with_items:
- 6640
- 6653
- 6633
post_upgrade_tasks:
- name: ODL container L2 update and upgrade tasks
block: &odl_container_upgrade_tasks
- name: Block connections to ODL. #This rule will be inserted at the top.
iptables: chain=OUTPUT action=insert protocol=tcp destination_port={{ item }} jump=DROP
when: step|int == 0
with_items:
- 6640
- 6653
- 6633
post_upgrade_tasks: &odl_container_post_upgrade_tasks
- name: Check service openvswitch is running
command: systemctl is-active --quiet openvswitch
tags: common
@ -260,6 +270,20 @@ outputs:
- name: start openvswitch service
when: step|int == 3
service : name=openvswitch state=started
update_tasks:
- name: Get ODL update level
block: &get_odl_update_level
- name: store update level to update_level variable
set_fact:
odl_update_level: {get_param: ODLUpdateLevel}
- name: Run L2 update tasks that are similar to upgrade_tasks when update level is 2
block: *odl_container_upgrade_tasks
when: odl_update_level == 2
post_update_tasks:
- block: *get_odl_update_level
- block: *odl_container_post_upgrade_tasks
when: odl_update_level == 2
metadata_settings:
if:
- internal_tls_enabled
@ -267,4 +291,4 @@ outputs:
- service: ovs
network: {get_param: [ServiceNetMap, OpendaylightApiNetwork]}
type: node
- null
- null

View File

@ -1,6 +1,6 @@
---
features:
upgrade:
- Add ODL upgradability
Steps of upgrade are as follows
1. Block OVS instances to connect to ODL done in upgrade_tasks

View File

@ -0,0 +1,19 @@
---
features:
- Minor update ODL steps are added. ODL minor update (within same ODL
release) can have 2 different workflow. These are called level 1 and
level2. Level 1 is simple - stop, update and start ODL. Level 2 is
complex and involved yang model changes. This requires wiping of
DB and resync to repopulate the data.
Steps involved in level 2 update are
1. Block OVS instances to connect to ODL
2. Set ODL upgrade flag to True
3. Start ODL
4. Start Neutron re-sync and wait for it to finish
5. Delete OVS groups and ports
6. Stop OVS
7. Unblock OVS ports
8. Start OVS
9. Unset ODL upgrade flag
To achieve L2 update, use "-e environments/services-docker/
update-odl.yaml" along with other env files to the update command.

View File

@ -46,11 +46,11 @@ REQUIRED_DOCKER_SECTIONS = ['service_name', 'docker_config', 'puppet_config',
OPTIONAL_DOCKER_SECTIONS = ['docker_puppet_tasks', 'upgrade_tasks',
'fast_forward_upgrade_tasks',
'post_upgrade_tasks', 'update_tasks',
'service_config_settings', 'host_prep_tasks',
'metadata_settings', 'kolla_config',
'global_config_settings', 'logging_source',
'logging_groups', 'external_deploy_tasks',
'external_post_deploy_tasks',
'post_update_tasks', 'service_config_settings',
'host_prep_tasks', 'metadata_settings',
'kolla_config', 'global_config_settings',
'logging_source', 'logging_groups',
'external_deploy_tasks', 'external_post_deploy_tasks',
'docker_config_scripts', 'step_config']
REQUIRED_DOCKER_PUPPET_CONFIG_SECTIONS = ['config_volume', 'step_config',
'config_image']