Merge "Allow target k8s version more than one minor version larger for AIO-SX"
This commit is contained in:
commit
8cacf3f026
|
@ -192,6 +192,7 @@ class KubeUpgradeController(rest.RestController):
|
|||
|
||||
force = body.get('force', False) is True
|
||||
alarm_ignore_list = body.get('alarm_ignore_list')
|
||||
system = pecan.request.dbapi.isystem_get_one()
|
||||
|
||||
# There must not be a platform upgrade in progress
|
||||
try:
|
||||
|
@ -212,7 +213,7 @@ class KubeUpgradeController(rest.RestController):
|
|||
raise wsme.exc.ClientSideError(_(
|
||||
"A kubernetes upgrade is already in progress"))
|
||||
|
||||
# The target version must be available
|
||||
# Check whether target version is available or not
|
||||
try:
|
||||
target_version_obj = objects.kube_version.get_by_version(
|
||||
to_version)
|
||||
|
@ -221,16 +222,23 @@ class KubeUpgradeController(rest.RestController):
|
|||
"Kubernetes version %s is not available" % to_version))
|
||||
|
||||
# The upgrade path must be supported
|
||||
current_kube_version = \
|
||||
self._kube_operator.kube_get_kubernetes_version()
|
||||
if not target_version_obj.can_upgrade_from(current_kube_version):
|
||||
raise wsme.exc.ClientSideError(_(
|
||||
"The installed Kubernetes version %s cannot upgrade to "
|
||||
"version %s" % (current_kube_version,
|
||||
target_version_obj.version)))
|
||||
current_kube_version = self._kube_operator.kube_get_kubernetes_version()
|
||||
version_states = self._kube_operator.kube_get_version_states()
|
||||
|
||||
# The target version must be available state
|
||||
if system.system_mode == constants.SYSTEM_MODE_SIMPLEX:
|
||||
if version_states.get(to_version) != kubernetes.KUBE_STATE_AVAILABLE:
|
||||
raise wsme.exc.ClientSideError(_(
|
||||
"The target Kubernetes version %s is not in "
|
||||
"available state" % (target_version_obj.version)))
|
||||
else:
|
||||
if not target_version_obj.can_upgrade_from(current_kube_version):
|
||||
raise wsme.exc.ClientSideError(_(
|
||||
"The installed Kubernetes version %s cannot upgrade to "
|
||||
"version %s" % (current_kube_version,
|
||||
target_version_obj.version)))
|
||||
|
||||
# The current kubernetes version must be active
|
||||
version_states = self._kube_operator.kube_get_version_states()
|
||||
if version_states.get(current_kube_version) != \
|
||||
kubernetes.KUBE_STATE_ACTIVE:
|
||||
raise wsme.exc.ClientSideError(_(
|
||||
|
|
|
@ -250,6 +250,58 @@ class TestListKubeUpgrade(TestKubeUpgrade):
|
|||
kubernetes.KUBE_UPGRADING_FIRST_MASTER)
|
||||
|
||||
|
||||
class TestPostKubeUpgradeSimplex(TestKubeUpgrade,
|
||||
dbbase.ProvisionedControllerHostTestCase):
|
||||
system_mode = constants.SYSTEM_MODE_SIMPLEX
|
||||
|
||||
@mock.patch('sysinv.common.health.Health._check_trident_compatibility', lambda x: True)
|
||||
def test_create_simplex(self):
|
||||
# Test creation of upgrade
|
||||
self.kube_get_kubernetes_version_result = 'v1.42.1'
|
||||
self.kube_get_version_states_result = {'v1.42.1': 'active',
|
||||
'v1.42.2': 'available',
|
||||
'v1.43.1': 'available',
|
||||
'v1.43.2': 'available',
|
||||
'v1.43.3': 'available'}
|
||||
create_dict = dbutils.post_get_test_kube_upgrade(to_version='v1.43.3')
|
||||
result = self.post_json('/kube_upgrade', create_dict,
|
||||
headers={'User-Agent': 'sysinv-test'})
|
||||
|
||||
# Verify that the upgrade has the expected attributes
|
||||
self.assertEqual(result.json['from_version'], 'v1.42.1')
|
||||
self.assertEqual(result.json['to_version'], 'v1.43.3')
|
||||
self.assertEqual(result.json['state'],
|
||||
kubernetes.KUBE_UPGRADE_STARTED)
|
||||
|
||||
# see if kubeadm_version was changed in DB
|
||||
kube_cmd_version = self.dbapi.kube_cmd_version_get()
|
||||
self.assertEqual(kube_cmd_version.kubeadm_version, '1.43.3')
|
||||
|
||||
# Verify that the target version for the host is still the current version
|
||||
kube_host_upgrade = self.dbapi.kube_host_upgrade_get_by_host(
|
||||
self.host.id)
|
||||
self.assertEqual('v1.42.1', kube_host_upgrade.target_version)
|
||||
|
||||
def test_create_simplex_upgrade_path_not_supported(self):
|
||||
# Test creation of upgrade when upgrade path is not supported
|
||||
self.kube_get_kubernetes_version_result = 'v1.42.1'
|
||||
self.kube_get_version_states_result = {'v1.42.1': 'active',
|
||||
'v1.42.2': 'available',
|
||||
'v1.43.1': 'unavailable',
|
||||
'v1.43.2': 'unavailable',
|
||||
'v1.43.3': 'unavailable'}
|
||||
|
||||
create_dict = dbutils.post_get_test_kube_upgrade(to_version='v1.43.3')
|
||||
result = self.post_json('/kube_upgrade', create_dict,
|
||||
headers={'User-Agent': 'sysinv-test'},
|
||||
expect_errors=True)
|
||||
|
||||
self.assertEqual(result.content_type, 'application/json')
|
||||
self.assertEqual(http_client.BAD_REQUEST, result.status_int)
|
||||
self.assertIn("version v1.43.3 is not in available state",
|
||||
result.json['error_message'])
|
||||
|
||||
|
||||
class TestPostKubeUpgrade(TestKubeUpgrade,
|
||||
dbbase.ProvisionedControllerHostTestCase):
|
||||
|
||||
|
|
Loading…
Reference in New Issue