@@ -8,26 +8,22 @@ 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 utilruntime "k8s.io/apimachinery/pkg/util/runtime"
1213 clientgoscheme "k8s.io/client-go/kubernetes/scheme"
1314 ctrl "sigs.k8s.io/controller-runtime"
1415 "sigs.k8s.io/controller-runtime/pkg/client"
1516 "sigs.k8s.io/controller-runtime/pkg/log"
17+ "sigs.k8s.io/controller-runtime/pkg/scheme"
1618
1719 barmancloudv1 "github.com/cloudnative-pg/plugin-barman-cloud/api/v1"
1820 extendedclient "github.com/cloudnative-pg/plugin-barman-cloud/internal/cnpgi/instance/internal/client"
1921)
2022
21- var scheme = runtime .NewScheme ()
22-
23- func init () {
24- utilruntime .Must (barmancloudv1 .AddToScheme (scheme ))
25- utilruntime .Must (cnpgv1 .AddToScheme (scheme ))
26- utilruntime .Must (clientgoscheme .AddToScheme (scheme ))
27- }
28-
2923// Start starts the sidecar informers and CNPG-i server
3024func Start (ctx context.Context ) error {
25+ scheme := generateScheme (ctx )
26+
3127 setupLog := log .FromContext (ctx )
3228 setupLog .Info ("Starting barman cloud instance plugin" )
3329 podName := viper .GetString ("pod-name" )
@@ -70,3 +66,35 @@ func Start(ctx context.Context) error {
7066
7167 return nil
7268}
69+
70+ // generateScheme creates a runtime.Scheme object with all the
71+ // definition needed to support the sidecar. This allows
72+ // the plugin to be used in every CNPG-based operator.
73+ func generateScheme (ctx context.Context ) * runtime.Scheme {
74+ result := runtime .NewScheme ()
75+
76+ utilruntime .Must (barmancloudv1 .AddToScheme (result ))
77+ utilruntime .Must (clientgoscheme .AddToScheme (result ))
78+
79+ cnpgGroup := viper .GetString ("custom-cnpg-group" )
80+ cnpgVersion := viper .GetString ("custom-cnpg-version" )
81+ if len (cnpgGroup ) == 0 {
82+ cnpgGroup = cnpgv1 .SchemeGroupVersion .Group
83+ }
84+ if len (cnpgVersion ) == 0 {
85+ cnpgVersion = cnpgv1 .SchemeGroupVersion .Version
86+ }
87+
88+ // Proceed with custom registration of the CNPG scheme
89+ schemeGroupVersion := schema.GroupVersion {Group : cnpgGroup , Version : cnpgVersion }
90+ schemeBuilder := & scheme.Builder {GroupVersion : schemeGroupVersion }
91+ schemeBuilder .Register (& cnpgv1.Cluster {}, & cnpgv1.ClusterList {})
92+ schemeBuilder .Register (& cnpgv1.Backup {}, & cnpgv1.BackupList {})
93+ schemeBuilder .Register (& cnpgv1.ScheduledBackup {}, & cnpgv1.ScheduledBackupList {})
94+ utilruntime .Must (schemeBuilder .AddToScheme (result ))
95+
96+ schemeLog := log .FromContext (ctx )
97+ schemeLog .Info ("CNPG types registration" , "schemeGroupVersion" , schemeGroupVersion )
98+
99+ return result
100+ }
0 commit comments