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 N+1 and the upgrade check was run before
the restart of the services with N+1 code then the check warns for N-1
computes in the system.

Conflicts:
  doc/source/cli/nova-status.rst
  doc/source/install/verify.rst
  nova/cmd/status.py
  nova/tests/unit/cmd/test_status.py

Note: Fixed trivial conflicts due to different amount of upgrade
checks exists on ussuri than on victoria (the patch that is missing
from Ussuri is Ic4d3b998bb9701cb1e3ef12d9bb6f4d91cc19c18). Also needed
to use six.text_type() instead of str() due to used hacking package
(and thus flake8) requires it still on Ussuri.

Related-Bug: #1903545

Change-Id: I873b0c1e6e695ae88241bbf75ac9f80ecc6f5664
(cherry picked from commit 3b8257cd23)
(cherry picked from commit 4e5b92545d)
This commit is contained in:
Balazs Gibizer
2020-10-30 10:41:06 +01:00
committed by Elod Illes
parent 75bac345d5
commit cff48e2cd4
4 changed files with 49 additions and 0 deletions

View File

@@ -147,6 +147,8 @@ Upgrade
* Checks for the policy files are not automatically overwritten with
new defaults.
* Checks for computes older than the previous major release. This check was
backported from 23.0.0 (Wallaby).
See Also
========

View File

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

View File

@@ -411,6 +411,17 @@ class UpgradeCommands(upgradecheck.UpgradeCommands):
policy.reset()
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, six.text_type(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
@@ -429,6 +440,8 @@ class UpgradeCommands(upgradecheck.UpgradeCommands):
(_('Cinder API'), _check_cinder),
# Added in Ussuri
(_('Policy Scope-based Defaults'), _check_policy),
# Backported from Wallaby
(_('Older than N-1 computes'), _check_old_computes)
)

View File

@@ -39,6 +39,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
@@ -602,3 +603,32 @@ class TestUpgradeCheckPolicyEnableScope(TestUpgradeCheckPolicy):
def setUp(self):
super(TestUpgradeCheckPolicyEnableScope, self).setUp()
self.flags(enforce_scope=True, group="oslo_policy")
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)