Ensure user is aware upgrade has not happened w/ train

There is a 'hole' in the user experience where if you try to
openstack-upgrade from stein to train but have no already related
placement to the nova-cc unit, then the openstack upgrade is aborted and
a workload message indicates that the relation is needed.

However, if you then subsequently add the placement relation, the
warning goes away, but the payload is not upgraded to match the
openstack-origin value.

This patch adds a warning if the openstack-origin is for train, the
payload is stein, the action-managed-upgrade is false and the placement
relation is made; i.e. that the operator fell into the above hole.

Change-Id: I360f2d72cad374c31ee766065af682e2fa6218d1
Closes-Bug: #1910276
This commit is contained in:
Alex Kavanagh 2021-01-07 20:16:20 +00:00
parent 9f29f8753a
commit 6c5a5cdff3
1 changed files with 14 additions and 7 deletions

View File

@ -1694,7 +1694,11 @@ def check_optional_relations(configs):
"""Check optional relations and set status
If attempting to upgrade from Stein->Train, block until Placement
charm is related.
charm is related. If placement does exist, but openstack-origin doesn't
match installed payload then order of upgrades may mean that the blocked
message has been missed; e.g. the upgrade was attempted, then placement was
related, but the payload version doesn't match the corresponding
openstack-origin. Check only performed if action-managed-upgrade is false.
Also check that if we have a relation_id for high availability that we can
get the hacluster config. If we can't then we are blocked.
@ -1712,12 +1716,15 @@ def check_optional_relations(configs):
new_os_rel = ch_utils.get_os_codename_install_source(new_src)
cmp_new_os_rel = ch_utils.CompareOpenStackReleases(new_os_rel)
if (cmp_cur_os_rel == 'stein' and
cmp_new_os_rel == 'train' and
not hookenv.relation_ids('placement')):
return ('blocked',
'placement charm must be related prior to '
'upgrading to OpenStack Train')
if cmp_cur_os_rel == 'stein' and cmp_new_os_rel == 'train':
if not hookenv.relation_ids('placement'):
return ('blocked',
'placement charm must be related prior to '
'upgrading to OpenStack Train')
if not hookenv.config('action-managed-upgrade'):
return ('blocked',
"openstack-origin '{}' doesn't match installed payload"
.format(new_src))
if hookenv.relation_ids('ha'):
try: