@@ -13,6 +13,8 @@ import (
1313
1414 "github.com/openshift/managed-velero-operator/pkg/apis"
1515 "github.com/openshift/managed-velero-operator/pkg/controller"
16+ "github.com/openshift/managed-velero-operator/pkg/util/platform"
17+ "github.com/openshift/managed-velero-operator/version"
1618
1719 "github.com/operator-framework/operator-sdk/pkg/k8sutil"
1820 kubemetrics "github.com/operator-framework/operator-sdk/pkg/kube-metrics"
@@ -24,10 +26,16 @@ import (
2426 "github.com/spf13/pflag"
2527 v1 "k8s.io/api/core/v1"
2628 "k8s.io/apimachinery/pkg/util/intstr"
29+ crclient "sigs.k8s.io/controller-runtime/pkg/client"
2730 "sigs.k8s.io/controller-runtime/pkg/client/config"
2831 "sigs.k8s.io/controller-runtime/pkg/manager"
2932 logf "sigs.k8s.io/controller-runtime/pkg/runtime/log"
3033 "sigs.k8s.io/controller-runtime/pkg/runtime/signals"
34+
35+ velerov1 "github.com/heptio/velero/pkg/apis/velero/v1"
36+ configv1 "github.com/openshift/api/config/v1"
37+ minterv1 "github.com/openshift/cloud-credential-operator/pkg/apis/cloudcredential/v1"
38+ apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
3139)
3240
3341// Change below variables to serve metrics on different host or port.
3644 metricsPort int32 = 8383
3745 operatorMetricsPort int32 = 8686
3846)
39- var log = logf .Log .WithName ("cmd" )
47+
48+ var log = logf .Log .WithName (version .OperatorName )
49+
50+ const ManagedVeleroOperatorNamespace = "openshift-velero"
51+
52+ // supportedPlatforms is the list of platform supported by the operator
53+ var supportedPlatforms = []configv1.PlatformType {configv1 .AWSPlatformType }
4054
4155func printVersion () {
4256 log .Info (fmt .Sprintf ("Go Version: %s" , runtime .Version ()))
@@ -67,9 +81,16 @@ func main() {
6781
6882 printVersion ()
6983
70- namespace , err := k8sutil .GetWatchNamespace ()
84+ namespace , err := k8sutil .GetOperatorNamespace ()
7185 if err != nil {
72- log .Error (err , "Failed to get watch namespace" )
86+ log .Error (err , "Failed to get operator namespace" )
87+ os .Exit (1 )
88+ }
89+
90+ // The operator makes assumptions about the namespace to configure Velero in.
91+ // If the operator is deployed in a different namespace than expected, error.
92+ if namespace != ManagedVeleroOperatorNamespace {
93+ log .Error (fmt .Errorf ("unexpected operator namespace: expected %s, got %s" , ManagedVeleroOperatorNamespace , namespace ), "" )
7394 os .Exit (1 )
7495 }
7596
@@ -107,6 +128,49 @@ func main() {
107128 os .Exit (1 )
108129 }
109130
131+ // Add Custom Resource apis to scheme
132+ if err := apiextv1beta1 .AddToScheme (mgr .GetScheme ()); err != nil {
133+ log .Error (err , "" )
134+ os .Exit (1 )
135+ }
136+
137+ // Add OpenShift config apis to scheme
138+ if err := configv1 .Install (mgr .GetScheme ()); err != nil {
139+ log .Error (err , "" )
140+ os .Exit (1 )
141+ }
142+
143+ // Add Cloud Credential apis to scheme
144+ if err := minterv1 .AddToScheme (mgr .GetScheme ()); err != nil {
145+ log .Error (err , "" )
146+ os .Exit (1 )
147+ }
148+
149+ // Add Velero apis to scheme
150+ if err := velerov1 .SchemeBuilder .AddToScheme (mgr .GetScheme ()); err != nil {
151+ log .Error (err , "" )
152+ os .Exit (1 )
153+ }
154+
155+ // Grab platform status to determine where OpenShift is installed
156+ platformClient , err := crclient .New (cfg , crclient.Options {Scheme : mgr .GetScheme ()})
157+ if err != nil {
158+ log .Error (err , "Unable to create platform client" )
159+ os .Exit (1 )
160+ }
161+ platformStatus , err := platform .GetPlatformStatus (platformClient )
162+ if err != nil {
163+ log .Error (err , "Failed to retrieve platform status" )
164+ os .Exit (1 )
165+ }
166+
167+ // Verify platform is in support platforms list.
168+ // TODO: expand support to other platforms
169+ if ! platform .IsPlatformSupported (platformStatus .Type , supportedPlatforms ) {
170+ log .Error (fmt .Errorf ("expected %v got %v" , supportedPlatforms , platformStatus .Type ), "Unsupported platform" )
171+ os .Exit (1 )
172+ }
173+
110174 // Setup all Controllers
111175 if err := controller .AddToManager (mgr ); err != nil {
112176 log .Error (err , "" )
0 commit comments