Files
Martin Heck 1c21134a21 Add support for environment variables in configuration
The config file may contain sensitive data such as credentials
for an elasticsearch cluster. To provide the possibility
to store that sensitive data in an other way, support for
environment variables is introduced. Sensitive data can then
be replaced by variables such as ${PASSWORD} and provided by
setting the appropriate environment variables. In kubernetes
the configuration and the sensitive data can be split up into
a configmap and a secret.
2020-03-27 12:14:45 +01:00

69 lines
1.5 KiB
Go

package main
import (
"flag"
"github.com/opsgenie/kubernetes-event-exporter/pkg/exporter"
"github.com/opsgenie/kubernetes-event-exporter/pkg/kube"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"gopkg.in/yaml.v2"
"io/ioutil"
"os"
"os/signal"
"syscall"
"time"
)
var (
conf = flag.String("conf", "config.yaml", "The config path file")
)
func main() {
flag.Parse()
b, err := ioutil.ReadFile(*conf)
if err != nil {
log.Fatal().Err(err).Msg("cannot read config file")
}
b = []byte(os.ExpandEnv(string(b)))
var cfg exporter.Config
err = yaml.Unmarshal(b, &cfg)
if err != nil {
log.Fatal().Err(err).Msg("cannot parse config to YAML")
}
log.Logger = log.With().Caller().Logger().Output(zerolog.ConsoleWriter{
Out: os.Stdout,
TimeFormat: time.RFC3339,
}).Level(zerolog.DebugLevel)
if cfg.LogLevel != "" {
level, err := zerolog.ParseLevel(cfg.LogLevel)
if err != nil {
log.Fatal().Err(err).Str("level", cfg.LogLevel).Msg("Invalid log level")
}
log.Logger = log.Logger.Level(level)
}
kubeconfig, err := kube.GetKubernetesConfig()
if err != nil {
log.Fatal().Err(err).Msg("cannot get kubeconfig")
}
engine := exporter.NewEngine(&cfg, &exporter.ChannelBasedReceiverRegistry{})
w := kube.NewEventWatcher(kubeconfig, engine.OnEvent)
w.Start()
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
sig := <-c
log.Info().Str("signal", sig.String()).Msg("Received signal to exit")
defer close(c)
w.Stop()
engine.Stop()
log.Info().Msg("Exiting")
}