mirror of
https://github.com/hashicorp/terraform.git
synced 2026-05-28 04:03:27 -04:00
command: Add vars to providers mirror command
This commit is contained in:
parent
6c6be5bcfa
commit
ed2bdf6825
3 changed files with 104 additions and 18 deletions
|
|
@ -11,6 +11,9 @@ type ProvidersMirror struct {
|
|||
Platforms FlagStringSlice
|
||||
LockFile bool
|
||||
OutputDir string
|
||||
|
||||
// Vars are the variable-related flags (-var, -var-file).
|
||||
Vars *Vars
|
||||
}
|
||||
|
||||
// ParseProvidersMirror processes CLI arguments, returning a ProvidersMirror
|
||||
|
|
@ -18,9 +21,11 @@ type ProvidersMirror struct {
|
|||
// still returned representing the best effort interpretation of the arguments.
|
||||
func ParseProvidersMirror(args []string) (*ProvidersMirror, tfdiags.Diagnostics) {
|
||||
var diags tfdiags.Diagnostics
|
||||
providersMirror := &ProvidersMirror{}
|
||||
providersMirror := &ProvidersMirror{
|
||||
Vars: &Vars{},
|
||||
}
|
||||
|
||||
cmdFlags := defaultFlagSet("providers mirror")
|
||||
cmdFlags := extendedFlagSet("providers mirror", nil, nil, providersMirror.Vars)
|
||||
cmdFlags.Var(&providersMirror.Platforms, "platform", "target platform")
|
||||
cmdFlags.BoolVar(&providersMirror.LockFile, "lock-file", true, "use lock file")
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"github.com/google/go-cmp/cmp/cmpopts"
|
||||
"github.com/hashicorp/terraform/internal/tfdiags"
|
||||
)
|
||||
|
||||
|
|
@ -20,6 +21,7 @@ func TestParseProvidersMirror_valid(t *testing.T) {
|
|||
&ProvidersMirror{
|
||||
LockFile: true,
|
||||
OutputDir: "./mirror",
|
||||
Vars: &Vars{},
|
||||
},
|
||||
},
|
||||
"all options": {
|
||||
|
|
@ -32,17 +34,20 @@ func TestParseProvidersMirror_valid(t *testing.T) {
|
|||
&ProvidersMirror{
|
||||
Platforms: FlagStringSlice{"linux_amd64", "darwin_arm64"},
|
||||
OutputDir: "./mirror",
|
||||
Vars: &Vars{},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
cmpOpts := cmpopts.IgnoreUnexported(Vars{})
|
||||
|
||||
for name, tc := range testCases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
got, diags := ParseProvidersMirror(tc.args)
|
||||
if len(diags) > 0 {
|
||||
t.Fatalf("unexpected diags: %v", diags)
|
||||
}
|
||||
if diff := cmp.Diff(tc.want, got); diff != "" {
|
||||
if diff := cmp.Diff(tc.want, got, cmpOpts); diff != "" {
|
||||
t.Fatalf("unexpected result\n%s", diff)
|
||||
}
|
||||
})
|
||||
|
|
@ -59,6 +64,7 @@ func TestParseProvidersMirror_invalid(t *testing.T) {
|
|||
nil,
|
||||
&ProvidersMirror{
|
||||
LockFile: true,
|
||||
Vars: &Vars{},
|
||||
},
|
||||
tfdiags.Diagnostics{
|
||||
tfdiags.Sourceless(
|
||||
|
|
@ -72,6 +78,7 @@ func TestParseProvidersMirror_invalid(t *testing.T) {
|
|||
[]string{"./mirror", "./extra"},
|
||||
&ProvidersMirror{
|
||||
LockFile: true,
|
||||
Vars: &Vars{},
|
||||
},
|
||||
tfdiags.Diagnostics{
|
||||
tfdiags.Sourceless(
|
||||
|
|
@ -85,6 +92,7 @@ func TestParseProvidersMirror_invalid(t *testing.T) {
|
|||
[]string{"-wat"},
|
||||
&ProvidersMirror{
|
||||
LockFile: true,
|
||||
Vars: &Vars{},
|
||||
},
|
||||
tfdiags.Diagnostics{
|
||||
tfdiags.Sourceless(
|
||||
|
|
@ -101,13 +109,60 @@ func TestParseProvidersMirror_invalid(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
cmpOpts := cmpopts.IgnoreUnexported(Vars{})
|
||||
|
||||
for name, tc := range testCases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
got, gotDiags := ParseProvidersMirror(tc.args)
|
||||
if diff := cmp.Diff(tc.want, got); diff != "" {
|
||||
if diff := cmp.Diff(tc.want, got, cmpOpts); diff != "" {
|
||||
t.Fatalf("unexpected result\n%s", diff)
|
||||
}
|
||||
tfdiags.AssertDiagnosticsMatch(t, gotDiags, tc.wantDiags)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseProvidersMirror_vars(t *testing.T) {
|
||||
testCases := map[string]struct {
|
||||
args []string
|
||||
want []FlagNameValue
|
||||
}{
|
||||
"var": {
|
||||
args: []string{"-var", "foo=bar", "./mirror"},
|
||||
want: []FlagNameValue{
|
||||
{Name: "-var", Value: "foo=bar"},
|
||||
},
|
||||
},
|
||||
"var-file": {
|
||||
args: []string{"-var-file", "cool.tfvars", "./mirror"},
|
||||
want: []FlagNameValue{
|
||||
{Name: "-var-file", Value: "cool.tfvars"},
|
||||
},
|
||||
},
|
||||
"both": {
|
||||
args: []string{
|
||||
"-var", "foo=bar",
|
||||
"-var-file", "cool.tfvars",
|
||||
"-var", "boop=beep",
|
||||
"./mirror",
|
||||
},
|
||||
want: []FlagNameValue{
|
||||
{Name: "-var", Value: "foo=bar"},
|
||||
{Name: "-var-file", Value: "cool.tfvars"},
|
||||
{Name: "-var", Value: "boop=beep"},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for name, tc := range testCases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
got, diags := ParseProvidersMirror(tc.args)
|
||||
if len(diags) > 0 {
|
||||
t.Fatalf("unexpected diags: %v", diags)
|
||||
}
|
||||
if vars := got.Vars.All(); !cmp.Equal(vars, tc.want) {
|
||||
t.Fatalf("unexpected vars: %#v", vars)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,6 +61,23 @@ func (c *ProvidersMirrorCommand) Run(args []string) int {
|
|||
ctx, done := c.InterruptibleContext(c.CommandContext())
|
||||
defer done()
|
||||
|
||||
loader, err := c.initConfigLoader()
|
||||
if err != nil {
|
||||
diags = diags.Append(err)
|
||||
c.showDiagnostics(diags)
|
||||
return 1
|
||||
}
|
||||
|
||||
var varDiags tfdiags.Diagnostics
|
||||
c.VariableValues, varDiags = parsedArgs.Vars.CollectValues(func(filename string, src []byte) {
|
||||
loader.Parser().ForceFileSource(filename, src)
|
||||
})
|
||||
diags = diags.Append(varDiags)
|
||||
if diags.HasErrors() {
|
||||
c.showDiagnostics(diags)
|
||||
return 1
|
||||
}
|
||||
|
||||
config, confDiags := c.loadConfig(".")
|
||||
diags = diags.Append(confDiags)
|
||||
reqs, moreDiags := config.ProviderRequirements()
|
||||
|
|
@ -350,21 +367,30 @@ Usage: terraform [global options] providers mirror [options] <target-dir>
|
|||
|
||||
Options:
|
||||
|
||||
-platform=os_arch Choose which target platform to build a mirror for.
|
||||
By default Terraform will obtain plugin packages
|
||||
suitable for the platform where you run this command.
|
||||
Use this flag multiple times to include packages for
|
||||
multiple target systems.
|
||||
-platform=os_arch Choose which target platform to build a mirror for.
|
||||
By default Terraform will obtain plugin packages
|
||||
suitable for the platform where you run this command.
|
||||
Use this flag multiple times to include packages for
|
||||
multiple target systems.
|
||||
|
||||
Target names consist of an operating system and a CPU
|
||||
architecture. For example, "linux_amd64" selects the
|
||||
Linux operating system running on an AMD64 or x86_64
|
||||
CPU. Each provider is available only for a limited
|
||||
set of target platforms.
|
||||
Target names consist of an operating system and a CPU
|
||||
architecture. For example, "linux_amd64" selects the
|
||||
Linux operating system running on an AMD64 or x86_64
|
||||
CPU. Each provider is available only for a limited
|
||||
set of target platforms.
|
||||
|
||||
-lock-file=false Ignore the provider lock file when fetching providers.
|
||||
By default the mirror command will use the version info
|
||||
in the lock file if the configuration directory has been
|
||||
previously initialized.
|
||||
-lock-file=false Ignore the provider lock file when fetching providers.
|
||||
By default the mirror command will use the version info
|
||||
in the lock file if the configuration directory has been
|
||||
previously initialized.
|
||||
|
||||
-var 'foo=bar' Set a value for one of the input variables in the root
|
||||
module of the configuration. Use this option more than
|
||||
once to set more than one variable.
|
||||
|
||||
-var-file=filename Load variable values from the given file, in addition
|
||||
to the default files terraform.tfvars and *.auto.tfvars.
|
||||
Use this option more than once to include more than one
|
||||
variables file.
|
||||
`
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue