Clear up confusion on cinder's default volume type

This patch clears up confusion resulting from both tripleo and
cinder creating "default" volume types. The quotes indicate subtle
differences in how the term is used, and how it causes confusion for
cloud users.

TripleO added support for configuring cinder's default volume type,
and later cinder itself added its own support for a default volume
type. The cinder project's motivation was to provide a volume type
for all volumes, even when cloud administrators hadn't defined one.
But from tripleo's perspective, cinder's volume type was redundant
because tripleo *does* define a default volume type.

The confusion for cloud users is that cinder chose "__DEFAULT__" for
the name of the volume type, and "Default Volume Type" for its
description. This is misleading because tripleo's CinderDefaultVolumeType
is the actual default volume type.

Clearing up the confusion depends on whether the overcloud is a green
field deployment where no volumes have been created, or a brown field
deployment where cinder's __DEFAULT__ type may be in use. If no volumes
exist then it's safe for tripleo to simply delete cinder's __DEFAULT__
type. Otherwise, the __DEFAULT__ type's description is updated so that
it indicates the actual default type is the one established by the
CinderDefaultVolumeType parameter.

Lastly, CinderDefaultVolumeType is now constrained to prevent it being
set to an empty string. That should never happen, so this is just a
safety net.

Related-Bug: #1782217
Change-Id: Idf27c14b31dc077ef9a0e567bd502ed6842bd52b
(cherry picked from commit 4bf4866030)
(cherry picked from commit f10e5f2e6e)
(cherry picked from commit b7019a6272)
This commit is contained in:
Alan Bishop 2021-10-25 07:36:24 -07:00
parent 2c7c0c5522
commit d0ca4fe9fe
2 changed files with 28 additions and 1 deletions

View File

@ -54,6 +54,11 @@ parameters:
default: tripleo default: tripleo
description: The name of Cinder's default volume type. description: The name of Cinder's default volume type.
type: string type: string
constraints:
- allowed_pattern: "[a-zA-Z0-9]+"
description: >
The default volume type must be at least 1 character and contain only
letters and numbers.
CinderEnableDBPurge: CinderEnableDBPurge:
default: true default: true
description: | description: |
@ -439,7 +444,7 @@ outputs:
state: absent state: absent
when: when:
- step|int == 4 - step|int == 4
- name: Manage Cinder Volume Type - name: Manage Cinder's default volume type
become: true become: true
vars: vars:
default_volume_type: {get_param: CinderDefaultVolumeType} default_volume_type: {get_param: CinderDefaultVolumeType}
@ -452,6 +457,16 @@ outputs:
if ! openstack volume type show "{{ default_volume_type }}"; then if ! openstack volume type show "{{ default_volume_type }}"; then
openstack volume type create --public "{{ default_volume_type }}" openstack volume type create --public "{{ default_volume_type }}"
fi fi
eval $(openstack volume type show __DEFAULT__ -f shell -c id -c description)
if [ -n "$id" ]; then
vols=$(openstack volume list -f value -c ID)
tripleo_descr="For internal use, '{{ default_volume_type }}' is the default volume type"
if [ -z "$vols" ]; then
openstack volume type delete $id
elif [ "$description" != "$tripleo_descr" ]; then
openstack volume type set $id --description "$tripleo_descr"
fi
fi
args: args:
executable: /bin/bash executable: /bin/bash
changed_when: false changed_when: false

View File

@ -0,0 +1,12 @@
---
other:
- |
Steps are taken to minimize chances of confusion between the default
block storage volume type established by the CinderDefaultVolumeType
parameter, and cinder's own __DEFAULT__ volume type.
In a new deployment where no volumes exist, cinder's __DEFAULT__ type is
deleted because it is redundant. In an upgrade scenerio, if volumes exist
then the __DEFAULT__ type's description is updated to indicate the actual
default volume type is the one established by the CinderDefaultVolumeType
parameter.