// Copyright IBM Corp. 2014, 2026 // SPDX-License-Identifier: BUSL-1.1 package arguments import "github.com/hashicorp/terraform/internal/tfdiags" // ProvidersLock represents the command-line arguments for the providers lock // command. type ProvidersLock struct { Platforms FlagStringSlice FSMirrorDir string NetMirrorURL string TestsDirectory string EnablePluginCache bool Providers []string // Vars are the variable-related flags (-var, -var-file). Vars *Vars } // ParseProvidersLock processes CLI arguments, returning a ProvidersLock value // and errors. If errors are encountered, a ProvidersLock value is still // returned representing the best effort interpretation of the arguments. func ParseProvidersLock(args []string) (*ProvidersLock, tfdiags.Diagnostics) { var diags tfdiags.Diagnostics providersLock := &ProvidersLock{ Vars: &Vars{}, } cmdFlags := extendedFlagSet("providers lock", nil, nil, providersLock.Vars) cmdFlags.Var(&providersLock.Platforms, "platform", "target platform") cmdFlags.StringVar(&providersLock.FSMirrorDir, "fs-mirror", "", "filesystem mirror directory") cmdFlags.StringVar(&providersLock.NetMirrorURL, "net-mirror", "", "network mirror base URL") cmdFlags.StringVar(&providersLock.TestsDirectory, "test-directory", "tests", "test-directory") cmdFlags.BoolVar(&providersLock.EnablePluginCache, "enable-plugin-cache", false, "") if err := cmdFlags.Parse(args); err != nil { diags = diags.Append(tfdiags.Sourceless( tfdiags.Error, "Failed to parse command-line flags", err.Error(), )) } if providersLock.FSMirrorDir != "" && providersLock.NetMirrorURL != "" { diags = diags.Append(tfdiags.Sourceless( tfdiags.Error, "Invalid installation method options", "The -fs-mirror and -net-mirror command line options are mutually-exclusive.", )) } providersLock.Providers = cmdFlags.Args() return providersLock, diags }