diff --git a/internal/genconfig/generate_config.go b/internal/genconfig/generate_config.go index 4db2f60c06..47c0b5c4d2 100644 --- a/internal/genconfig/generate_config.go +++ b/internal/genconfig/generate_config.go @@ -75,12 +75,16 @@ func (r *Resource) String() string { func GenerateResourceContents(addr addrs.AbsResourceInstance, schema *configschema.Block, pc addrs.LocalProviderConfig, - stateVal cty.Value) (*Resource, tfdiags.Diagnostics) { + stateVal cty.Value, + forceProviderAddr bool, +) (*Resource, tfdiags.Diagnostics) { var buf strings.Builder var diags tfdiags.Diagnostics - if pc.LocalName != addr.Resource.Resource.ImpliedProvider() || pc.Alias != "" { + generateProviderAddr := pc.LocalName != addr.Resource.Resource.ImpliedProvider() || pc.Alias != "" + + if generateProviderAddr || forceProviderAddr { buf.WriteString(strings.Repeat(" ", 2)) buf.WriteString(fmt.Sprintf("provider = %s\n", pc.StringCompact())) } @@ -143,7 +147,7 @@ func GenerateListResourceContents(addr addrs.AbsResourceInstance, if val.Type().HasAttribute("state") { stateVal = val.GetAttr("state") } - content, gDiags := GenerateResourceContents(resAddr, schema, pc, stateVal) + content, gDiags := GenerateResourceContents(resAddr, schema, pc, stateVal, true) if gDiags.HasErrors() { diags = diags.Append(gDiags) continue diff --git a/internal/genconfig/generate_config_test.go b/internal/genconfig/generate_config_test.go index 86a5634f5d..e2f7497f70 100644 --- a/internal/genconfig/generate_config_test.go +++ b/internal/genconfig/generate_config_test.go @@ -825,7 +825,7 @@ resource "tfcoremock_sensitive_values" "values" { if err != nil { t.Fatalf("schema failed InternalValidate: %s", err) } - contents, diags := GenerateResourceContents(tc.addr, tc.schema, tc.provider, tc.value) + contents, diags := GenerateResourceContents(tc.addr, tc.schema, tc.provider, tc.value, false) if len(diags) > 0 { t.Errorf("expected no diagnostics but found %s", diags) } @@ -962,7 +962,8 @@ func TestGenerateResourceAndIDContents(t *testing.T) { // Check the generated content expectedContent := `resource "aws_instance" "example_0" { - name = "instance-1" + provider = aws + name = "instance-1" tags = { Environment = "Dev" Owner = "Team1" @@ -981,7 +982,8 @@ import { } resource "aws_instance" "example_1" { - name = "instance-2" + provider = aws + name = "instance-2" tags = { Environment = "Prod" Owner = "Team2" diff --git a/internal/terraform/context_plan_query_test.go b/internal/terraform/context_plan_query_test.go index e5a4a6e1ab..f35da6eef2 100644 --- a/internal/terraform/context_plan_query_test.go +++ b/internal/terraform/context_plan_query_test.go @@ -964,6 +964,7 @@ func getListProviderSchemaResp() *providers.GetProviderSchemaResponse { var ( testResourceCfg = `resource "test_resource" "test_0" { + provider = test instance_type = "ami-123456" } import { @@ -975,6 +976,7 @@ import { } resource "test_resource" "test_1" { + provider = test instance_type = "ami-654321" } import { @@ -986,6 +988,7 @@ import { } resource "test_resource" "test_2" { + provider = test instance_type = "ami-789012" } import { @@ -998,6 +1001,7 @@ import { ` testResourceCfg2 = `resource "test_resource" "test2_0" { + provider = test instance_type = "ami-123456" } import { @@ -1009,6 +1013,7 @@ import { } resource "test_resource" "test2_1" { + provider = test instance_type = "ami-654321" } import { @@ -1020,6 +1025,7 @@ import { } resource "test_resource" "test2_2" { + provider = test instance_type = "ami-789012" } import { diff --git a/internal/terraform/node_resource_plan_instance.go b/internal/terraform/node_resource_plan_instance.go index 930d87ae39..35ab016567 100644 --- a/internal/terraform/node_resource_plan_instance.go +++ b/internal/terraform/node_resource_plan_instance.go @@ -913,7 +913,7 @@ func (n *NodePlannableResourceInstance) generateHCLResourceDef(addr addrs.AbsRes switch addr.Resource.Resource.Mode { case addrs.ManagedResourceMode: - return genconfig.GenerateResourceContents(addr, filteredSchema, providerAddr, state) + return genconfig.GenerateResourceContents(addr, filteredSchema, providerAddr, state, false) case addrs.ListResourceMode: identitySchema := schema.Identity return genconfig.GenerateListResourceContents(addr, filteredSchema, identitySchema, providerAddr, state)