otelcollector/otel-allocator/internal/config/flags.go (97 lines of code) (raw):
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package config
import (
"flag"
"path/filepath"
"github.com/spf13/pflag"
"k8s.io/client-go/util/homedir"
"sigs.k8s.io/controller-runtime/pkg/log/zap"
uberzap "go.uber.org/zap"
)
// Flag names.
const (
targetAllocatorName = "target-allocator"
configFilePathFlagName = "config-file"
listenAddrFlagName = "listen-addr"
prometheusCREnabledFlagName = "enable-prometheus-cr-watcher"
kubeConfigPathFlagName = "kubeconfig-path"
httpsEnabledFlagName = "enable-https-server"
listenAddrHttpsFlagName = "listen-addr-https"
httpsCAFilePathFlagName = "https-ca-file"
httpsTLSCertFilePathFlagName = "https-tls-cert-file"
httpsTLSKeyFilePathFlagName = "https-tls-key-file"
)
// We can't bind this flag to our FlagSet, so we need to handle it separately.
var zapCmdLineOpts zap.Options
func getFlagSet(errorHandling pflag.ErrorHandling) *pflag.FlagSet {
flagSet := pflag.NewFlagSet(targetAllocatorName, errorHandling)
flagSet.String(configFilePathFlagName, DefaultConfigFilePath, "The path to the config file.")
flagSet.String(listenAddrFlagName, ":8080", "The address where this service serves.")
flagSet.Bool(prometheusCREnabledFlagName, false, "Enable Prometheus CRs as target sources")
flagSet.String(kubeConfigPathFlagName, filepath.Join(homedir.HomeDir(), ".kube", "config"), "absolute path to the KubeconfigPath file")
flagSet.Bool(httpsEnabledFlagName, false, "Enable HTTPS additional server")
flagSet.String(listenAddrHttpsFlagName, ":8443", "The address where this service serves over HTTPS.")
flagSet.String(httpsCAFilePathFlagName, "", "The path to the HTTPS server TLS CA file.")
flagSet.String(httpsTLSCertFilePathFlagName, "", "The path to the HTTPS server TLS certificate file.")
flagSet.String(httpsTLSKeyFilePathFlagName, "", "The path to the HTTPS server TLS key file.")
zapFlagSet := flag.NewFlagSet("", flag.ErrorHandling(errorHandling))
zapCmdLineOpts.BindFlags(zapFlagSet)
lvl := uberzap.NewAtomicLevelAt(uberzap.PanicLevel)
zapCmdLineOpts.Level = &lvl
flagSet.AddGoFlagSet(zapFlagSet)
return flagSet
}
func getConfigFilePath(flagSet *pflag.FlagSet) (string, error) {
return flagSet.GetString(configFilePathFlagName)
}
func getKubeConfigFilePath(flagSet *pflag.FlagSet) (string, error) {
return flagSet.GetString(kubeConfigPathFlagName)
}
func getListenAddr(flagSet *pflag.FlagSet) (string, error) {
return flagSet.GetString(listenAddrFlagName)
}
func getPrometheusCREnabled(flagSet *pflag.FlagSet) (value bool, changed bool, err error) {
if changed = flagSet.Changed(prometheusCREnabledFlagName); !changed {
value, err = false, nil
return
}
value, err = flagSet.GetBool(prometheusCREnabledFlagName)
return
}
func getHttpsListenAddr(flagSet *pflag.FlagSet) (value string, changed bool, err error) {
if changed = flagSet.Changed(listenAddrHttpsFlagName); !changed {
value, err = ":8443", nil
return
}
value, err = flagSet.GetString(listenAddrHttpsFlagName)
return
}
func getHttpsEnabled(flagSet *pflag.FlagSet) (value bool, changed bool, err error) {
if changed = flagSet.Changed(httpsEnabledFlagName); !changed {
value, err = false, nil
return
}
value, err = flagSet.GetBool(httpsEnabledFlagName)
return
}
func getHttpsCAFilePath(flagSet *pflag.FlagSet) (value string, changed bool, err error) {
if changed = flagSet.Changed(httpsCAFilePathFlagName); !changed {
value, err = "", nil
return
}
value, err = flagSet.GetString(httpsCAFilePathFlagName)
return
}
func getHttpsTLSCertFilePath(flagSet *pflag.FlagSet) (value string, changed bool, err error) {
if changed = flagSet.Changed(httpsTLSCertFilePathFlagName); !changed {
value, err = "", nil
return
}
value, err = flagSet.GetString(httpsTLSCertFilePathFlagName)
return
}
func getHttpsTLSKeyFilePath(flagSet *pflag.FlagSet) (value string, changed bool, err error) {
if changed = flagSet.Changed(httpsTLSKeyFilePathFlagName); !changed {
value, err = "", nil
return
}
value, err = flagSet.GetString(httpsTLSKeyFilePathFlagName)
return
}