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  }