package prometheusctl import ( "errors" "flag" "fmt" "time" "github.com/peterbourgon/ff/v3" "edge-infra.dev/pkg/edge/constants/api/cluster" "edge-infra.dev/pkg/k8s/meta" ) type config struct { prometheus meta.NamespacedObjectReference reconcileInterval time.Duration clusterProvider string } // validate checks all env variable fields are present func (cfg *config) validate() error { if cfg.prometheus.Name == "" { return errors.New("--prometheus-name must be provided") } if cfg.prometheus.Namespace == "" { return errors.New("--prometheus-namespace must be provided") } return nil } // NewConfig creates a new config and flagset from os args func newConfig(args []string) (*config, error) { cfg := &config{} fs := flag.NewFlagSet("prometheus-stackdriver", flag.ContinueOnError) fs.StringVar(&cfg.prometheus.Name, "prometheus-name", "prometheus", "name of prometheus object to reconcile") fs.StringVar(&cfg.prometheus.Namespace, "prometheus-namespace", "prometheus", "namespace of prometheus object to reconcile") fs.DurationVar(&cfg.reconcileInterval, "reconcile-interval", time.Second*60, "how often to re-reconcile when an error occurs") fs.StringVar(&cfg.clusterProvider, "cluster-provider", string(cluster.Generic), fmt.Sprintf("K8s cluster provider: %s. Takes precedence over other provider flags.", cluster.Types)) if err := ff.Parse(fs, args[1:], ff.WithEnvVarNoPrefix()); err != nil { return nil, err } if err := cfg.validate(); err != nil { return nil, err } return cfg, nil }