@@ -45,7 +45,7 @@ func GenerateResourceContents(addr addrs.AbsResourceInstance,
45
45
diags = diags .Append (writeConfigAttributes (addr , & buf , schema .Attributes , 2 ))
46
46
diags = diags .Append (writeConfigBlocks (addr , & buf , schema .BlockTypes , 2 ))
47
47
} else {
48
- diags = diags .Append (writeConfigAttributesFromExisting (addr , & buf , stateVal , schema .Attributes , 2 ))
48
+ diags = diags .Append (writeConfigAttributesFromExisting (addr , & buf , stateVal , schema .Attributes , 2 , optionalOrRequiredProcessor ))
49
49
diags = diags .Append (writeConfigBlocksFromExisting (addr , & buf , stateVal , schema .BlockTypes , 2 ))
50
50
}
51
51
@@ -71,7 +71,6 @@ func GenerateListResourceContents(addr addrs.AbsResourceInstance,
71
71
idSchema * configschema.Object ,
72
72
pc addrs.LocalProviderConfig ,
73
73
stateVal cty.Value ,
74
- id cty.Value ,
75
74
) (string , tfdiags.Diagnostics ) {
76
75
var buf strings.Builder
77
76
var diags tfdiags.Diagnostics
@@ -84,19 +83,9 @@ func GenerateListResourceContents(addr addrs.AbsResourceInstance,
84
83
})
85
84
return "" , diags
86
85
}
87
- if ! id .CanIterateElements () {
88
- diags = diags .Append (
89
- hcl.Diagnostic {
90
- Severity : hcl .DiagError ,
91
- Summary : "Invalid resource instance identity value" ,
92
- Detail : fmt .Sprintf ("Resource instance %s has nil or non-iterable identity value" , addr ),
93
- })
94
- return "" , diags
95
- }
96
86
97
87
iter := stateVal .ElementIterator ()
98
- idIter := id .ElementIterator ()
99
- for idx := 0 ; iter .Next () && idIter .Next (); idx ++ {
88
+ for idx := 0 ; iter .Next (); idx ++ {
100
89
// Generate a unique resource name for each instance in the list.
101
90
resAddr := addrs.AbsResourceInstance {
102
91
Module : addr .Module ,
@@ -110,7 +99,8 @@ func GenerateListResourceContents(addr addrs.AbsResourceInstance,
110
99
},
111
100
}
112
101
_ , val := iter .Element ()
113
- content , gDiags := GenerateResourceContents (resAddr , schema , pc , val )
102
+ stateVal := val .GetAttr ("state" )
103
+ content , gDiags := GenerateResourceContents (resAddr , schema , pc , stateVal )
114
104
if gDiags .HasErrors () {
115
105
diags = diags .Append (gDiags )
116
106
continue
@@ -119,7 +109,7 @@ func GenerateListResourceContents(addr addrs.AbsResourceInstance,
119
109
buf .WriteString (content )
120
110
buf .WriteString ("\n " )
121
111
122
- _ , idVal := idIter . Element ( )
112
+ idVal := val . GetAttr ( "identity" )
123
113
importContent , gDiags := generateImportBlock (resAddr , idSchema , pc , idVal )
124
114
if gDiags .HasErrors () {
125
115
diags = diags .Append (gDiags )
@@ -143,8 +133,8 @@ func generateImportBlock(addr addrs.AbsResourceInstance, idSchema *configschema.
143
133
buf .WriteString ("import {\n " )
144
134
buf .WriteString (fmt .Sprintf (" to = %s\n " , addr .String ()))
145
135
buf .WriteString (fmt .Sprintf (" provider = %s\n " , pc .StringCompact ()))
146
- buf .WriteString (fmt . Sprintf ( " identity = {\n " ) )
147
- diags = diags .Append (writeConfigAttributesFromExisting (addr , & buf , identity , idSchema .Attributes , 3 ))
136
+ buf .WriteString (" identity = {\n " )
137
+ diags = diags .Append (writeConfigAttributesFromExisting (addr , & buf , identity , idSchema .Attributes , 2 , allowAllAttributesProcessor ))
148
138
buf .WriteString (strings .Repeat (" " , 2 ))
149
139
buf .WriteString ("}\n }\n " )
150
140
@@ -199,7 +189,16 @@ func writeConfigAttributes(addr addrs.AbsResourceInstance, buf *strings.Builder,
199
189
return diags
200
190
}
201
191
202
- func writeConfigAttributesFromExisting (addr addrs.AbsResourceInstance , buf * strings.Builder , stateVal cty.Value , attrs map [string ]* configschema.Attribute , indent int ) tfdiags.Diagnostics {
192
+ func optionalOrRequiredProcessor (attr * configschema.Attribute ) bool {
193
+ // Exclude computed-only attributes
194
+ return attr .Optional || attr .Required
195
+ }
196
+
197
+ func allowAllAttributesProcessor (attr * configschema.Attribute ) bool {
198
+ return true
199
+ }
200
+
201
+ func writeConfigAttributesFromExisting (addr addrs.AbsResourceInstance , buf * strings.Builder , stateVal cty.Value , attrs map [string ]* configschema.Attribute , indent int , processAttr func (* configschema.Attribute ) bool ) tfdiags.Diagnostics {
203
202
var diags tfdiags.Diagnostics
204
203
if len (attrs ) == 0 {
205
204
return diags
@@ -213,8 +212,7 @@ func writeConfigAttributesFromExisting(addr addrs.AbsResourceInstance, buf *stri
213
212
continue
214
213
}
215
214
216
- // Exclude computed-only attributes
217
- if attrS .Required || attrS .Optional {
215
+ if processAttr != nil && processAttr (attrS ) {
218
216
buf .WriteString (strings .Repeat (" " , indent ))
219
217
buf .WriteString (fmt .Sprintf ("%s = " , name ))
220
218
@@ -414,6 +412,7 @@ func writeConfigBlocksFromExisting(addr addrs.AbsResourceInstance, buf *strings.
414
412
415
413
func writeConfigNestedTypeAttributeFromExisting (addr addrs.AbsResourceInstance , buf * strings.Builder , name string , schema * configschema.Attribute , stateVal cty.Value , indent int ) tfdiags.Diagnostics {
416
414
var diags tfdiags.Diagnostics
415
+ processor := optionalOrRequiredProcessor
417
416
418
417
switch schema .NestedType .Nesting {
419
418
case configschema .NestingSingle :
@@ -441,7 +440,7 @@ func writeConfigNestedTypeAttributeFromExisting(addr addrs.AbsResourceInstance,
441
440
442
441
buf .WriteString (strings .Repeat (" " , indent ))
443
442
buf .WriteString (fmt .Sprintf ("%s = {\n " , name ))
444
- diags = diags .Append (writeConfigAttributesFromExisting (addr , buf , nestedVal , schema .NestedType .Attributes , indent + 2 ))
443
+ diags = diags .Append (writeConfigAttributesFromExisting (addr , buf , nestedVal , schema .NestedType .Attributes , indent + 2 , processor ))
445
444
buf .WriteString ("}\n " )
446
445
return diags
447
446
@@ -473,7 +472,7 @@ func writeConfigNestedTypeAttributeFromExisting(addr addrs.AbsResourceInstance,
473
472
}
474
473
475
474
buf .WriteString ("{\n " )
476
- diags = diags .Append (writeConfigAttributesFromExisting (addr , buf , listVals [i ], schema .NestedType .Attributes , indent + 4 ))
475
+ diags = diags .Append (writeConfigAttributesFromExisting (addr , buf , listVals [i ], schema .NestedType .Attributes , indent + 4 , processor ))
477
476
buf .WriteString (strings .Repeat (" " , indent + 2 ))
478
477
buf .WriteString ("},\n " )
479
478
}
@@ -511,7 +510,7 @@ func writeConfigNestedTypeAttributeFromExisting(addr addrs.AbsResourceInstance,
511
510
}
512
511
513
512
buf .WriteString ("\n " )
514
- diags = diags .Append (writeConfigAttributesFromExisting (addr , buf , vals [key ], schema .NestedType .Attributes , indent + 4 ))
513
+ diags = diags .Append (writeConfigAttributesFromExisting (addr , buf , vals [key ], schema .NestedType .Attributes , indent + 4 , processor ))
515
514
buf .WriteString (strings .Repeat (" " , indent + 2 ))
516
515
buf .WriteString ("}\n " )
517
516
}
@@ -527,6 +526,7 @@ func writeConfigNestedTypeAttributeFromExisting(addr addrs.AbsResourceInstance,
527
526
528
527
func writeConfigNestedBlockFromExisting (addr addrs.AbsResourceInstance , buf * strings.Builder , name string , schema * configschema.NestedBlock , stateVal cty.Value , indent int ) tfdiags.Diagnostics {
529
528
var diags tfdiags.Diagnostics
529
+ processAttr := optionalOrRequiredProcessor
530
530
531
531
switch schema .Nesting {
532
532
case configschema .NestingSingle , configschema .NestingGroup :
@@ -542,7 +542,7 @@ func writeConfigNestedBlockFromExisting(addr addrs.AbsResourceInstance, buf *str
542
542
return diags
543
543
}
544
544
buf .WriteString ("\n " )
545
- diags = diags .Append (writeConfigAttributesFromExisting (addr , buf , stateVal , schema .Attributes , indent + 2 ))
545
+ diags = diags .Append (writeConfigAttributesFromExisting (addr , buf , stateVal , schema .Attributes , indent + 2 , processAttr ))
546
546
diags = diags .Append (writeConfigBlocksFromExisting (addr , buf , stateVal , schema .BlockTypes , indent + 2 ))
547
547
buf .WriteString ("}\n " )
548
548
return diags
@@ -556,7 +556,7 @@ func writeConfigNestedBlockFromExisting(addr addrs.AbsResourceInstance, buf *str
556
556
for i := range listVals {
557
557
buf .WriteString (strings .Repeat (" " , indent ))
558
558
buf .WriteString (fmt .Sprintf ("%s {\n " , name ))
559
- diags = diags .Append (writeConfigAttributesFromExisting (addr , buf , listVals [i ], schema .Attributes , indent + 2 ))
559
+ diags = diags .Append (writeConfigAttributesFromExisting (addr , buf , listVals [i ], schema .Attributes , indent + 2 , processAttr ))
560
560
diags = diags .Append (writeConfigBlocksFromExisting (addr , buf , listVals [i ], schema .BlockTypes , indent + 2 ))
561
561
buf .WriteString ("}\n " )
562
562
}
@@ -578,7 +578,7 @@ func writeConfigNestedBlockFromExisting(addr addrs.AbsResourceInstance, buf *str
578
578
return diags
579
579
}
580
580
buf .WriteString ("\n " )
581
- diags = diags .Append (writeConfigAttributesFromExisting (addr , buf , vals [key ], schema .Attributes , indent + 2 ))
581
+ diags = diags .Append (writeConfigAttributesFromExisting (addr , buf , vals [key ], schema .Attributes , indent + 2 , processAttr ))
582
582
diags = diags .Append (writeConfigBlocksFromExisting (addr , buf , vals [key ], schema .BlockTypes , indent + 2 ))
583
583
buf .WriteString (strings .Repeat (" " , indent ))
584
584
buf .WriteString ("}\n " )
0 commit comments