mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-25 18:45:20 -06:00
command/import: remove -provider command line argument (#24090)
Now that #22862 has been merged, terraform will properly pick up the resource provider configuration from state. We can remove the deprecated `-provider` flag.
This commit is contained in:
parent
80862f3436
commit
1c7167a9a1
@ -43,7 +43,6 @@ func (c *ImportCommand) Run(args []string) int {
|
|||||||
cmdFlags.StringVar(&c.Meta.stateOutPath, "state-out", "", "path")
|
cmdFlags.StringVar(&c.Meta.stateOutPath, "state-out", "", "path")
|
||||||
cmdFlags.StringVar(&c.Meta.backupPath, "backup", "", "path")
|
cmdFlags.StringVar(&c.Meta.backupPath, "backup", "", "path")
|
||||||
cmdFlags.StringVar(&configPath, "config", pwd, "path")
|
cmdFlags.StringVar(&configPath, "config", pwd, "path")
|
||||||
cmdFlags.StringVar(&c.Meta.provider, "provider", "", "provider")
|
|
||||||
cmdFlags.BoolVar(&c.Meta.stateLock, "lock", true, "lock state")
|
cmdFlags.BoolVar(&c.Meta.stateLock, "lock", true, "lock state")
|
||||||
cmdFlags.DurationVar(&c.Meta.stateLockTimeout, "lock-timeout", 0, "lock timeout")
|
cmdFlags.DurationVar(&c.Meta.stateLockTimeout, "lock-timeout", 0, "lock timeout")
|
||||||
cmdFlags.BoolVar(&c.Meta.allowMissingConfig, "allow-missing-config", false, "allow missing config")
|
cmdFlags.BoolVar(&c.Meta.allowMissingConfig, "allow-missing-config", false, "allow missing config")
|
||||||
@ -156,36 +155,6 @@ func (c *ImportCommand) Run(args []string) int {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
// Also parse the user-provided provider address, if any.
|
|
||||||
var providerAddr addrs.AbsProviderConfig
|
|
||||||
if c.Meta.provider != "" {
|
|
||||||
traversal, travDiags := hclsyntax.ParseTraversalAbs([]byte(c.Meta.provider), `-provider=...`, hcl.Pos{Line: 1, Column: 1})
|
|
||||||
diags = diags.Append(travDiags)
|
|
||||||
if travDiags.HasErrors() {
|
|
||||||
c.showDiagnostics(diags)
|
|
||||||
c.Ui.Info(importCommandInvalidAddressReference)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
relAddr, addrDiags := configs.ParseProviderConfigCompact(traversal)
|
|
||||||
diags = diags.Append(addrDiags)
|
|
||||||
if addrDiags.HasErrors() {
|
|
||||||
c.showDiagnostics(diags)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
providerAddr = relAddr.Absolute(addrs.RootModuleInstance)
|
|
||||||
} else {
|
|
||||||
// Use a default address inferred from the resource type.
|
|
||||||
// We assume the same module as the resource address here, which
|
|
||||||
// may get resolved to an inherited provider when we construct the
|
|
||||||
// import graph inside ctx.Import, called below.
|
|
||||||
if rc != nil && rc.ProviderConfigRef != nil {
|
|
||||||
providerAddr = rc.ProviderConfigAddr().Absolute(addr.Module)
|
|
||||||
} else {
|
|
||||||
providerType := resourceRelAddr.DefaultProvider()
|
|
||||||
providerAddr = addrs.NewDefaultLocalProviderConfig(providerType.LegacyString()).Absolute(addr.Module)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for user-supplied plugin path
|
// Check for user-supplied plugin path
|
||||||
if c.pluginPath, err = c.loadPluginPath(); err != nil {
|
if c.pluginPath, err = c.loadPluginPath(); err != nil {
|
||||||
c.Ui.Error(fmt.Sprintf("Error loading plugin path: %s", err))
|
c.Ui.Error(fmt.Sprintf("Error loading plugin path: %s", err))
|
||||||
@ -256,7 +225,6 @@ func (c *ImportCommand) Run(args []string) int {
|
|||||||
&terraform.ImportTarget{
|
&terraform.ImportTarget{
|
||||||
Addr: addr,
|
Addr: addr,
|
||||||
ID: args[1],
|
ID: args[1],
|
||||||
ProviderAddr: providerAddr,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -341,11 +309,6 @@ Options:
|
|||||||
|
|
||||||
-no-color If specified, output won't contain any color.
|
-no-color If specified, output won't contain any color.
|
||||||
|
|
||||||
-provider=provider Deprecated: Override the provider configuration to use
|
|
||||||
when importing the object. By default, Terraform uses the
|
|
||||||
provider specified in the configuration for the target
|
|
||||||
resource, and that is the best behavior in most cases.
|
|
||||||
|
|
||||||
-state=PATH Path to the source state file. Defaults to the configured
|
-state=PATH Path to the source state file. Defaults to the configured
|
||||||
backend, or "terraform.tfstate"
|
backend, or "terraform.tfstate"
|
||||||
|
|
||||||
|
@ -12,7 +12,6 @@ import (
|
|||||||
"github.com/mitchellh/cli"
|
"github.com/mitchellh/cli"
|
||||||
"github.com/zclconf/go-cty/cty"
|
"github.com/zclconf/go-cty/cty"
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/addrs"
|
|
||||||
"github.com/hashicorp/terraform/configs/configschema"
|
"github.com/hashicorp/terraform/configs/configschema"
|
||||||
"github.com/hashicorp/terraform/helper/copy"
|
"github.com/hashicorp/terraform/helper/copy"
|
||||||
"github.com/hashicorp/terraform/plugin/discovery"
|
"github.com/hashicorp/terraform/plugin/discovery"
|
||||||
@ -537,156 +536,6 @@ func TestImport_providerConfigWithVarFile(t *testing.T) {
|
|||||||
testStateOutput(t, statePath, testImportStr)
|
testStateOutput(t, statePath, testImportStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestImport_customProvider(t *testing.T) {
|
|
||||||
defer testChdir(t, testFixturePath("import-provider-aliased"))()
|
|
||||||
|
|
||||||
statePath := testTempFile(t)
|
|
||||||
|
|
||||||
p := testProvider()
|
|
||||||
ui := new(cli.MockUi)
|
|
||||||
c := &ImportCommand{
|
|
||||||
Meta: Meta{
|
|
||||||
testingOverrides: metaOverridesForProvider(p),
|
|
||||||
Ui: ui,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
p.ImportResourceStateFn = nil
|
|
||||||
p.ImportResourceStateResponse = providers.ImportResourceStateResponse{
|
|
||||||
ImportedResources: []providers.ImportedResource{
|
|
||||||
{
|
|
||||||
TypeName: "test_instance",
|
|
||||||
State: cty.ObjectVal(map[string]cty.Value{
|
|
||||||
"id": cty.StringVal("yay"),
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
p.GetSchemaReturn = &terraform.ProviderSchema{
|
|
||||||
Provider: &configschema.Block{
|
|
||||||
Attributes: map[string]*configschema.Attribute{
|
|
||||||
"foo": {Type: cty.String, Optional: true},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
ResourceTypes: map[string]*configschema.Block{
|
|
||||||
"test_instance": {
|
|
||||||
Attributes: map[string]*configschema.Attribute{
|
|
||||||
"id": {Type: cty.String, Optional: true, Computed: true},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
args := []string{
|
|
||||||
"-provider", "test.alias",
|
|
||||||
"-state", statePath,
|
|
||||||
"test_instance.foo",
|
|
||||||
"bar",
|
|
||||||
}
|
|
||||||
if code := c.Run(args); code != 0 {
|
|
||||||
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String())
|
|
||||||
}
|
|
||||||
|
|
||||||
if !p.ImportResourceStateCalled {
|
|
||||||
t.Fatal("ImportResourceState should be called")
|
|
||||||
}
|
|
||||||
|
|
||||||
testStateOutput(t, statePath, testImportCustomProviderStr)
|
|
||||||
}
|
|
||||||
|
|
||||||
// This tests behavior when the provider name does not match the implied
|
|
||||||
// provider name
|
|
||||||
func TestImport_providerNameMismatch(t *testing.T) {
|
|
||||||
defer testChdir(t, testFixturePath("import-provider-mismatch"))()
|
|
||||||
|
|
||||||
statePath := testTempFile(t)
|
|
||||||
|
|
||||||
p := testProvider()
|
|
||||||
ui := new(cli.MockUi)
|
|
||||||
c := &ImportCommand{
|
|
||||||
Meta: Meta{
|
|
||||||
testingOverrides: &testingOverrides{
|
|
||||||
ProviderResolver: providers.ResolverFixed(
|
|
||||||
map[addrs.Provider]providers.Factory{
|
|
||||||
addrs.NewLegacyProvider("test-beta"): providers.FactoryFixed(p),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
},
|
|
||||||
Ui: ui,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
configured := false
|
|
||||||
p.ConfigureNewFn = func(req providers.ConfigureRequest) providers.ConfigureResponse {
|
|
||||||
configured = true
|
|
||||||
|
|
||||||
cfg := req.Config
|
|
||||||
if !cfg.Type().HasAttribute("foo") {
|
|
||||||
return providers.ConfigureResponse{
|
|
||||||
Diagnostics: tfdiags.Diagnostics{}.Append(fmt.Errorf("configuration has no foo argument")),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if got, want := cfg.GetAttr("foo"), cty.StringVal("baz"); !want.RawEquals(got) {
|
|
||||||
return providers.ConfigureResponse{
|
|
||||||
Diagnostics: tfdiags.Diagnostics{}.Append(fmt.Errorf("foo argument is %#v, but want %#v", got, want)),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return providers.ConfigureResponse{}
|
|
||||||
}
|
|
||||||
|
|
||||||
p.ImportResourceStateFn = nil
|
|
||||||
p.ImportResourceStateResponse = providers.ImportResourceStateResponse{
|
|
||||||
ImportedResources: []providers.ImportedResource{
|
|
||||||
{
|
|
||||||
TypeName: "test_instance",
|
|
||||||
State: cty.ObjectVal(map[string]cty.Value{
|
|
||||||
"id": cty.StringVal("yay"),
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
p.GetSchemaReturn = &terraform.ProviderSchema{
|
|
||||||
Provider: &configschema.Block{
|
|
||||||
Attributes: map[string]*configschema.Attribute{
|
|
||||||
"foo": {Type: cty.String, Optional: true},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
ResourceTypes: map[string]*configschema.Block{
|
|
||||||
"test_instance": {
|
|
||||||
Attributes: map[string]*configschema.Attribute{
|
|
||||||
"id": {Type: cty.String, Optional: true, Computed: true},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
args := []string{
|
|
||||||
"-provider", "test-beta",
|
|
||||||
"-state", statePath,
|
|
||||||
"test_instance.foo",
|
|
||||||
"bar",
|
|
||||||
}
|
|
||||||
|
|
||||||
if code := c.Run(args); code != 0 {
|
|
||||||
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String())
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verify that the test-beta provider was configured
|
|
||||||
if !configured {
|
|
||||||
t.Fatal("Configure should be called")
|
|
||||||
}
|
|
||||||
|
|
||||||
if !p.ImportResourceStateCalled {
|
|
||||||
t.Fatal("ImportResourceState (provider 'test-beta') should be called")
|
|
||||||
}
|
|
||||||
|
|
||||||
if !p.ReadResourceCalled {
|
|
||||||
t.Fatal("ReadResource (provider 'test-beta' should be called")
|
|
||||||
}
|
|
||||||
|
|
||||||
testStateOutput(t, statePath, testImportProviderMismatchStr)
|
|
||||||
}
|
|
||||||
func TestImport_allowMissingResourceConfig(t *testing.T) {
|
func TestImport_allowMissingResourceConfig(t *testing.T) {
|
||||||
defer testChdir(t, testFixturePath("import-missing-resource-config"))()
|
defer testChdir(t, testFixturePath("import-missing-resource-config"))()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user