kubelatte-ce
Форк от sbertech/kubelatte-ce
78 строк · 2.4 Кб
1package config
2
3import (
4"flag"
5"github.com/jessevdk/go-flags"
6"github.com/pkg/errors"
7"gitverse.ru/synapse/kubelatte/pkg/util/env"
8"path/filepath"
9)
10
11const Prefix = "kblt"
12
13type WebhookConfig struct {
14TLSPort int `long:"port" required:"false" description:"webhook server port for mutate endpoint"`
15HTTPPort int `long:"http-port" default:"17773" required:"false" description:"webhook server http port for metrics and healthz endpoints"`
16CertFilePath string `long:"cert-file-path" required:"false" description:"file containing the x509 Certificate for HTTPS"`
17KeyFilePath string `long:"key-file-path" required:"false" description:"file containing the x509 private key"`
18CaFilePath string `long:"ca-file-path" required:"false" description:"file containing the CA cert"`
19LogFile string `long:"log-file" required:"false" description:"fiete fluent-bit logs"`
20AllowDeprecatedTLSConfig bool `long:"allow-deprecated-tls-config" required:"false" description:"permits use of deprecated TLS configuration (TLS 1.0/1.1, weak ciphers)"`
21}
22
23// NewWebhookConfig is a constructor for WebhookConfig
24func NewWebhookConfig() (*WebhookConfig, error) {
25config, err := parse()
26if err != nil {
27return nil, errors.Errorf("api=NewWebhookConfig, reason=parse, err=%v", err)
28}
29return config, nil
30}
31
32// parse the args and environment to fill the ClientConfig
33func parse() (*WebhookConfig, error) {
34c := &WebhookConfig{}
35parser := flags.NewParser(c, flags.HelpFlag|flags.PrintErrors|flags.PassDoubleDash|flags.IgnoreUnknown)
36extraArgs, err := parser.Parse()
37if err != nil {
38return nil, errors.Errorf("api=parse, err=%v", err)
39}
40
41if c.LogFile == "" {
42c.LogFile = filepath.Join(env.LogsPath, env.LogFileNameInjector)
43}
44
45if c.KeyFilePath == "" {
46c.KeyFilePath = env.ServerKey
47}
48
49if c.CertFilePath == "" {
50c.CertFilePath = env.ServerCert
51}
52
53if c.CaFilePath == "" {
54c.CaFilePath = env.SertCa
55}
56
57if env.TLSPort != 0 {
58c.TLSPort = env.TLSPort
59}
60
61// Parse any extra args for dependent packages that use "flag" (e.g., logs).
62flag.CommandLine.Parse(extraArgs)
63return c, nil
64}
65
66func Load() (*WebhookConfig, error) {
67webhookConfig, err := NewWebhookConfig()
68if err != nil {
69return nil, err
70}
71
72var flagsErr *flags.Error
73if errors.As(err, &flagsErr) && errors.Is(flagsErr.Type, flags.ErrHelp) {
74return nil, err
75}
76
77return webhookConfig, nil
78}
79