@@ -8,34 +8,30 @@ import (
88 "github.com/spf13/viper"
99 corev1 "k8s.io/api/core/v1"
1010 "k8s.io/apimachinery/pkg/runtime"
11+ "k8s.io/apimachinery/pkg/runtime/schema"
1112 "k8s.io/apimachinery/pkg/types"
1213 utilruntime "k8s.io/apimachinery/pkg/util/runtime"
1314 clientgoscheme "k8s.io/client-go/kubernetes/scheme"
1415 ctrl "sigs.k8s.io/controller-runtime"
1516 "sigs.k8s.io/controller-runtime/pkg/client"
1617 "sigs.k8s.io/controller-runtime/pkg/log"
18+ "sigs.k8s.io/controller-runtime/pkg/scheme"
1719
1820 barmancloudv1 "github.com/cloudnative-pg/plugin-barman-cloud/api/v1"
1921 extendedclient "github.com/cloudnative-pg/plugin-barman-cloud/internal/cnpgi/instance/internal/client"
2022)
2123
22- var scheme = runtime .NewScheme ()
23-
24- func init () {
25- utilruntime .Must (barmancloudv1 .AddToScheme (scheme ))
26- utilruntime .Must (cnpgv1 .AddToScheme (scheme ))
27- utilruntime .Must (clientgoscheme .AddToScheme (scheme ))
28- }
29-
3024// Start starts the sidecar informers and CNPG-i server
3125func Start (ctx context.Context ) error {
32- setupLog := log .FromContext (ctx )
33- setupLog .Info ("Starting barman cloud instance plugin" )
34-
3526 podName := viper .GetString ("pod-name" )
3627 clusterName := viper .GetString ("cluster-name" )
3728 namespace := viper .GetString ("namespace" )
3829
30+ scheme := generateScheme (ctx )
31+
32+ setupLog := log .FromContext (ctx )
33+ setupLog .Info ("Starting barman cloud instance plugin" )
34+
3935 controllerOptions := ctrl.Options {
4036 Scheme : scheme ,
4137 Client : client.Options {
@@ -89,3 +85,35 @@ func Start(ctx context.Context) error {
8985
9086 return nil
9187}
88+
89+ // generateScheme creates a runtime.Scheme object with all the
90+ // definition needed to support the sidecar. This allows
91+ // the plugin to be used in every CNPG-based operator.
92+ func generateScheme (ctx context.Context ) * runtime.Scheme {
93+ result := runtime .NewScheme ()
94+
95+ utilruntime .Must (barmancloudv1 .AddToScheme (result ))
96+ utilruntime .Must (clientgoscheme .AddToScheme (result ))
97+
98+ cnpgGroup := viper .GetString ("custom-cnpg-group" )
99+ cnpgVersion := viper .GetString ("custom-cnpg-version" )
100+ if len (cnpgGroup ) == 0 {
101+ cnpgGroup = cnpgv1 .SchemeGroupVersion .Group
102+ }
103+ if len (cnpgVersion ) == 0 {
104+ cnpgVersion = cnpgv1 .SchemeGroupVersion .Version
105+ }
106+
107+ // Proceed with custom registration of the CNPG scheme
108+ schemeGroupVersion := schema.GroupVersion {Group : cnpgGroup , Version : cnpgVersion }
109+ schemeBuilder := & scheme.Builder {GroupVersion : schemeGroupVersion }
110+ schemeBuilder .Register (& cnpgv1.Cluster {}, & cnpgv1.ClusterList {})
111+ schemeBuilder .Register (& cnpgv1.Backup {}, & cnpgv1.BackupList {})
112+ schemeBuilder .Register (& cnpgv1.ScheduledBackup {}, & cnpgv1.ScheduledBackupList {})
113+ utilruntime .Must (schemeBuilder .AddToScheme (result ))
114+
115+ schemeLog := log .FromContext (ctx )
116+ schemeLog .Info ("CNPG types registration" , "schemeGroupVersion" , schemeGroupVersion )
117+
118+ return result
119+ }
0 commit comments