mirror of
https://github.com/opentffoundation/opentf.git
synced 2026-05-16 16:01:49 -04:00
In order to be able to get rid of the state related configurations from Meta, we want to be able to register those flags from one single location. We want also to be able to register these in a more granular way, since some commands require only the locking specific flags, while other commands use also the state path or backup path. Signed-off-by: Andrei Ciobanu <andrei.ciobanu@opentofu.org>
73 lines
2.3 KiB
Go
73 lines
2.3 KiB
Go
// Copyright (c) The OpenTofu Authors
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
// Copyright (c) 2023 HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package arguments
|
|
|
|
import (
|
|
"github.com/opentofu/opentofu/internal/tfdiags"
|
|
)
|
|
|
|
// Graph represents the command-line arguments for the graph command.
|
|
type Graph struct {
|
|
// DrawCycles highlights any cycles in the graph with colored edges.
|
|
DrawCycles bool
|
|
// GraphType specifies the type of graph to output (plan, plan-refresh-only, plan-destroy, or apply).
|
|
GraphType string
|
|
// ModuleDepth specifies the depth of modules to show in the output.
|
|
ModuleDepth int
|
|
// Verbose enables verbose output.
|
|
Verbose bool
|
|
// PlanPath specifies the path to a plan file to render the graph from.
|
|
PlanPath string
|
|
|
|
// ViewOptions specifies which view options to use
|
|
ViewOptions ViewOptions
|
|
|
|
// Vars holds and provides information for the flags related to variables that a user can give into the process
|
|
Vars *Vars
|
|
}
|
|
|
|
// ParseGraph processes CLI arguments, returning a Graph value, a closer function, and errors.
|
|
// If errors are encountered, a Graph value is still returned representing
|
|
// the best effort interpretation of the arguments.
|
|
func ParseGraph(args []string) (*Graph, func(), tfdiags.Diagnostics) {
|
|
var diags tfdiags.Diagnostics
|
|
arguments := &Graph{
|
|
Vars: &Vars{},
|
|
}
|
|
|
|
cmdFlags := extendedFlagSet("graph", nil, arguments.Vars)
|
|
cmdFlags.BoolVar(&arguments.DrawCycles, "draw-cycles", false, "draw-cycles")
|
|
cmdFlags.StringVar(&arguments.GraphType, "type", "", "type")
|
|
cmdFlags.IntVar(&arguments.ModuleDepth, "module-depth", -1, "module-depth")
|
|
cmdFlags.BoolVar(&arguments.Verbose, "verbose", false, "verbose")
|
|
cmdFlags.StringVar(&arguments.PlanPath, "plan", "", "plan")
|
|
|
|
if err := cmdFlags.Parse(args); err != nil {
|
|
diags = diags.Append(tfdiags.Sourceless(
|
|
tfdiags.Error,
|
|
"Failed to parse command-line flags",
|
|
err.Error(),
|
|
))
|
|
}
|
|
|
|
// we only parse but do not register the views flags since this command does not need it
|
|
closer, moreDiags := arguments.ViewOptions.Parse()
|
|
diags = diags.Append(moreDiags)
|
|
if diags.HasErrors() {
|
|
return arguments, closer, diags
|
|
}
|
|
|
|
if len(cmdFlags.Args()) > 0 {
|
|
diags = diags.Append(tfdiags.Sourceless(
|
|
tfdiags.Error,
|
|
"Unexpected argument",
|
|
"Too many command line arguments. Did you mean to use -chdir?",
|
|
))
|
|
}
|
|
|
|
return arguments, closer, diags
|
|
}
|