Skip to content

Commit 5e5cd7f

Browse files
committed
auto migration cases
1 parent 1ae8b2d commit 5e5cd7f

File tree

5 files changed

+991
-0
lines changed

5 files changed

+991
-0
lines changed

e2e/framework/machineset.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,16 @@ import (
88
corev1 "k8s.io/api/core/v1"
99
apierrors "k8s.io/apimachinery/pkg/api/errors"
1010
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11+
"k8s.io/apimachinery/pkg/runtime/schema"
12+
"k8s.io/client-go/discovery"
13+
"k8s.io/client-go/dynamic"
14+
"k8s.io/client-go/rest"
15+
"k8s.io/client-go/scale"
1116
"k8s.io/utils/pointer"
1217
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
1318
"sigs.k8s.io/controller-runtime/pkg/client"
19+
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
20+
"sigs.k8s.io/controller-runtime/pkg/client/config"
1421
)
1522

1623
type machineSetParams struct {
@@ -188,3 +195,55 @@ func GetMachinesFromMachineSet(cl client.Client, machineSet *clusterv1.MachineSe
188195
}
189196
return machinesForSet, nil
190197
}
198+
199+
200+
// ScaleMachineSet scales a machineSet with a given name to the given number of replicas.
201+
func ScaleMachineSet(name string, replicas int) error {
202+
scaleClient, err := getScaleClient()
203+
if err != nil {
204+
return fmt.Errorf("error calling getScaleClient %w", err)
205+
}
206+
207+
scale, err := scaleClient.Scales(CAPINamespace).Get(ctx, schema.GroupResource{Group: "cluster.x-k8s.io", Resource: "MachineSet"}, name, metav1.GetOptions{})
208+
if err != nil {
209+
return fmt.Errorf("error calling scaleClient.Scales get: %w", err)
210+
}
211+
212+
scaleUpdate := scale.DeepCopy()
213+
scaleUpdate.Spec.Replicas = int32(replicas)
214+
215+
_, err = scaleClient.Scales(CAPINamespace).Update(ctx, schema.GroupResource{Group: "cluster.x-k8s.io", Resource: "MachineSet"}, scaleUpdate, metav1.UpdateOptions{})
216+
if err != nil {
217+
return fmt.Errorf("error calling scaleClient.Scales update: %w", err)
218+
}
219+
220+
return nil
221+
}
222+
223+
// getScaleClient returns a ScalesGetter object to manipulate scale subresources.
224+
func getScaleClient() (scale.ScalesGetter, error) {
225+
cfg, err := config.GetConfig()
226+
if err != nil {
227+
return nil, fmt.Errorf("error getting config %w", err)
228+
}
229+
230+
httpClient, err := rest.HTTPClientFor(cfg)
231+
if err != nil {
232+
return nil, fmt.Errorf("error calling rest.HTTPClientFor %w", err)
233+
}
234+
235+
mapper, err := apiutil.NewDynamicRESTMapper(cfg, httpClient)
236+
if err != nil {
237+
return nil, fmt.Errorf("error calling NewDiscoveryRESTMapper %w", err)
238+
}
239+
240+
discovery := discovery.NewDiscoveryClientForConfigOrDie(cfg)
241+
scaleKindResolver := scale.NewDiscoveryScaleKindResolver(discovery)
242+
243+
scaleClient, err := scale.NewForConfig(cfg, mapper, dynamic.LegacyAPIPathResolverFunc, scaleKindResolver)
244+
if err != nil {
245+
return nil, fmt.Errorf("error calling building scale client %w", err)
246+
}
247+
248+
return scaleClient, nil
249+
}

e2e/framework/machinetemplate.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package framework
2+
3+
import (
4+
awsv1 "sigs.k8s.io/cluster-api-provider-aws/v2/api/v1beta2"
5+
azurev1 "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1"
6+
gcpv1 "sigs.k8s.io/cluster-api-provider-gcp/api/v1beta1"
7+
"sigs.k8s.io/controller-runtime/pkg/client"
8+
)
9+
10+
// GetAWSMachineTemplate gets awsMachineTemplate by its name from the default cluster API namespace.
11+
func GetAWSMachineTemplate(cl client.Client, name string) (*awsv1.AWSMachineTemplate, error) {
12+
var awsMachineTemplate = &awsv1.AWSMachineTemplate{}
13+
14+
key := client.ObjectKey{Namespace: CAPINamespace, Name: name}
15+
if err := cl.Get(ctx, key, awsMachineTemplate); err != nil {
16+
return nil, err
17+
}
18+
return awsMachineTemplate, nil
19+
}
20+
21+
// GetAzureMachineTemplate gets azureMachineTemplate by its name from the default cluster API namespace.
22+
func GetAzureMachineTemplate(cl client.Client, name string) (*azurev1.AzureMachineTemplate, error) {
23+
var azureMachineTemplate = &azurev1.AzureMachineTemplate{}
24+
25+
key := client.ObjectKey{Namespace: CAPINamespace, Name: name}
26+
if err := cl.Get(ctx, key, azureMachineTemplate); err != nil {
27+
return nil, err
28+
}
29+
return azureMachineTemplate, nil
30+
}
31+
32+
// GetGCPMachineTemplate gets gcpMachineTemplate by its name from the default cluster API namespace.
33+
func GetGCPMachineTemplate(cl client.Client, name string) (*gcpv1.GCPMachineTemplate, error) {
34+
var gcpMachineTemplate = &gcpv1.GCPMachineTemplate{}
35+
36+
key := client.ObjectKey{Namespace: CAPINamespace, Name: name}
37+
if err := cl.Get(ctx, key, gcpMachineTemplate); err != nil {
38+
return nil, err
39+
}
40+
return gcpMachineTemplate, nil
41+
}

e2e/framework/util.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package framework
22

33
import (
4+
"context"
45
"fmt"
56
"net/url"
67
"strconv"
78

89
configv1 "github.com/openshift/api/config/v1"
10+
"k8s.io/apimachinery/pkg/types"
911
"sigs.k8s.io/controller-runtime/pkg/client"
1012
)
1113

@@ -32,3 +34,13 @@ func GetControlPlaneHostAndPort(cl client.Client) (string, int32, error) {
3234

3335
return apiUrl.Hostname(), int32(port), nil
3436
}
37+
38+
// IsTechPreviewNoUpgrade checks if a cluster is a TechPreviewNoUpgrade cluster
39+
func IsTechPreviewNoUpgrade(ctx context.Context, cl client.Client) bool {
40+
featureGate := &configv1.FeatureGate{}
41+
if err := cl.Get(ctx, types.NamespacedName{Name: "cluster"}, featureGate); err != nil {
42+
return false
43+
}
44+
45+
return featureGate.Spec.FeatureSet == configv1.TechPreviewNoUpgrade
46+
}

0 commit comments

Comments
 (0)