diff --git a/sysinv/sysinv/sysinv/sysinv/api/controllers/v1/kube_upgrade.py b/sysinv/sysinv/sysinv/sysinv/api/controllers/v1/kube_upgrade.py index ba28af3632..79d96d264c 100755 --- a/sysinv/sysinv/sysinv/sysinv/api/controllers/v1/kube_upgrade.py +++ b/sysinv/sysinv/sysinv/sysinv/api/controllers/v1/kube_upgrade.py @@ -393,7 +393,8 @@ class KubeUpgradeController(rest.RestController): kube_host_upgrades = \ pecan.request.dbapi.kube_host_upgrade_get_list() for kube_host_upgrade in kube_host_upgrades: - if kube_host_upgrade.status is not None: + if kube_host_upgrade.status != \ + kubernetes.KUBE_HOST_UPGRADED_KUBELET: raise wsme.exc.ClientSideError(_( "At least one host has not completed the kubernetes " "upgrade")) @@ -411,6 +412,11 @@ class KubeUpgradeController(rest.RestController): kube_cmd_versions.kubelet_version = kube_upgrade_obj.to_version.lstrip('v') kube_cmd_versions.save() + # The global kubelet version is set, clear the per-host status. + for kube_host_upgrade in kube_host_upgrades: + pecan.request.dbapi.kube_host_upgrade_update( + kube_host_upgrade.id, {'status': None}) + # All is well, mark the upgrade as complete kube_upgrade_obj.state = kubernetes.KUBE_UPGRADE_COMPLETE kube_upgrade_obj.save() diff --git a/sysinv/sysinv/sysinv/sysinv/common/kubernetes.py b/sysinv/sysinv/sysinv/sysinv/common/kubernetes.py index 34691b529c..c38f0c8ad4 100644 --- a/sysinv/sysinv/sysinv/sysinv/common/kubernetes.py +++ b/sysinv/sysinv/sysinv/sysinv/common/kubernetes.py @@ -88,6 +88,7 @@ KUBE_HOST_UPGRADING_CONTROL_PLANE = 'upgrading-control-plane' KUBE_HOST_UPGRADING_CONTROL_PLANE_FAILED = 'upgrading-control-plane-failed' KUBE_HOST_UPGRADING_KUBELET = 'upgrading-kubelet' KUBE_HOST_UPGRADING_KUBELET_FAILED = 'upgrading-kubelet-failed' +KUBE_HOST_UPGRADED_KUBELET = 'upgraded-kubelet' # Kubernetes rootca update states KUBE_ROOTCA_UPDATE_STARTED = 'update-started' diff --git a/sysinv/sysinv/sysinv/sysinv/conductor/manager.py b/sysinv/sysinv/sysinv/sysinv/conductor/manager.py index db0adec360..28a29c955c 100644 --- a/sysinv/sysinv/sysinv/sysinv/conductor/manager.py +++ b/sysinv/sysinv/sysinv/sysinv/conductor/manager.py @@ -13665,7 +13665,7 @@ class ConductorManager(service.PeriodicService): # The kubelet update was successful kube_host_upgrade_obj = objects.kube_host_upgrade.get_by_host_id( context, host_obj.id) - kube_host_upgrade_obj.status = None + kube_host_upgrade_obj.status = kubernetes.KUBE_HOST_UPGRADED_KUBELET kube_host_upgrade_obj.save() def kube_upgrade_networking(self, context, kube_version): diff --git a/sysinv/sysinv/sysinv/sysinv/puppet/kubernetes.py b/sysinv/sysinv/sysinv/sysinv/puppet/kubernetes.py index 06b631e8a3..c71666b3e6 100644 --- a/sysinv/sysinv/sysinv/sysinv/puppet/kubernetes.py +++ b/sysinv/sysinv/sysinv/sysinv/puppet/kubernetes.py @@ -380,7 +380,9 @@ class KubernetesPuppet(base.BasePuppet): if kube_upgrade_state: kube_host_upgrade = objects.kube_host_upgrade.get_by_host_id( self.context, host.id) - if kube_host_upgrade.status == kubernetes.KUBE_HOST_UPGRADING_KUBELET: + if kube_host_upgrade.status in [ + kubernetes.KUBE_HOST_UPGRADING_KUBELET, + kubernetes.KUBE_HOST_UPGRADED_KUBELET]: kubelet_version = kube_host_upgrade.target_version.lstrip('v') config.update({'platform::kubernetes::params::kubeadm_version': kubeadm_version}) diff --git a/sysinv/sysinv/sysinv/sysinv/tests/api/test_kube_upgrade.py b/sysinv/sysinv/sysinv/sysinv/tests/api/test_kube_upgrade.py index eac14513ff..47fc36d8c9 100644 --- a/sysinv/sysinv/sysinv/sysinv/tests/api/test_kube_upgrade.py +++ b/sysinv/sysinv/sysinv/sysinv/tests/api/test_kube_upgrade.py @@ -728,6 +728,12 @@ class TestPatch(TestKubeUpgrade, state=kubernetes.KUBE_UPGRADING_KUBELETS) uuid = kube_upgrade.uuid + # Mark the kube host upgrade as upgraded-kubelet + values = { + 'status': kubernetes.KUBE_HOST_UPGRADED_KUBELET + } + self.dbapi.kube_host_upgrade_update(1, values) + # Update state new_state = kubernetes.KUBE_UPGRADE_COMPLETE response = self.patch_json('/kube_upgrade', diff --git a/sysinv/sysinv/sysinv/sysinv/tests/conductor/test_manager.py b/sysinv/sysinv/sysinv/sysinv/tests/conductor/test_manager.py index 19645081ac..3a622b11c0 100644 --- a/sysinv/sysinv/sysinv/sysinv/tests/conductor/test_manager.py +++ b/sysinv/sysinv/sysinv/sysinv/tests/conductor/test_manager.py @@ -1222,9 +1222,10 @@ class ManagerTestCase(base.DbTestCase): self.assertEqual(updated_upgrade.state, kubernetes.KUBE_UPGRADED_SECOND_MASTER) - # Verify that the host upgrade status was cleared + # Verify that the host upgrade status is upgraded-kubelet updated_host_upgrade = self.dbapi.kube_host_upgrade_get(1) - self.assertEqual(updated_host_upgrade.status, None) + self.assertEqual(updated_host_upgrade.status, + kubernetes.KUBE_HOST_UPGRADED_KUBELET) def test_kube_upgrade_kubelet_second_master(self): # Create an upgrade