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 }