main.go (58 lines of code) (raw):

package main import ( "context" "flag" "net/http" "os" "github.com/Azure/webhook-tls-manager/config" "github.com/Azure/webhook-tls-manager/consts" "github.com/Azure/webhook-tls-manager/goalresolvers" "github.com/Azure/webhook-tls-manager/metrics" "github.com/Azure/webhook-tls-manager/reconcilers" "github.com/Azure/webhook-tls-manager/toolkit/log" "github.com/Azure/webhook-tls-manager/utils" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" ) var ( getKubeClientFunc = utils.GetKubeClient webhookTlsManagerEnabled = flag.Bool("webhook-tls-manager-enabled", true, "if set to false, it will cleanup webhook tls manager secrets and webhook.") kubeSystemNamespaceBlocked = flag.Bool("kube-system-namespace-blocked", false, "if set to false, all of the objects under kube-system namespace will be applied by the webhook.") namespace = flag.String("namespace", "", "the namespace of the object to be reconciled") addr = ":8943" objectName = flag.String("webhook-tls-manager-managed-object-name", "", "the name of the object to be reconciled") caValidityYears = flag.Int("ca-validity-years", 0, "the validity of the CA certificate in years") serverValidityYears = flag.Int("server-validity-years", 0, "the validity of the server certificate in years") logLevel = flag.Int("log-level", 3, "log level") ) func main() { flag.Parse() config.NewConfig() config.UpdateConfig(*objectName, *caValidityYears, *serverValidityYears, *namespace) logger := log.NewLogger(*logLevel) ctx := logger.WithLogger(context.TODO()) var label prometheus.Labels if *webhookTlsManagerEnabled { logger.Info(ctx, "AKS Webhook TLS Manager Reconciliation Job") label = prometheus.Labels{"job": consts.ReconciliationJob} } else { logger.Info(ctx, "AKS Webhook TLS Manager Cleanup Job") label = prometheus.Labels{"job": consts.CleanupJob} } kubeClient := getKubeClientFunc() http.Handle("/metrics", promhttp.Handler()) go func() { if err := http.ListenAndServe(addr, nil); err != nil { logger.Errorf(ctx, "failed to start http server: %s", err) } }() webhookGoalResolver := goalresolvers.NewWebhookTlsManagerGoalResolver(ctx, kubeClient, *kubeSystemNamespaceBlocked, *webhookTlsManagerEnabled) webhookTlsManagerReconciler := reconcilers.NewWebhookTlsManagerReconciler(webhookGoalResolver, kubeClient) cerr := webhookTlsManagerReconciler.Reconcile(ctx) if cerr != nil { logger.Errorf(ctx, "WebhookTlsManagerReconciler failed. error: %s", *cerr) metrics.ResultMetric.With(label).Set(1) os.Exit(1) } metrics.ResultMetric.With(label).Set(0) }