diff --git a/cluster-autoscaler/cloudprovider/mcm/mcm_cloud_provider.go b/cluster-autoscaler/cloudprovider/mcm/mcm_cloud_provider.go index ce77f8f16148..fff26db5fb78 100644 --- a/cluster-autoscaler/cloudprovider/mcm/mcm_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/mcm/mcm_cloud_provider.go @@ -190,10 +190,8 @@ func (mcm *mcmCloudProvider) GetResourceLimiter() (*cloudprovider.ResourceLimite return mcm.resourceLimiter, nil } -// Refresh is called before every main loop and can be used to dynamically update cloud provider state. -// In particular the list of node groups returned by NodeGroups can change as a result of CloudProvider.Refresh(). -func (mcm *mcmCloudProvider) Refresh() error { - +// checkMCMAvailableReplicas checks if mcm is online +func (mcm *mcmCloudProvider) checkMCMAvailableReplicas() error { namespace := mcm.mcmManager.namespace deployment, err := mcm.mcmManager.deploymentLister.Deployments(namespace).Get("machine-controller-manager") if err != nil { @@ -204,6 +202,18 @@ func (mcm *mcmCloudProvider) Refresh() error { return fmt.Errorf("machine-controller-manager is offline. Cluster autoscaler operations would be suspended.") } + return nil +} + +// Refresh is called before every main loop and can be used to dynamically update cloud provider state. +// In particular the list of node groups returned by NodeGroups can change as a result of CloudProvider.Refresh(). +func (mcm *mcmCloudProvider) Refresh() error { + + err := mcm.checkMCMAvailableReplicas() + if err != nil { + return err + } + for _, machineDeployment := range mcm.machinedeployments { err := mcm.mcmManager.resetPriorityForNotToBeDeletedMachines(machineDeployment.Name) if err != nil { diff --git a/cluster-autoscaler/cloudprovider/mcm/mcm_cloud_provider_test.go b/cluster-autoscaler/cloudprovider/mcm/mcm_cloud_provider_test.go index a46393ebc386..cc7ef22900ed 100644 --- a/cluster-autoscaler/cloudprovider/mcm/mcm_cloud_provider_test.go +++ b/cluster-autoscaler/cloudprovider/mcm/mcm_cloud_provider_test.go @@ -350,7 +350,7 @@ func TestRefresh(t *testing.T) { table := []data{ { - "should set available replicas of mcm as zero", + "should return an error if MCM has zero available replicas", setup{ nodes: newNodes(1, "fakeID", []bool{false}), machines: newMachines(1, "fakeID", nil, "machinedeployment-1", "machineset-1", []string{"1"}, []bool{false}), @@ -364,7 +364,7 @@ func TestRefresh(t *testing.T) { }, { - "should get no deployment of mcm", + "should return an error if MCM deployment is not found", setup{ nodes: newNodes(1, "fakeID", []bool{false}), machines: newMachines(1, "fakeID", nil, "machinedeployment-1", "machineset-1", []string{"1"}, []bool{false}),