@@ -60,6 +60,66 @@ resource "aws_s3_bucket" "bar" {
60
60
}
61
61
}
62
62
63
+ func Test_WalkResourceBlocks (t * testing.T ) {
64
+ src := `
65
+ resource "aws_instance" "foo" {
66
+ ami = "ami-123456"
67
+ ebs_block_device {
68
+ volume_size = 16
69
+ }
70
+ }
71
+
72
+ resource "aws_s3_bucket" "bar" {
73
+ bucket = "my-tf-test-bucket"
74
+ acl = "private"
75
+ }`
76
+
77
+ runner := TestRunner (t , map [string ]string {"main.tf" : src })
78
+
79
+ walked := []* hcl.Block {}
80
+ walker := func (block * hcl.Block ) error {
81
+ walked = append (walked , block )
82
+ return nil
83
+ }
84
+
85
+ if err := runner .WalkResourceBlocks ("aws_instance" , "ebs_block_device" , walker ); err != nil {
86
+ t .Fatal (err )
87
+ }
88
+
89
+ expected := []* hcl.Block {
90
+ {
91
+ Type : "ebs_block_device" ,
92
+ Body : & hclsyntax.Body {
93
+ Attributes : hclsyntax.Attributes {
94
+ "volume_size" : {
95
+ Name : "volume_size" ,
96
+ Expr : & hclsyntax.LiteralValueExpr {
97
+ SrcRange : hcl.Range {Filename : "main.tf" , Start : hcl.Pos {Line : 5 , Column : 19 }, End : hcl.Pos {Line : 5 , Column : 21 }},
98
+ },
99
+ SrcRange : hcl.Range {Filename : "main.tf" , Start : hcl.Pos {Line : 5 , Column : 5 }, End : hcl.Pos {Line : 5 , Column : 21 }},
100
+ NameRange : hcl.Range {Filename : "main.tf" , Start : hcl.Pos {Line : 5 , Column : 5 }, End : hcl.Pos {Line : 5 , Column : 16 }},
101
+ EqualsRange : hcl.Range {Filename : "main.tf" , Start : hcl.Pos {Line : 5 , Column : 17 }, End : hcl.Pos {Line : 5 , Column : 18 }},
102
+ },
103
+ },
104
+ Blocks : hclsyntax.Blocks {},
105
+ SrcRange : hcl.Range {Filename : "main.tf" , Start : hcl.Pos {Line : 4 , Column : 20 }, End : hcl.Pos {Line : 6 , Column : 4 }},
106
+ EndRange : hcl.Range {Filename : "main.tf" , Start : hcl.Pos {Line : 6 , Column : 4 }, End : hcl.Pos {Line : 6 , Column : 4 }},
107
+ },
108
+ DefRange : hcl.Range {Filename : "main.tf" , Start : hcl.Pos {Line : 4 , Column : 3 }, End : hcl.Pos {Line : 4 , Column : 19 }},
109
+ TypeRange : hcl.Range {Filename : "main.tf" , Start : hcl.Pos {Line : 4 , Column : 3 }, End : hcl.Pos {Line : 4 , Column : 19 }},
110
+ },
111
+ }
112
+
113
+ opts := cmp.Options {
114
+ cmpopts .IgnoreFields (hclsyntax.LiteralValueExpr {}, "Val" ),
115
+ cmpopts .IgnoreFields (hcl.Pos {}, "Byte" ),
116
+ cmpopts .IgnoreUnexported (hclsyntax.Body {}),
117
+ }
118
+ if ! cmp .Equal (expected , walked , opts ... ) {
119
+ t .Fatalf ("Diff: %s" , cmp .Diff (expected , walked , opts ... ))
120
+ }
121
+ }
122
+
63
123
func Test_WalkResources (t * testing.T ) {
64
124
src := `
65
125
resource "aws_instance" "foo" {
@@ -144,12 +204,12 @@ resource "aws_s3_bucket" "bar" {
144
204
create_before_destroy = true
145
205
prevent_destroy = true
146
206
ignore_changes = all
147
- }` , "main.tf" ,
148
- hcl.Pos {Line : 3 , Column : 3 },
207
+ }` , "main.tf" ,
208
+ hcl.Pos {Line : 3 , Column : 3 },
149
209
hcl.Range {Filename : "main.tf" , Start : hcl.Pos {Line : 2 , Column : 31 }, End : hcl.Pos {Line : 31 , Column : 2 }},
150
210
hcl.Range {Filename : "main.tf" , Start : hcl.Pos {Line : 31 , Column : 2 }, End : hcl.Pos {Line : 31 , Column : 2 }},
151
211
),
152
- Count : parseExpression (t , `1` , "main.tf" , hcl.Pos {Line : 5 , Column : 11 }),
212
+ Count : parseExpression (t , `1` , "main.tf" , hcl.Pos {Line : 5 , Column : 11 }),
153
213
ForEach : parseExpression (t , `{
154
214
foo = "bar"
155
215
}` , "main.tf" , hcl.Pos {Line : 6 , Column : 14 }),
@@ -164,7 +224,7 @@ resource "aws_s3_bucket" "bar" {
164
224
Managed : & terraform.ManagedResource {
165
225
Connection : & terraform.Connection {
166
226
Config : parseBody (
167
- t ,
227
+ t ,
168
228
`type = "ssh"` ,
169
229
"main.tf" ,
170
230
hcl.Pos {Line : 13 , Column : 5 },
@@ -175,9 +235,9 @@ resource "aws_s3_bucket" "bar" {
175
235
},
176
236
Provisioners : []* terraform.Provisioner {
177
237
{
178
- Type : "local-exec" ,
238
+ Type : "local-exec" ,
179
239
Config : parseBody (
180
- t ,
240
+ t ,
181
241
`command = "chmod 600 ssh-key.pem"
182
242
when = destroy
183
243
on_failure = continue
@@ -192,7 +252,7 @@ resource "aws_s3_bucket" "bar" {
192
252
),
193
253
Connection : & terraform.Connection {
194
254
Config : parseBody (
195
- t ,
255
+ t ,
196
256
`type = "ssh"` ,
197
257
"main.tf" ,
198
258
hcl.Pos {Line : 22 , Column : 7 },
@@ -201,10 +261,10 @@ resource "aws_s3_bucket" "bar" {
201
261
),
202
262
DeclRange : hcl.Range {Filename : "main.tf" , Start : hcl.Pos {Line : 21 , Column : 5 }, End : hcl.Pos {Line : 21 , Column : 15 }},
203
263
},
204
- When : terraform .ProvisionerWhenDestroy ,
205
- OnFailure : terraform .ProvisionerOnFailureContinue ,
206
- DeclRange : hcl.Range {Filename : "main.tf" , Start : hcl.Pos {Line : 16 , Column : 3 }, End : hcl.Pos {Line : 16 , Column : 27 }},
207
- TypeRange : hcl.Range {Filename : "main.tf" , Start : hcl.Pos {Line : 16 , Column : 15 }, End : hcl.Pos {Line : 16 , Column : 27 }},
264
+ When : terraform .ProvisionerWhenDestroy ,
265
+ OnFailure : terraform .ProvisionerOnFailureContinue ,
266
+ DeclRange : hcl.Range {Filename : "main.tf" , Start : hcl.Pos {Line : 16 , Column : 3 }, End : hcl.Pos {Line : 16 , Column : 27 }},
267
+ TypeRange : hcl.Range {Filename : "main.tf" , Start : hcl.Pos {Line : 16 , Column : 15 }, End : hcl.Pos {Line : 16 , Column : 27 }},
208
268
},
209
269
},
210
270
0 commit comments