2023-01-19 09:57:50 -05:00
|
|
|
/*
|
|
|
|
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.
|
2023-08-08 09:18:36 -04:00
|
|
|
|
|
|
|
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.
|
2023-01-19 09:57:50 -05:00
|
|
|
*/
|
|
|
|
package cmd
|
2023-10-16 09:05:29 -04:00
|
|
|
|
|
|
|
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)
|
|
|
|
}
|
|
|
|
}
|