// Copyright IBM Corp. 2014, 2026 // SPDX-License-Identifier: BUSL-1.1 package arguments import ( "github.com/hashicorp/terraform/internal/tfdiags" ) // Query represents the command-line arguments for the query command. type Query struct { // State, Operation, and Vars are the common extended flags State *State Operation *Operation Vars *Vars // ViewType specifies which output format to use: human or JSON. ViewType ViewType // GenerateConfigPath tells Terraform that config should be generated for // the found resources in the query and which path the generated file should // be written to. GenerateConfigPath string } func ParseQuery(args []string) (*Query, tfdiags.Diagnostics) { var diags tfdiags.Diagnostics query := &Query{ State: &State{}, Operation: &Operation{}, Vars: &Vars{}, } cmdFlags := defaultFlagSet("query") cmdFlags.StringVar(&query.GenerateConfigPath, "generate-config-out", "", "generate-config-out") varsFlags := NewFlagNameValueSlice("-var") varFilesFlags := varsFlags.Alias("-var-file") query.Vars.vars = &varsFlags query.Vars.varFiles = &varFilesFlags cmdFlags.Var(query.Vars.vars, "var", "var") cmdFlags.Var(query.Vars.varFiles, "var-file", "var-file") var json bool cmdFlags.BoolVar(&json, "json", false, "json") 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", "To specify a working directory for the query, use the global -chdir flag.", )) } diags = diags.Append(query.Operation.Parse()) if len(query.Operation.ActionTargets) > 0 { diags = diags.Append(tfdiags.Sourceless( tfdiags.Error, "Invalid arguments", "Actions cannot be specified during query operations.")) } switch { case json: query.ViewType = ViewJSON default: query.ViewType = ViewHuman } return query, diags }