Skip to content

Commit 4b3a585

Browse files
authored
Move autoscaler (#395)
Update README.md Update auto_scaling_test.go Update verify.go Add polling to handle edge cases Update verify.go
1 parent ad316a3 commit 4b3a585

File tree

13 files changed

+521
-309
lines changed

13 files changed

+521
-309
lines changed

actions/features/features.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,26 @@ func UpdateFeatureFlag(client *rancher.Client, name string, value bool) error {
100100
return nil
101101
}
102102

103+
func IsEnabled(client *rancher.Client, name string) (bool, error) {
104+
featureOpts := &types.ListOpts{Filters: map[string]interface{}{
105+
"name": name,
106+
}}
107+
108+
features, err := client.Management.Feature.List(featureOpts)
109+
if err != nil {
110+
return false, err
111+
}
112+
113+
enabled := false
114+
for _, feature := range features.Data {
115+
if *feature.Value == true {
116+
enabled = true
117+
}
118+
}
119+
120+
return enabled, nil
121+
}
122+
103123
func ConfigureAutoscaler(client *rancher.Client, repository, image string) error {
104124
downstreamClient, err := client.Steve.ProxyDownstream(local)
105125
if err != nil {

actions/scaling/config.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package scaling
22

33
const (
4-
ScalingConfigurationKey = "scalingConfig"
4+
AutoScalingConfigurationKey = "autoScalingConfig"
55
)
66

7-
type Config struct {
8-
AutoscalerChartRepository string `json:"autoscalerChartRepository" yaml:"autoscalerChartRepository"`
9-
AutoscalerImage string `json:"autoscalerImage" yaml:"autoscalerImage"`
7+
type AutoscalingConfig struct {
8+
ChartRepository string `json:"chartRepository,omitempty" yaml:"chartRepository,omitempty"`
9+
Image string `json:"image,omitempty" yaml:"image,omitempty"`
1010
}

actions/scaling/scaling.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,18 +67,22 @@ func getAutoscalerMachinePools(cluster *v1.SteveAPIObject) ([]apisV1.RKEMachineP
6767
return autoscalerPools, err
6868
}
6969

70-
func PauseAutoscaler(client *rancher.Client, cluster *v1.SteveAPIObject) error {
70+
func UpdateAutoscalerState(client *rancher.Client, cluster *v1.SteveAPIObject, pause bool) error {
7171
apiCluster, cluster, err := clusters.GetProvisioningClusterByName(client, cluster.Name, namespaces.FleetDefault)
7272
if err != nil {
7373
return err
7474
}
7575

76-
apiCluster.Annotations[autoscalerPausedAnnotation] = "true"
76+
if pause {
77+
apiCluster.Annotations[autoscalerPausedAnnotation] = "true"
78+
} else {
79+
delete(apiCluster.Annotations, autoscalerPausedAnnotation)
80+
}
7781

7882
_, err = client.Steve.SteveType(stevetypes.Provisioning).Update(cluster, apiCluster)
7983
if err != nil {
8084
return err
8185
}
8286

83-
return nil
87+
return err
8488
}

actions/scaling/verify.go

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
11
package scaling
22

33
import (
4+
"context"
45
"testing"
6+
"time"
57

68
provv1 "github.com/rancher/rancher/pkg/apis/provisioning.cattle.io/v1"
79
"github.com/rancher/shepherd/clients/rancher"
810
steveV1 "github.com/rancher/shepherd/clients/rancher/v1"
911
v1 "github.com/rancher/shepherd/clients/rancher/v1"
12+
"github.com/rancher/shepherd/extensions/defaults"
1013
"github.com/rancher/shepherd/extensions/defaults/namespaces"
1114
"github.com/rancher/shepherd/extensions/defaults/stevetypes"
15+
"github.com/sirupsen/logrus"
1216
"github.com/stretchr/testify/require"
1317
appv1 "k8s.io/api/apps/v1"
18+
kwait "k8s.io/apimachinery/pkg/util/wait"
1419
)
1520

1621
const (
17-
autoscalerDeployment = "cluster-autoscaler-clusterapi-kubernetes-cluster-autoscaler"
22+
AutoscalerDeploymentName = "cluster-autoscaler-clusterapi-kubernetes-cluster-autoscaler"
1823
autoscalerPausedAnnotation = "provisioning.cattle.io/cluster-autoscaler-paused"
1924
)
2025

@@ -29,14 +34,24 @@ func VerifyAutoscaler(t *testing.T, client *rancher.Client, cluster *v1.SteveAPI
2934

3035
deploymentClient := downstreamClient.SteveType(stevetypes.Deployment)
3136

32-
autoscalerDeployment, err := deploymentClient.ByID(namespaces.KubeSystem + "/" + autoscalerDeployment)
37+
logrus.Debug("Waiting for autoscaler deployment replicas to be available")
38+
var deployment *appv1.Deployment
39+
err = kwait.PollUntilContextTimeout(context.TODO(), 5*time.Second, defaults.TwoMinuteTimeout, true, func(context.Context) (done bool, err error) {
40+
autoscalerDeployment, err := deploymentClient.ByID(namespaces.KubeSystem + "/" + AutoscalerDeploymentName)
41+
if err != nil {
42+
return false, nil
43+
}
44+
45+
deployment = &appv1.Deployment{}
46+
err = steveV1.ConvertToK8sType(autoscalerDeployment.JSONResp, deployment)
47+
if *deployment.Spec.Replicas != deployment.Status.AvailableReplicas {
48+
return false, nil
49+
}
50+
51+
return true, nil
52+
})
3353
require.NoError(t, err)
3454

35-
deployment := &appv1.Deployment{}
36-
err = steveV1.ConvertToK8sType(autoscalerDeployment.JSONResp, deployment)
37-
require.NoError(t, err)
38-
require.Equal(t, *deployment.Spec.Replicas, deployment.Status.AvailableReplicas)
39-
4055
if cluster.Annotations[autoscalerPausedAnnotation] == "true" {
4156
require.Zero(t, *deployment.Spec.Replicas)
4257
} else {

actions/workloads/deployment/deployment.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,27 @@
11
package deployment
22

33
import (
4+
"context"
45
"fmt"
56
"strconv"
67
"strings"
78
"time"
89

10+
apisV1 "github.com/rancher/rancher/pkg/apis/provisioning.cattle.io/v1"
911
"github.com/rancher/shepherd/clients/rancher"
12+
steveV1 "github.com/rancher/shepherd/clients/rancher/v1"
1013
"github.com/rancher/shepherd/extensions/charts"
14+
"github.com/rancher/shepherd/extensions/defaults"
15+
"github.com/rancher/shepherd/extensions/defaults/stevestates"
16+
"github.com/rancher/shepherd/extensions/defaults/stevetypes"
1117
"github.com/rancher/shepherd/extensions/kubectl"
1218
"github.com/rancher/shepherd/extensions/workloads"
1319
namegen "github.com/rancher/shepherd/pkg/namegenerator"
1420
"github.com/rancher/shepherd/pkg/wrangler"
1521
"github.com/rancher/tests/actions/kubeapi/workloads/deployments"
1622
"github.com/rancher/tests/actions/rbac"
1723
"github.com/rancher/tests/actions/workloads/pods"
24+
"github.com/sirupsen/logrus"
1825
appv1 "k8s.io/api/apps/v1"
1926
corev1 "k8s.io/api/core/v1"
2027
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -282,3 +289,39 @@ func RestartDeployment(client *rancher.Client, clusterID, namespaceName, deploym
282289

283290
return nil
284291
}
292+
293+
func WaitForDeploymentUpdate(client *rancher.Client, clusterID, deploymentNamespace, deploymentName string) error {
294+
cluster, err := client.Steve.SteveType(stevetypes.Provisioning).ByID(clusterID)
295+
296+
status := &apisV1.ClusterStatus{}
297+
err = steveV1.ConvertToK8sType(cluster.Status, status)
298+
if err != nil {
299+
return err
300+
}
301+
302+
downstreamClient, err := client.Steve.ProxyDownstream(status.ClusterName)
303+
if err != nil {
304+
return err
305+
}
306+
307+
deploymentClient := downstreamClient.SteveType(stevetypes.Deployment)
308+
309+
logrus.Debugf("Waiting for %s deployment to be updated", deploymentName)
310+
var deployment *appv1.Deployment
311+
err = kwait.PollUntilContextTimeout(context.TODO(), 100*time.Millisecond, defaults.TwoMinuteTimeout, true, func(context.Context) (done bool, err error) {
312+
autoscalerDeployment, err := deploymentClient.ByID(deploymentNamespace + "/" + deploymentName)
313+
if err != nil {
314+
return false, nil
315+
}
316+
317+
deployment = &appv1.Deployment{}
318+
err = steveV1.ConvertToK8sType(autoscalerDeployment.JSONResp, deployment)
319+
if autoscalerDeployment.State.Name == stevestates.Updating {
320+
return true, nil
321+
}
322+
323+
return false, nil
324+
})
325+
326+
return err
327+
}

validation/nodescaling/rke2k3s/scaling_main_test.go

Lines changed: 0 additions & 62 deletions
This file was deleted.

0 commit comments

Comments
 (0)