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  }