Skip to content

Commit dd809f5

Browse files
feat: add CRDMigrator
Signed-off-by: okozachenko1203 <[email protected]>
1 parent e57394c commit dd809f5

File tree

2 files changed

+77
-11
lines changed

2 files changed

+77
-11
lines changed

config/rbac/role.yaml

Lines changed: 29 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

main.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626

2727
"github.com/spf13/pflag"
2828
corev1 "k8s.io/api/core/v1"
29+
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
2930
"k8s.io/apimachinery/pkg/runtime"
3031
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
3132
cliflag "k8s.io/component-base/cli/flag"
@@ -35,6 +36,7 @@ import (
3536
"k8s.io/klog/v2"
3637
clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2"
3738
ipamv1 "sigs.k8s.io/cluster-api/api/ipam/v1beta2"
39+
"sigs.k8s.io/cluster-api/controllers/crdmigrator"
3840
"sigs.k8s.io/cluster-api/util/flags"
3941
ctrl "sigs.k8s.io/controller-runtime"
4042
cache "sigs.k8s.io/controller-runtime/pkg/cache"
@@ -92,10 +94,12 @@ var (
9294
caCertsPath string
9395
showVersion bool
9496
scopeCacheMaxSize int
97+
skipCRDMigrationPhases []string
9598
logOptions = logs.NewOptions()
9699
)
97100

98101
func init() {
102+
_ = apiextensionsv1.AddToScheme(scheme)
99103
_ = clientgoscheme.AddToScheme(scheme)
100104
_ = clusterv1.AddToScheme(scheme)
101105
_ = ipamv1.AddToScheme(scheme)
@@ -166,12 +170,19 @@ func InitFlags(fs *pflag.FlagSet) {
166170

167171
fs.IntVar(&scopeCacheMaxSize, "scope-cache-max-size", 10, "The maximum credentials count the operator should keep in cache. Setting this value to 0 means no cache.")
168172

173+
fs.StringArrayVar(&skipCRDMigrationPhases, "skip-crd-migration-phases", []string{},
174+
"List of CRD migration phases to skip. Valid values are: StorageVersionMigration, CleanupManagedFields.")
169175
fs.BoolVar(&showVersion, "version", false, "Show current version and exit.")
170176
}
171177

172178
// Add RBAC for the authorized diagnostics endpoint.
173179
// +kubebuilder:rbac:groups=authentication.k8s.io,resources=tokenreviews,verbs=create
174180
// +kubebuilder:rbac:groups=authorization.k8s.io,resources=subjectaccessreviews,verbs=create
181+
// Setup CRD migrator
182+
// +kubebuilder:rbac:groups=apiextensions.k8s.io,resources=customresourcedefinitions,verbs=get;list;watch;update;patch
183+
// +kubebuilder:rbac:groups=apiextensions.k8s.io,resources=customresourcedefinitions/status,verbs=get;list;watch;update;patch
184+
// +kubebuilder:rbac:groups=infrastructure.cluster.x-k8s.io,resources=openstackclusters;openstackmachines;openstackmachinetemplates;openstackclustertemplates;openstackfloatingippools;openstackservers;openstackclusteridentities,verbs=get;list;watch;patch;update
185+
// +kubebuilder:rbac:groups=infrastructure.cluster.x-k8s.io,resources=openstackclusters/status;openstackmachines/status;openstackmachinetemplates/status;openstackclustertemplates/status;openstackfloatingippools/status;openstackservers/status;openstackclusteridentities/status,verbs=get;patch;update
175186

176187
func main() {
177188
InitFlags(pflag.CommandLine)
@@ -296,6 +307,43 @@ func setupChecks(mgr ctrl.Manager) {
296307
func setupReconcilers(ctx context.Context, mgr ctrl.Manager, caCerts []byte) {
297308
scopeFactory := scope.NewFactory(scopeCacheMaxSize)
298309

310+
crdMigratorConfig := map[client.Object]crdmigrator.ByObjectConfig{
311+
&infrav1.OpenStackCluster{}: {
312+
UseCache: true,
313+
},
314+
&infrav1.OpenStackMachine{}: {
315+
UseCache: true,
316+
},
317+
&infrav1.OpenStackMachineTemplate{}: {
318+
UseCache: true,
319+
},
320+
&infrav1.OpenStackClusterTemplate{}: {
321+
UseCache: true,
322+
},
323+
&infrav1alpha1.OpenStackFloatingIPPool{}: {
324+
UseCache: true,
325+
},
326+
&infrav1alpha1.OpenStackServer{}: {
327+
UseCache: true,
328+
},
329+
&infrav1alpha1.OpenStackClusterIdentity{}: {
330+
UseCache: true,
331+
},
332+
}
333+
crdMigratorSkipPhases := []crdmigrator.Phase{}
334+
for _, p := range skipCRDMigrationPhases {
335+
crdMigratorSkipPhases = append(crdMigratorSkipPhases, crdmigrator.Phase(p))
336+
}
337+
if err := (&crdmigrator.CRDMigrator{
338+
Client: mgr.GetClient(),
339+
APIReader: mgr.GetAPIReader(),
340+
SkipCRDMigrationPhases: crdMigratorSkipPhases,
341+
Config: crdMigratorConfig,
342+
}).SetupWithManager(ctx, mgr, concurrency(1)); err != nil {
343+
setupLog.Error(err, "unable to setup CRD migrator")
344+
os.Exit(1)
345+
}
346+
299347
if err := (&controllers.OpenStackClusterReconciler{
300348
Client: mgr.GetClient(),
301349
Recorder: mgr.GetEventRecorderFor("openstackcluster-controller"),

0 commit comments

Comments
 (0)