github.com/stakater/IngressMonitorController@v1.0.103/main.go (about) 1 package main 2 3 import ( 4 "os" 5 6 log "github.com/sirupsen/logrus" 7 8 "strings" 9 10 routeClient "github.com/openshift/client-go/route/clientset/versioned/typed/route/v1" 11 "github.com/stakater/IngressMonitorController/pkg/config" 12 "github.com/stakater/IngressMonitorController/pkg/controller" 13 "github.com/stakater/IngressMonitorController/pkg/kube" 14 v1 "k8s.io/apimachinery/pkg/apis/meta/v1" 15 "k8s.io/client-go/kubernetes" 16 "k8s.io/client-go/rest" 17 ) 18 19 func init() { 20 if logLevel, ok := os.LookupEnv("LOG_LEVEL"); ok { 21 level, err := log.ParseLevel(logLevel) 22 23 if err != nil { 24 log.Error("Parse log level error: ", err.Error()) 25 } else { 26 log.SetLevel(level) 27 } 28 } 29 if logFormat, ok := os.LookupEnv("LOG_FORMAT"); ok { 30 switch strings.ToLower(logFormat) { 31 case "json": 32 log.SetFormatter(&log.JSONFormatter{}) 33 default: 34 log.SetFormatter(&log.TextFormatter{}) 35 } 36 } 37 } 38 39 func main() { 40 currentNamespace := os.Getenv("KUBERNETES_NAMESPACE") 41 if len(currentNamespace) == 0 { 42 currentNamespace = v1.NamespaceAll 43 log.Println("Warning: KUBERNETES_NAMESPACE is unset, will monitor ingresses in all namespaces.") 44 } 45 46 var kubeClient kubernetes.Interface 47 cfg, err := rest.InClusterConfig() 48 if err != nil { 49 kubeClient = kube.GetClientOutOfCluster() 50 } else { 51 kubeClient = kube.GetClient() 52 } 53 54 // fetche and create controller config from file 55 config := config.GetControllerConfig() 56 57 var resource = "ingresses" 58 var restClient rest.Interface 59 var osClient *routeClient.RouteV1Client 60 if kube.IsOpenShift(kubeClient.(*kubernetes.Clientset)) { 61 resource = "routes" 62 // Create an OpenShift build/v1 client. 63 osClient, err = routeClient.NewForConfig(cfg) 64 if err != nil { 65 log.Panic(err.Error()) 66 } 67 restClient = osClient.RESTClient() 68 } else { 69 restClient = kubeClient.ExtensionsV1beta1().RESTClient() 70 } 71 72 // create the monitoring controller 73 controller := controller.NewMonitorController(currentNamespace, kubeClient, config, resource, restClient) 74 75 // Now let's start the controller 76 stop := make(chan struct{}) 77 defer close(stop) 78 go controller.Run(1, stop) 79 80 // Wait forever 81 select {} 82 } 83 84 func createInClusterConfig() *rest.Config { 85 config, err := rest.InClusterConfig() 86 if err != nil { 87 log.Panic(err.Error()) 88 } 89 return config 90 } 91 92 func createKubernetesClient(config *rest.Config) *kubernetes.Clientset { 93 clientset, err := kubernetes.NewForConfig(config) 94 if err != nil { 95 log.Panic(err.Error()) 96 } 97 return clientset 98 }