github.com/argoproj/argo-events@v1.9.1/webhook/cmd/start.go (about)

     1  package cmd
     2  
     3  import (
     4  	"crypto/tls"
     5  	"os"
     6  	"strconv"
     7  
     8  	"go.uber.org/zap"
     9  	"k8s.io/apimachinery/pkg/runtime"
    10  	"k8s.io/apimachinery/pkg/runtime/schema"
    11  	"k8s.io/client-go/kubernetes"
    12  	"sigs.k8s.io/controller-runtime/pkg/manager/signals"
    13  
    14  	"github.com/argoproj/argo-events/common"
    15  	"github.com/argoproj/argo-events/common/logging"
    16  	eventbusv1alphal1 "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1"
    17  	eventsourcev1alphal1 "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1"
    18  	sensorv1alphal1 "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1"
    19  	eventbusclient "github.com/argoproj/argo-events/pkg/client/eventbus/clientset/versioned"
    20  	eventsourceclient "github.com/argoproj/argo-events/pkg/client/eventsource/clientset/versioned"
    21  	sensorclient "github.com/argoproj/argo-events/pkg/client/sensor/clientset/versioned"
    22  	"github.com/argoproj/argo-events/webhook"
    23  	envpkg "github.com/argoproj/pkg/env"
    24  )
    25  
    26  const (
    27  	serviceNameEnvVar     = "SERVICE_NAME"
    28  	deploymentNameEnvVar  = "DEPLOYMENT_NAME"
    29  	clusterRoleNameEnvVar = "CLUSTER_ROLE_NAME"
    30  	namespaceEnvVar       = "NAMESPACE"
    31  	portEnvVar            = "PORT"
    32  )
    33  
    34  func Start() {
    35  	logger := logging.NewArgoEventsLogger().Named("webhook")
    36  	kubeConfig, _ := os.LookupEnv(common.EnvVarKubeConfig)
    37  	restConfig, err := common.GetClientConfig(kubeConfig)
    38  	if err != nil {
    39  		logger.Fatalw("failed to get kubeconfig", zap.Error(err))
    40  	}
    41  	kubeClient := kubernetes.NewForConfigOrDie(restConfig)
    42  	eventBusClient := eventbusclient.NewForConfigOrDie(restConfig)
    43  	eventSourceClient := eventsourceclient.NewForConfigOrDie(restConfig)
    44  	sensorClient := sensorclient.NewForConfigOrDie(restConfig)
    45  
    46  	namespace, defined := os.LookupEnv(namespaceEnvVar)
    47  	if !defined {
    48  		logger.Fatalf("required environment variable %q not defined", namespaceEnvVar)
    49  	}
    50  
    51  	portStr := envpkg.LookupEnvStringOr(portEnvVar, "443")
    52  	port, err := strconv.Atoi(portStr)
    53  	if err != nil {
    54  		logger.Fatalf("port should be a number, environment variable %q not valid", portStr)
    55  	}
    56  
    57  	options := webhook.Options{
    58  		ServiceName:     envpkg.LookupEnvStringOr(serviceNameEnvVar, "events-webhook"),
    59  		DeploymentName:  envpkg.LookupEnvStringOr(deploymentNameEnvVar, "events-webhook"),
    60  		ClusterRoleName: envpkg.LookupEnvStringOr(clusterRoleNameEnvVar, "argo-events-webhook"),
    61  		Namespace:       namespace,
    62  		Port:            port,
    63  		SecretName:      "events-webhook-certs",
    64  		WebhookName:     "webhook.argo-events.argoproj.io",
    65  		ClientAuth:      tls.VerifyClientCertIfGiven,
    66  	}
    67  	controller := webhook.AdmissionController{
    68  		Client:            kubeClient,
    69  		EventBusClient:    eventBusClient,
    70  		EventSourceClient: eventSourceClient,
    71  		SensorClient:      sensorClient,
    72  		Options:           options,
    73  		Handlers: map[schema.GroupVersionKind]runtime.Object{
    74  			eventbusv1alphal1.SchemaGroupVersionKind:    &eventbusv1alphal1.EventBus{},
    75  			eventsourcev1alphal1.SchemaGroupVersionKind: &eventsourcev1alphal1.EventSource{},
    76  			sensorv1alphal1.SchemaGroupVersionKind:      &sensorv1alphal1.Sensor{},
    77  		},
    78  		Logger: logger,
    79  	}
    80  	ctx := logging.WithLogger(signals.SetupSignalHandler(), logger)
    81  	if err := controller.Run(ctx); err != nil {
    82  		logger.Fatalw("Failed to create the admission controller", zap.Error(err))
    83  	}
    84  }