github.com/operator-framework/operator-lifecycle-manager@v0.30.0/pkg/lib/proxy/syncer.go (about)

     1  package proxy
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/openshift/client-go/config/informers/externalversions"
     7  
     8  	apiconfigv1 "github.com/openshift/api/config/v1"
     9  	configv1client "github.com/openshift/client-go/config/clientset/versioned"
    10  	configv1 "github.com/openshift/client-go/config/informers/externalversions/config/v1"
    11  	listers "github.com/openshift/client-go/config/listers/config/v1"
    12  	"github.com/sirupsen/logrus"
    13  	corev1 "k8s.io/api/core/v1"
    14  	apierrors "k8s.io/apimachinery/pkg/api/errors"
    15  	"k8s.io/client-go/discovery"
    16  )
    17  
    18  const (
    19  	// This is the cluster level global proxy object name.
    20  	globalProxyName = "cluster"
    21  
    22  	// default sync interval
    23  	defaultSyncInterval = 30 * time.Minute
    24  )
    25  
    26  // NewSyncer returns informer and sync functions to enable watch of Proxy type.
    27  func NewSyncer(logger *logrus.Logger, client configv1client.Interface, discovery discovery.DiscoveryInterface) (proxyInformer configv1.ProxyInformer, syncer *Syncer, querier Querier, err error) {
    28  	factory := externalversions.NewSharedInformerFactoryWithOptions(client, defaultSyncInterval)
    29  	proxyInformer = factory.Config().V1().Proxies()
    30  	s := &Syncer{
    31  		logger: logger,
    32  		lister: proxyInformer.Lister(),
    33  	}
    34  
    35  	syncer = s
    36  	querier = s
    37  	return
    38  }
    39  
    40  // Syncer deals with watching proxy type(s) on the cluster and let the caller
    41  // query for cluster scoped proxy objects.
    42  type Syncer struct {
    43  	logger *logrus.Logger
    44  	lister listers.ProxyLister
    45  }
    46  
    47  // QueryProxyConfig queries the global cluster level proxy object and then
    48  // returns the proxy env variable(s) to the user.
    49  func (w *Syncer) QueryProxyConfig() (proxy []corev1.EnvVar, err error) {
    50  	global, getErr := w.lister.Get(globalProxyName)
    51  	if getErr != nil {
    52  		if !apierrors.IsNotFound(getErr) {
    53  			err = getErr
    54  			return
    55  		}
    56  
    57  		w.logger.Debugf("global Proxy configuration not defined in '%s' - %v", globalProxyName, getErr)
    58  		return
    59  	}
    60  
    61  	// We have found the global proxy configuration object!
    62  	proxy = ToEnvVar(global)
    63  	return
    64  }
    65  
    66  // SyncProxy is invoked when a cluster scoped proxy object is added or modified.
    67  func (w *Syncer) SyncProxy(object interface{}) error {
    68  	_, ok := object.(*apiconfigv1.Proxy)
    69  	if !ok {
    70  		w.logger.Error("wrong type in proxy syncer")
    71  		return nil
    72  	}
    73  
    74  	return nil
    75  }
    76  
    77  // HandleProxyDelete is invoked when a cluster scoped proxy object is deleted.
    78  func (w *Syncer) HandleProxyDelete(object interface{}) {
    79  	_, ok := object.(*apiconfigv1.Proxy)
    80  	if !ok {
    81  		w.logger.Error("wrong type in proxy delete syncer")
    82  		return
    83  	}
    84  
    85  	return
    86  }