github.com/operator-framework/operator-lifecycle-manager@v0.30.0/cmd/olm/manager.go (about) 1 package main 2 3 import ( 4 "context" 5 6 admissionregistrationv1 "k8s.io/api/admissionregistration/v1" 7 appsv1 "k8s.io/api/apps/v1" 8 corev1 "k8s.io/api/core/v1" 9 rbacv1 "k8s.io/api/rbac/v1" 10 apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" 11 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 12 "k8s.io/apimachinery/pkg/labels" 13 "k8s.io/apimachinery/pkg/runtime" 14 "k8s.io/apimachinery/pkg/selection" 15 apiregistrationv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" 16 ctrl "sigs.k8s.io/controller-runtime" 17 "sigs.k8s.io/controller-runtime/pkg/cache" 18 "sigs.k8s.io/controller-runtime/pkg/client" 19 "sigs.k8s.io/controller-runtime/pkg/log/zap" 20 metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" 21 22 operatorsv1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1" 23 "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/install" 24 "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators" 25 "github.com/operator-framework/operator-lifecycle-manager/pkg/feature" 26 ) 27 28 var ( 29 copiedLabelDoesNotExist labels.Selector 30 ) 31 32 func init() { 33 requirement, err := labels.NewRequirement(operatorsv1alpha1.CopiedLabelKey, selection.DoesNotExist, nil) 34 if err != nil { 35 panic(err) 36 } 37 copiedLabelDoesNotExist = labels.NewSelector().Add(*requirement) 38 } 39 40 func Manager(ctx context.Context, debug bool) (ctrl.Manager, error) { 41 ctrl.SetLogger(zap.New(zap.UseDevMode(debug))) 42 setupLog := ctrl.Log.WithName("setup").V(1) 43 44 scheme := runtime.NewScheme() 45 if err := metav1.AddMetaToScheme(scheme); err != nil { 46 return nil, err 47 } 48 if err := operators.AddToScheme(scheme); err != nil { 49 // ctrl.NewManager needs the Scheme to be populated 50 // up-front so that the NewCache implementation we 51 // provide can configure custom cache behavior on 52 // non-core types. 53 return nil, err 54 } 55 56 setupLog.Info("configuring manager") 57 mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ 58 Scheme: scheme, 59 Metrics: metricsserver.Options{BindAddress: "0"}, 60 Cache: cache.Options{ 61 ByObject: map[client.Object]cache.ByObject{ 62 &appsv1.Deployment{}: { 63 Label: labels.SelectorFromValidatedSet(map[string]string{install.OLMManagedLabelKey: install.OLMManagedLabelValue}), 64 }, 65 &corev1.Service{}: { 66 Label: labels.SelectorFromValidatedSet(map[string]string{install.OLMManagedLabelKey: install.OLMManagedLabelValue}), 67 }, 68 &apiextensionsv1.CustomResourceDefinition{}: { 69 Label: labels.SelectorFromValidatedSet(map[string]string{install.OLMManagedLabelKey: install.OLMManagedLabelValue}), 70 }, 71 &apiregistrationv1.APIService{}: { 72 Label: labels.SelectorFromValidatedSet(map[string]string{install.OLMManagedLabelKey: install.OLMManagedLabelValue}), 73 }, 74 &corev1.ConfigMap{}: { 75 Label: labels.SelectorFromValidatedSet(map[string]string{install.OLMManagedLabelKey: install.OLMManagedLabelValue}), 76 }, 77 &corev1.ServiceAccount{}: { 78 Label: labels.SelectorFromValidatedSet(map[string]string{install.OLMManagedLabelKey: install.OLMManagedLabelValue}), 79 }, 80 &rbacv1.Role{}: { 81 Label: labels.SelectorFromValidatedSet(map[string]string{install.OLMManagedLabelKey: install.OLMManagedLabelValue}), 82 }, 83 &rbacv1.RoleBinding{}: { 84 Label: labels.SelectorFromValidatedSet(map[string]string{install.OLMManagedLabelKey: install.OLMManagedLabelValue}), 85 }, 86 &rbacv1.ClusterRole{}: { 87 Label: labels.SelectorFromValidatedSet(map[string]string{install.OLMManagedLabelKey: install.OLMManagedLabelValue}), 88 }, 89 &rbacv1.ClusterRoleBinding{}: { 90 Label: labels.SelectorFromValidatedSet(map[string]string{install.OLMManagedLabelKey: install.OLMManagedLabelValue}), 91 }, 92 &admissionregistrationv1.MutatingWebhookConfiguration{}: { 93 Label: labels.SelectorFromValidatedSet(map[string]string{install.OLMManagedLabelKey: install.OLMManagedLabelValue}), 94 }, 95 &admissionregistrationv1.ValidatingWebhookConfiguration{}: { 96 Label: labels.SelectorFromValidatedSet(map[string]string{install.OLMManagedLabelKey: install.OLMManagedLabelValue}), 97 }, 98 &operatorsv1alpha1.ClusterServiceVersion{}: { 99 Label: copiedLabelDoesNotExist, 100 }, 101 }, 102 }, 103 }) 104 if err != nil { 105 return nil, err 106 } 107 108 operatorConditionReconciler, err := operators.NewOperatorConditionReconciler( 109 mgr.GetClient(), 110 ctrl.Log.WithName("controllers").WithName("operatorcondition"), 111 mgr.GetScheme(), 112 ) 113 if err != nil { 114 return nil, err 115 } 116 117 if err = operatorConditionReconciler.SetupWithManager(mgr); err != nil { 118 return nil, err 119 } 120 121 operatorConditionGeneratorReconciler, err := operators.NewOperatorConditionGeneratorReconciler( 122 mgr.GetClient(), 123 ctrl.Log.WithName("controllers").WithName("operatorcondition-generator"), 124 mgr.GetScheme(), 125 ) 126 if err != nil { 127 return nil, err 128 } 129 130 if err = operatorConditionGeneratorReconciler.SetupWithManager(mgr); err != nil { 131 return nil, err 132 } 133 134 if feature.Gate.Enabled(feature.OperatorLifecycleManagerV1) { 135 // Setup a new controller to reconcile Operators 136 operatorReconciler, err := operators.NewOperatorReconciler( 137 mgr.GetClient(), 138 ctrl.Log.WithName("controllers").WithName("operator"), 139 mgr.GetScheme(), 140 ) 141 if err != nil { 142 return nil, err 143 } 144 145 if err = operatorReconciler.SetupWithManager(mgr); err != nil { 146 return nil, err 147 } 148 149 adoptionReconciler, err := operators.NewAdoptionReconciler( 150 mgr.GetClient(), 151 ctrl.Log.WithName("controllers").WithName("adoption"), 152 mgr.GetScheme(), 153 ) 154 if err != nil { 155 return nil, err 156 } 157 158 if err = adoptionReconciler.SetupWithManager(mgr); err != nil { 159 return nil, err 160 } 161 } 162 setupLog.Info("manager configured") 163 164 return mgr, nil 165 }