Add upgrade check about old computes

Report a warning during upgrade checks if there are computes older than
the previous major nova release in the system.

So if code is upgraded to Wallaby and the upgrade check was run before
the restart of the services with W code then the check warns for Ussuri
computes in the system.

Change-Id: I873b0c1e6e695ae88241bbf75ac9f80ecc6f5664
This commit is contained in:
Balazs Gibizer 2020-10-30 10:41:06 +01:00
parent aa7c6f8769
commit 3b8257cd23
4 changed files with 50 additions and 0 deletions

View File

@ -143,6 +143,10 @@ Upgrade
* Checks for the policy files is not JSON-formatted.
**23.0.0 (Wallaby)**
* Checks for computes older than the previous major release
See Also
========

View File

@ -131,3 +131,7 @@ Verify operation of the Compute service.
| Result: Success |
| Details: None |
+--------------------------------------------------------------------+
| Check: Older than N-1 computes |
| Result: Success |
| Details: None |
+--------------------------------------------------------------------+

View File

@ -427,6 +427,16 @@ class UpgradeCommands(upgradecheck.UpgradeCommands):
status = upgradecheck.Result(upgradecheck.Code.FAILURE, msg)
return status
def _check_old_computes(self):
# warn if there are computes in the system older than the previous
# major release
try:
utils.raise_if_old_compute()
except exception.TooOldComputeService as e:
return upgradecheck.Result(upgradecheck.Code.WARNING, str(e))
return upgradecheck.Result(upgradecheck.Code.SUCCESS)
# The format of the check functions is to return an upgradecheck.Result
# object with the appropriate upgradecheck.Code and details set. If the
# check hits warnings or failures then those should be stored in the
@ -447,6 +457,8 @@ class UpgradeCommands(upgradecheck.UpgradeCommands):
(_('Policy Scope-based Defaults'), _check_policy),
# Added in Victoria
(_('Policy File JSON to YAML Migration'), _check_policy_json),
# Added in Wallaby
(_('Older than N-1 computes'), _check_old_computes)
)

View File

@ -44,6 +44,7 @@ from nova import exception
# NOTE(mriedem): We only use objects as a convenience to populate the database
# in the tests, we don't use them in the actual CLI.
from nova import objects
from nova.objects import service
from nova import policy
from nova import test
from nova.tests import fixtures as nova_fixtures
@ -667,3 +668,32 @@ class TestUpgradeCheckPolicyJSON(test.NoDBTestCase):
jsonutils.dump(self.data, fh)
self.assertEqual(upgradecheck.Code.FAILURE,
self.cmd._check_policy_json().code)
class TestUpgradeCheckOldCompute(test.NoDBTestCase):
def setUp(self):
super(TestUpgradeCheckOldCompute, self).setUp()
self.cmd = status.UpgradeCommands()
def test_no_compute(self):
self.assertEqual(
upgradecheck.Code.SUCCESS, self.cmd._check_old_computes().code)
def test_only_new_compute(self):
last_supported_version = service.SERVICE_VERSION_ALIASES[
service.OLDEST_SUPPORTED_SERVICE_VERSION]
with mock.patch(
"nova.objects.service.get_minimum_version_all_cells",
return_value=last_supported_version):
self.assertEqual(
upgradecheck.Code.SUCCESS, self.cmd._check_old_computes().code)
def test_old_compute(self):
too_old = service.SERVICE_VERSION_ALIASES[
service.OLDEST_SUPPORTED_SERVICE_VERSION] - 1
with mock.patch(
"nova.objects.service.get_minimum_version_all_cells",
return_value=too_old):
result = self.cmd._check_old_computes()
self.assertEqual(upgradecheck.Code.WARNING, result.code)