| // Copyright IBM Corp. 2014, 2026 | |
| // SPDX-License-Identifier: BUSL-1.1 | |
| package arguments | |
| import "github.com/hashicorp/terraform/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 is the type of operation graph to output (plan, | |
| // plan-refresh-only, plan-destroy, or apply). Empty string means the | |
| // default resource-dependency summary. | |
| GraphType string | |
| // ModuleDepth is a deprecated option that was used in prior versions to | |
| // control the depth of modules shown. | |
| ModuleDepth int | |
| // Verbose enables verbose graph output. | |
| Verbose bool | |
| // Plan is the path to a saved plan file to render as a graph. | |
| Plan string | |
| // Format is the output format to emit (dot or mermaid). | |
| Format string | |
| // Vars are the variable-related flags (-var, -var-file). | |
| Vars *Vars | |
| } | |
| // ParseGraph processes CLI arguments, returning a Graph value 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, tfdiags.Diagnostics) { | |
| var diags tfdiags.Diagnostics | |
| graph := &Graph{ | |
| ModuleDepth: -1, | |
| Vars: &Vars{}, | |
| } | |
| cmdFlags := extendedFlagSet("graph", nil, nil, graph.Vars) | |
| cmdFlags.BoolVar(&graph.DrawCycles, "draw-cycles", false, "draw-cycles") | |
| cmdFlags.StringVar(&graph.GraphType, "type", "", "type") | |
| cmdFlags.StringVar(&graph.Format, "format", "dot", "format") | |
| cmdFlags.IntVar(&graph.ModuleDepth, "module-depth", -1, "module-depth") | |
| cmdFlags.BoolVar(&graph.Verbose, "verbose", false, "verbose") | |
| cmdFlags.StringVar(&graph.Plan, "plan", "", "plan") | |
| if err := cmdFlags.Parse(args); err != nil { | |
| diags = diags.Append(tfdiags.Sourceless( | |
| tfdiags.Error, | |
| "Failed to parse command-line flags", | |
| err.Error(), | |
| )) | |
| } | |
| args = cmdFlags.Args() | |
| if len(args) > 0 { | |
| diags = diags.Append(tfdiags.Sourceless( | |
| tfdiags.Error, | |
| "Too many command line arguments", | |
| "Expected no positional arguments. Did you mean to use -chdir?", | |
| )) | |
| } | |
| return graph, diags | |
| } |