/* Copyright (c) Edgeless Systems GmbH SPDX-License-Identifier: AGPL-3.0-only */ /* Package cmd provides the Constellation CLI. It is responsible for the interaction with the user. Logic should be kept to input/output parsing whenever possible. Any more complex code should usually be implemented in one of the other CLI packages. The code here should be kept as cloud provider agnostic as possible. Any CSP specific tasks should be handled by the "cloudcmd" package. All filepaths handled by the CLI code should originate from here. Common filepaths are defined as constants in the global "/internal/constants" package. To generate workspace correct filepaths for printing, use the functions from the "workspace" package. */ package cmd import ( "errors" "fmt" "github.com/edgelesssys/constellation/v2/cli/internal/cmd/pathprefix" "github.com/edgelesssys/constellation/v2/cli/internal/terraform" "github.com/spf13/pflag" ) // rootFlags are flags defined on the root command. // They are available to all subcommands. type rootFlags struct { pathPrefixer pathprefix.PathPrefixer tfLogLevel terraform.LogLevel debug bool force bool } // parse flags into the rootFlags struct. func (f *rootFlags) parse(flags *pflag.FlagSet) error { var errs error workspace, err := flags.GetString("workspace") if err != nil { errs = errors.Join(err, fmt.Errorf("getting 'workspace' flag: %w", err)) } f.pathPrefixer = pathprefix.New(workspace) tfLogString, err := flags.GetString("tf-log") if err != nil { errs = errors.Join(err, fmt.Errorf("getting 'tf-log' flag: %w", err)) } f.tfLogLevel, err = terraform.ParseLogLevel(tfLogString) if err != nil { errs = errors.Join(err, fmt.Errorf("parsing 'tf-log' flag: %w", err)) } f.debug, err = flags.GetBool("debug") if err != nil { errs = errors.Join(err, fmt.Errorf("getting 'debug' flag: %w", err)) } f.force, err = flags.GetBool("force") if err != nil { errs = errors.Join(err, fmt.Errorf("getting 'force' flag: %w", err)) } return errs } func must(err error) { if err != nil { panic(err) } }