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 }