Skip to content

Commit 9028aa6

Browse files
authored
Merge pull request #109 from leaseweb/develop
Develop -> main CRD migrator
2 parents 3450619 + cf03772 commit 9028aa6

File tree

5 files changed

+92
-2
lines changed

5 files changed

+92
-2
lines changed

config/rbac/role.yaml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,17 @@ rules:
2424
- patch
2525
- update
2626
- watch
27+
- apiGroups:
28+
- apiextensions.k8s.io
29+
resources:
30+
- customresourcedefinitions
31+
- customresourcedefinitions/status
32+
verbs:
33+
- get
34+
- list
35+
- patch
36+
- update
37+
- watch
2738
- apiGroups:
2839
- authentication.k8s.io
2940
resources:
@@ -80,6 +91,7 @@ rules:
8091
- cloudstackaffinitygroups/status
8192
- cloudstackisolatednetworks/status
8293
- cloudstackmachines/status
94+
- cloudstackmachinestatecheckers/status
8395
- cloudstackmachinetemplates/status
8496
verbs:
8597
- get
@@ -95,6 +107,17 @@ rules:
95107
- get
96108
- patch
97109
- update
110+
- apiGroups:
111+
- infrastructure.cluster.x-k8s.io
112+
resources:
113+
- cloudstackclustertemplates
114+
- cloudstackmachinestatecheckers
115+
verbs:
116+
- get
117+
- list
118+
- patch
119+
- update
120+
- watch
98121
- apiGroups:
99122
- infrastructure.cluster.x-k8s.io
100123
resources:

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ require (
1717
golang.org/x/text v0.28.0
1818
gopkg.in/yaml.v3 v3.0.1
1919
k8s.io/api v0.33.3
20+
k8s.io/apiextensions-apiserver v0.33.3
2021
k8s.io/apimachinery v0.33.3
2122
k8s.io/client-go v0.33.3
2223
k8s.io/component-base v0.33.3
@@ -95,7 +96,6 @@ require (
9596
google.golang.org/protobuf v1.36.6 // indirect
9697
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
9798
gopkg.in/inf.v0 v0.9.1 // indirect
98-
k8s.io/apiextensions-apiserver v0.33.3 // indirect
9999
k8s.io/apiserver v0.33.3 // indirect
100100
k8s.io/cluster-bootstrap v0.33.3 // indirect
101101
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect

main.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727

2828
"github.com/spf13/pflag"
2929
corev1 "k8s.io/api/core/v1"
30+
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
3031
"k8s.io/apimachinery/pkg/runtime"
3132
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
3233
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
@@ -37,6 +38,7 @@ import (
3738
logsv1 "k8s.io/component-base/logs/api/v1"
3839
"k8s.io/klog/v2"
3940
clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2"
41+
"sigs.k8s.io/cluster-api/controllers/crdmigrator"
4042
"sigs.k8s.io/cluster-api/controllers/remote"
4143
"sigs.k8s.io/cluster-api/feature"
4244
"sigs.k8s.io/cluster-api/util/flags"
@@ -61,6 +63,7 @@ var (
6163
)
6264

6365
func init() {
66+
utilruntime.Must(apiextensionsv1.AddToScheme(scheme))
6467
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
6568
utilruntime.Must(clusterv1.AddToScheme(scheme))
6669
utilruntime.Must(infrav1beta1.AddToScheme(scheme))
@@ -90,6 +93,7 @@ var (
9093
managerOptions = flags.ManagerOptions{}
9194
logOptions = logs.NewOptions()
9295
showVersion bool
96+
skipCRDMigrationPhases []string
9397

9498
cloudStackClusterConcurrency int
9599
cloudStackMachineConcurrency int
@@ -180,6 +184,9 @@ func initFlags(fs *pflag.FlagSet) {
180184
fs.StringVar(&healthAddr, "health-addr", ":9440",
181185
"The address the health endpoint binds to.")
182186

187+
fs.StringArrayVar(&skipCRDMigrationPhases, "skip-crd-migration-phases", []string{},
188+
"List of CRD migration phases to skip. Valid values are: StorageVersionMigration, CleanupManagedFields.")
189+
183190
fs.BoolVar(&showVersion, "version", false, "Show current version and exit.")
184191

185192
flags.AddManagerOptions(fs, &managerOptions)
@@ -190,6 +197,11 @@ func initFlags(fs *pflag.FlagSet) {
190197
// Add RBAC for the authorized diagnostics endpoint.
191198
// +kubebuilder:rbac:groups=authentication.k8s.io,resources=tokenreviews,verbs=create
192199
// +kubebuilder:rbac:groups=authorization.k8s.io,resources=subjectaccessreviews,verbs=create
200+
// Setup CRD migrator
201+
// +kubebuilder:rbac:groups=apiextensions.k8s.io,resources=customresourcedefinitions,verbs=get;list;watch;update;patch
202+
// +kubebuilder:rbac:groups=apiextensions.k8s.io,resources=customresourcedefinitions/status,verbs=get;list;watch;update;patch
203+
// +kubebuilder:rbac:groups=infrastructure.cluster.x-k8s.io,resources=cloudstackclusters;cloudstackmachines;cloudstackmachinetemplates;cloudstackclustertemplates;cloudstackfailuredomains;cloudstackisolatednetworks;cloudstackaffinitygroups;cloudstackmachinestatecheckers,verbs=get;list;watch;patch;update
204+
// +kubebuilder:rbac:groups=infrastructure.cluster.x-k8s.io,resources=cloudstackclusters/status;cloudstackmachines/status;cloudstackmachinetemplates/status;cloudstackfailuredomains/status;cloudstackisolatednetworks/status;cloudstackaffinitygroups/status;cloudstackmachinestatecheckers/status,verbs=get;patch;update
193205

194206
func main() {
195207
initFlags(pflag.CommandLine)
@@ -308,6 +320,55 @@ func setupChecks(mgr ctrl.Manager) {
308320

309321
func setupReconcilers(ctx context.Context, mgr manager.Manager) {
310322
scopeFactory := scope.NewClientScopeFactory(10)
323+
324+
crdMigratorConfig := map[client.Object]crdmigrator.ByObjectConfig{
325+
&infrav1.CloudStackCluster{}: {
326+
UseCache: true,
327+
UseStatusForStorageVersionMigration: true,
328+
},
329+
&infrav1.CloudStackMachine{}: {
330+
UseCache: true,
331+
UseStatusForStorageVersionMigration: true,
332+
},
333+
&infrav1.CloudStackMachineTemplate{}: {
334+
UseCache: true,
335+
UseStatusForStorageVersionMigration: true,
336+
},
337+
&infrav1.CloudStackClusterTemplate{}: {
338+
UseCache: true,
339+
UseStatusForStorageVersionMigration: false,
340+
},
341+
&infrav1.CloudStackFailureDomain{}: {
342+
UseCache: true,
343+
UseStatusForStorageVersionMigration: true,
344+
},
345+
&infrav1.CloudStackIsolatedNetwork{}: {
346+
UseCache: true,
347+
UseStatusForStorageVersionMigration: true,
348+
},
349+
&infrav1.CloudStackAffinityGroup{}: {
350+
UseCache: true,
351+
UseStatusForStorageVersionMigration: true,
352+
},
353+
&infrav1.CloudStackMachineStateChecker{}: {
354+
UseCache: true,
355+
UseStatusForStorageVersionMigration: true,
356+
},
357+
}
358+
crdMigratorSkipPhases := []crdmigrator.Phase{}
359+
for _, p := range skipCRDMigrationPhases {
360+
crdMigratorSkipPhases = append(crdMigratorSkipPhases, crdmigrator.Phase(p))
361+
}
362+
if err := (&crdmigrator.CRDMigrator{
363+
Client: mgr.GetClient(),
364+
APIReader: mgr.GetAPIReader(),
365+
SkipCRDMigrationPhases: crdMigratorSkipPhases,
366+
Config: crdMigratorConfig,
367+
}).SetupWithManager(ctx, mgr, controller.Options{MaxConcurrentReconciles: 1}); err != nil {
368+
setupLog.Error(err, "unable to setup CRD migrator")
369+
os.Exit(1)
370+
}
371+
311372
if err := (&controllers.CloudStackClusterReconciler{
312373
Client: mgr.GetClient(),
313374
Scheme: mgr.GetScheme(),

metadata.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66
apiVersion: clusterctl.cluster.x-k8s.io/v1alpha3
77
kind: Metadata
88
releaseSeries:
9+
- major: 0
10+
minor: 12
11+
contract: v1beta1
12+
- major: 0
13+
minor: 11
14+
contract: v1beta1
915
- major: 0
1016
minor: 10
1117
contract: v1beta1

tilt-provider.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"go.sum",
1111
"api",
1212
"cmd",
13-
"controllers",
13+
"internal",
1414
"pkg"
1515
]
1616
}

0 commit comments

Comments
 (0)