cloudfoundry-incubator/eirini

View on GitHub
cmd/instance-index-env-injector/main.go

Summary

Maintainability
A
0 mins
Test Coverage
package main

import (
    "os"

    "code.cloudfoundry.org/eirini"
    cmdcommons "code.cloudfoundry.org/eirini/cmd"
    "code.cloudfoundry.org/eirini/k8s/webhook"
    "code.cloudfoundry.org/eirini/util"
    "code.cloudfoundry.org/lager"
    "github.com/jessevdk/go-flags"
    "k8s.io/client-go/kubernetes/scheme"
    "k8s.io/client-go/tools/clientcmd"
    ctrl "sigs.k8s.io/controller-runtime"
    "sigs.k8s.io/controller-runtime/pkg/manager"
    "sigs.k8s.io/controller-runtime/pkg/webhook/admission"
)

type options struct {
    ConfigFile string `short:"c" long:"config" description:"Config for running event-reporter"`
}

func main() {
    var opts options
    _, err := flags.ParseArgs(&opts, os.Args)
    cmdcommons.ExitfIfError(err, "Failed to parse args")

    var cfg eirini.InstanceIndexEnvInjectorConfig
    err = cmdcommons.ReadConfigFile(opts.ConfigFile, &cfg)
    cmdcommons.ExitfIfError(err, "Failed to read config file")

    kubeConfig, err := clientcmd.BuildConfigFromFlags("", cfg.ConfigPath)
    cmdcommons.ExitfIfError(err, "Failed to build kubeconfig")

    log := lager.NewLogger("instance-index-env-injector")
    log.RegisterSink(lager.NewPrettySink(os.Stdout, lager.DEBUG))

    logr := util.NewLagerLogr(log)
    ctrl.SetLogger(logr)

    certDir := cmdcommons.GetEnvOrDefault(
        eirini.EnvInstanceEnvInjectorCertDir,
        eirini.InstanceEnvInjectorCertDir,
    )

    mgr, err := manager.New(kubeConfig, manager.Options{
        // do not serve prometheus metrics; disabled because port clashes during integration tests
        MetricsBindAddress: "0",
        Scheme:             scheme.Scheme,
        Logger:             logr,
        Port:               int(cfg.Port),
        Host:               "0.0.0.0",
        CertDir:            certDir,
    })
    cmdcommons.ExitfIfError(err, "Failed to create k8s controller runtime manager")

    decoder, err := admission.NewDecoder(scheme.Scheme)
    cmdcommons.ExitfIfError(err, "Failed to create admission decoder")

    mgr.GetWebhookServer().Register("/", &admission.Webhook{
        Handler: webhook.NewInstanceIndexEnvInjector(log, decoder),
    })

    err = mgr.Start(ctrl.SetupSignalHandler())
    cmdcommons.ExitfIfError(err, "Failed to start manager")
}