Skip to content

Commit 6fd2d20

Browse files
committed
adding support for imagebuilder LatestVersionReferences
1 parent 8f5c01c commit 6fd2d20

19 files changed

+328
-20
lines changed

.changelog/45366.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
```release-note:enhancement
2+
resource/aws_imagebuilder_component: Add latest version ARN attributes
3+
```
4+
5+
```release-note:enhancement
6+
resource/aws_imagebuilder_container_recipe: Add latest version ARN attributes
7+
```
8+
9+
```release-note:enhancement
10+
resource/aws_imagebuilder_image: Add latest version ARN attributes
11+
```
12+
13+
```release-note:enhancement
14+
resource/aws_imagebuilder_image_recipe: Add latest version ARN attributes
15+
```
16+
17+
```release-note:enhancement
18+
resource/aws_imagebuilder_workflow: Add latest version ARN attributes
19+
```

internal/service/imagebuilder/component.go

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,22 @@ func resourceComponent() *schema.Resource {
127127
ForceNew: true,
128128
ValidateFunc: validation.StringLenBetween(1, 128),
129129
},
130+
"latest_version_arn": {
131+
Type: schema.TypeString,
132+
Computed: true,
133+
},
134+
"latest_major_version_arn": {
135+
Type: schema.TypeString,
136+
Computed: true,
137+
},
138+
"latest_minor_version_arn": {
139+
Type: schema.TypeString,
140+
Computed: true,
141+
},
142+
"latest_patch_version_arn": {
143+
Type: schema.TypeString,
144+
Computed: true,
145+
},
130146
},
131147
}
132148
}
@@ -184,14 +200,21 @@ func resourceComponentCreate(ctx context.Context, d *schema.ResourceData, meta a
184200

185201
d.SetId(aws.ToString(output.ComponentBuildVersionArn))
186202

203+
if output.LatestVersionReferences != nil {
204+
d.Set("latest_version_arn", aws.ToString(output.LatestVersionReferences.LatestVersionArn))
205+
d.Set("latest_major_version_arn", aws.ToString(output.LatestVersionReferences.LatestMajorVersionArn))
206+
d.Set("latest_minor_version_arn", aws.ToString(output.LatestVersionReferences.LatestMinorVersionArn))
207+
d.Set("latest_patch_version_arn", aws.ToString(output.LatestVersionReferences.LatestPatchVersionArn))
208+
}
209+
187210
return append(diags, resourceComponentRead(ctx, d, meta)...)
188211
}
189212

190213
func resourceComponentRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
191214
var diags diag.Diagnostics
192215
conn := meta.(*conns.AWSClient).ImageBuilderClient(ctx)
193216

194-
component, err := findComponentByARN(ctx, conn, d.Id())
217+
output, err := findComponentByARN(ctx, conn, d.Id())
195218

196219
if !d.IsNewResource() && tfresource.NotFound(err) {
197220
log.Printf("[WARN] Image Builder Component (%s) not found, removing from state", d.Id())
@@ -203,6 +226,7 @@ func resourceComponentRead(ctx context.Context, d *schema.ResourceData, meta any
203226
return sdkdiag.AppendErrorf(diags, "reading Image Builder Component (%s): %s", d.Id(), err)
204227
}
205228

229+
component := output.Component
206230
d.Set(names.AttrARN, component.Arn)
207231
d.Set("change_description", component.ChangeDescription)
208232
d.Set("data", component.Data)
@@ -217,6 +241,13 @@ func resourceComponentRead(ctx context.Context, d *schema.ResourceData, meta any
217241
d.Set(names.AttrType, component.Type)
218242
d.Set(names.AttrVersion, component.Version)
219243

244+
if output.LatestVersionReferences != nil {
245+
d.Set("latest_version_arn", aws.ToString(output.LatestVersionReferences.LatestVersionArn))
246+
d.Set("latest_major_version_arn", aws.ToString(output.LatestVersionReferences.LatestMajorVersionArn))
247+
d.Set("latest_minor_version_arn", aws.ToString(output.LatestVersionReferences.LatestMinorVersionArn))
248+
d.Set("latest_patch_version_arn", aws.ToString(output.LatestVersionReferences.LatestPatchVersionArn))
249+
}
250+
220251
setTagsOut(ctx, component.Tags)
221252

222253
return diags
@@ -255,7 +286,7 @@ func resourceComponentDelete(ctx context.Context, d *schema.ResourceData, meta a
255286
return diags
256287
}
257288

258-
func findComponentByARN(ctx context.Context, conn *imagebuilder.Client, arn string) (*awstypes.Component, error) {
289+
func findComponentByARN(ctx context.Context, conn *imagebuilder.Client, arn string) (*imagebuilder.GetComponentOutput, error) {
259290
input := &imagebuilder.GetComponentInput{
260291
ComponentBuildVersionArn: aws.String(arn),
261292
}
@@ -277,5 +308,5 @@ func findComponentByARN(ctx context.Context, conn *imagebuilder.Client, arn stri
277308
return nil, tfresource.NewEmptyResultError(input)
278309
}
279310

280-
return output.Component, nil
311+
return output, nil
281312
}

internal/service/imagebuilder/component_data_source.go

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,22 @@ func dataSourceComponent() *schema.Resource {
7878
Type: schema.TypeString,
7979
Computed: true,
8080
},
81+
"latest_version_arn": {
82+
Type: schema.TypeString,
83+
Computed: true,
84+
},
85+
"latest_major_version_arn": {
86+
Type: schema.TypeString,
87+
Computed: true,
88+
},
89+
"latest_minor_version_arn": {
90+
Type: schema.TypeString,
91+
Computed: true,
92+
},
93+
"latest_patch_version_arn": {
94+
Type: schema.TypeString,
95+
Computed: true,
96+
},
8197
},
8298
}
8399
}
@@ -87,12 +103,13 @@ func dataSourceComponentRead(ctx context.Context, d *schema.ResourceData, meta a
87103
conn := meta.(*conns.AWSClient).ImageBuilderClient(ctx)
88104

89105
arn := d.Get(names.AttrARN).(string)
90-
component, err := findComponentByARN(ctx, conn, arn)
106+
output, err := findComponentByARN(ctx, conn, arn)
91107

92108
if err != nil {
93109
return sdkdiag.AppendErrorf(diags, "reading Image Builder Component (%s): %s", arn, err)
94110
}
95111

112+
component := output.Component
96113
arn = aws.ToString(component.Arn)
97114
d.SetId(arn)
98115
d.Set(names.AttrARN, arn)
@@ -109,6 +126,13 @@ func dataSourceComponentRead(ctx context.Context, d *schema.ResourceData, meta a
109126
d.Set(names.AttrType, component.Type)
110127
d.Set(names.AttrVersion, component.Version)
111128

129+
if output.LatestVersionReferences != nil {
130+
d.Set("latest_version_arn", aws.ToString(output.LatestVersionReferences.LatestVersionArn))
131+
d.Set("latest_major_version_arn", aws.ToString(output.LatestVersionReferences.LatestMajorVersionArn))
132+
d.Set("latest_minor_version_arn", aws.ToString(output.LatestVersionReferences.LatestMinorVersionArn))
133+
d.Set("latest_patch_version_arn", aws.ToString(output.LatestVersionReferences.LatestPatchVersionArn))
134+
}
135+
112136
setTagsOut(ctx, component.Tags)
113137

114138
return diags

internal/service/imagebuilder/component_data_source_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ func TestAccImageBuilderComponentDataSource_arn(t *testing.T) {
4141
resource.TestCheckResourceAttrPair(dataSourceName, acctest.CtTagsPercent, resourceName, acctest.CtTagsPercent),
4242
resource.TestCheckResourceAttrPair(dataSourceName, names.AttrType, resourceName, names.AttrType),
4343
resource.TestCheckResourceAttrPair(dataSourceName, names.AttrVersion, resourceName, names.AttrVersion),
44+
resource.TestCheckResourceAttrSet(dataSourceName, "latest_version_arn"),
45+
resource.TestCheckResourceAttrSet(dataSourceName, "latest_major_version_arn"),
46+
resource.TestCheckResourceAttrSet(dataSourceName, "latest_minor_version_arn"),
47+
resource.TestCheckResourceAttrSet(dataSourceName, "latest_patch_version_arn"),
4448
),
4549
},
4650
},

internal/service/imagebuilder/component_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ func TestAccImageBuilderComponent_basic(t *testing.T) {
4949
resource.TestCheckResourceAttr(resourceName, acctest.CtTagsPercent, "0"),
5050
resource.TestCheckResourceAttr(resourceName, names.AttrType, string(awstypes.ComponentTypeBuild)),
5151
resource.TestCheckResourceAttr(resourceName, names.AttrVersion, "1.0.0"),
52+
resource.TestCheckResourceAttrSet(resourceName, "latest_version_arn"),
53+
resource.TestCheckResourceAttrSet(resourceName, "latest_major_version_arn"),
54+
resource.TestCheckResourceAttrSet(resourceName, "latest_minor_version_arn"),
55+
resource.TestCheckResourceAttrSet(resourceName, "latest_patch_version_arn"),
5256
),
5357
},
5458
{

internal/service/imagebuilder/container_recipe.go

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,22 @@ func resourceContainerRecipe() *schema.Resource {
287287
ForceNew: true,
288288
ValidateFunc: validation.StringLenBetween(1, 1024),
289289
},
290+
"latest_version_arn": {
291+
Type: schema.TypeString,
292+
Computed: true,
293+
},
294+
"latest_major_version_arn": {
295+
Type: schema.TypeString,
296+
Computed: true,
297+
},
298+
"latest_minor_version_arn": {
299+
Type: schema.TypeString,
300+
Computed: true,
301+
},
302+
"latest_patch_version_arn": {
303+
Type: schema.TypeString,
304+
Computed: true,
305+
},
290306
},
291307
}
292308
}
@@ -360,14 +376,21 @@ func resourceContainerRecipeCreate(ctx context.Context, d *schema.ResourceData,
360376

361377
d.SetId(aws.ToString(output.ContainerRecipeArn))
362378

379+
if output.LatestVersionReferences != nil {
380+
d.Set("latest_version_arn", aws.ToString(output.LatestVersionReferences.LatestVersionArn))
381+
d.Set("latest_major_version_arn", aws.ToString(output.LatestVersionReferences.LatestMajorVersionArn))
382+
d.Set("latest_minor_version_arn", aws.ToString(output.LatestVersionReferences.LatestMinorVersionArn))
383+
d.Set("latest_patch_version_arn", aws.ToString(output.LatestVersionReferences.LatestPatchVersionArn))
384+
}
385+
363386
return append(diags, resourceContainerRecipeRead(ctx, d, meta)...)
364387
}
365388

366389
func resourceContainerRecipeRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
367390
var diags diag.Diagnostics
368391
conn := meta.(*conns.AWSClient).ImageBuilderClient(ctx)
369392

370-
containerRecipe, err := findContainerRecipeByARN(ctx, conn, d.Id())
393+
output, err := findContainerRecipeByARN(ctx, conn, d.Id())
371394

372395
if !d.IsNewResource() && tfresource.NotFound(err) {
373396
log.Printf("[WARN] Image Builder Container Recipe (%s) not found, removing from state", d.Id())
@@ -379,6 +402,8 @@ func resourceContainerRecipeRead(ctx context.Context, d *schema.ResourceData, me
379402
return sdkdiag.AppendErrorf(diags, "reading Image Builder Container Recipe (%s): %s", d.Id(), err)
380403
}
381404

405+
containerRecipe := output.ContainerRecipe
406+
382407
d.Set(names.AttrARN, containerRecipe.Arn)
383408
if err := d.Set("component", flattenComponentConfigurations(containerRecipe.Components)); err != nil {
384409
return sdkdiag.AppendErrorf(diags, "setting component: %s", err)
@@ -406,6 +431,13 @@ func resourceContainerRecipeRead(ctx context.Context, d *schema.ResourceData, me
406431
d.Set(names.AttrVersion, containerRecipe.Version)
407432
d.Set("working_directory", containerRecipe.WorkingDirectory)
408433

434+
if output.LatestVersionReferences != nil {
435+
d.Set("latest_version_arn", aws.ToString(output.LatestVersionReferences.LatestVersionArn))
436+
d.Set("latest_major_version_arn", aws.ToString(output.LatestVersionReferences.LatestMajorVersionArn))
437+
d.Set("latest_minor_version_arn", aws.ToString(output.LatestVersionReferences.LatestMinorVersionArn))
438+
d.Set("latest_patch_version_arn", aws.ToString(output.LatestVersionReferences.LatestPatchVersionArn))
439+
}
440+
409441
setTagsOut(ctx, containerRecipe.Tags)
410442

411443
return diags
@@ -439,7 +471,7 @@ func resourceContainerRecipeDelete(ctx context.Context, d *schema.ResourceData,
439471
return diags
440472
}
441473

442-
func findContainerRecipeByARN(ctx context.Context, conn *imagebuilder.Client, arn string) (*awstypes.ContainerRecipe, error) {
474+
func findContainerRecipeByARN(ctx context.Context, conn *imagebuilder.Client, arn string) (*imagebuilder.GetContainerRecipeOutput, error) {
443475
input := &imagebuilder.GetContainerRecipeInput{
444476
ContainerRecipeArn: aws.String(arn),
445477
}
@@ -461,7 +493,7 @@ func findContainerRecipeByARN(ctx context.Context, conn *imagebuilder.Client, ar
461493
return nil, tfresource.NewEmptyResultError(input)
462494
}
463495

464-
return output.ContainerRecipe, nil
496+
return output, nil
465497
}
466498

467499
func expandInstanceConfiguration(tfMap map[string]any) *awstypes.InstanceConfiguration {

internal/service/imagebuilder/container_recipe_data_source.go

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,22 @@ func dataSourceContainerRecipe() *schema.Resource {
152152
Type: schema.TypeString,
153153
Computed: true,
154154
},
155+
"latest_version_arn": {
156+
Type: schema.TypeString,
157+
Computed: true,
158+
},
159+
"latest_major_version_arn": {
160+
Type: schema.TypeString,
161+
Computed: true,
162+
},
163+
"latest_minor_version_arn": {
164+
Type: schema.TypeString,
165+
Computed: true,
166+
},
167+
"latest_patch_version_arn": {
168+
Type: schema.TypeString,
169+
Computed: true,
170+
},
155171
names.AttrName: {
156172
Type: schema.TypeString,
157173
Computed: true,
@@ -202,12 +218,13 @@ func dataSourceContainerRecipeRead(ctx context.Context, d *schema.ResourceData,
202218
conn := meta.(*conns.AWSClient).ImageBuilderClient(ctx)
203219

204220
arn := d.Get(names.AttrARN).(string)
205-
containerRecipe, err := findContainerRecipeByARN(ctx, conn, arn)
221+
output, err := findContainerRecipeByARN(ctx, conn, arn)
206222

207223
if err != nil {
208224
return sdkdiag.AppendErrorf(diags, "reading Image Builder Container Recipe (%s): %s", arn, err)
209225
}
210226

227+
containerRecipe := output.ContainerRecipe
211228
arn = aws.ToString(containerRecipe.Arn)
212229
d.SetId(arn)
213230
d.Set(names.AttrARN, arn)
@@ -227,6 +244,12 @@ func dataSourceContainerRecipeRead(ctx context.Context, d *schema.ResourceData,
227244
d.Set("instance_configuration", nil)
228245
}
229246
d.Set(names.AttrKMSKeyID, containerRecipe.KmsKeyId)
247+
if output.LatestVersionReferences != nil {
248+
d.Set("latest_version_arn", aws.ToString(output.LatestVersionReferences.LatestVersionArn))
249+
d.Set("latest_major_version_arn", aws.ToString(output.LatestVersionReferences.LatestMajorVersionArn))
250+
d.Set("latest_minor_version_arn", aws.ToString(output.LatestVersionReferences.LatestMinorVersionArn))
251+
d.Set("latest_patch_version_arn", aws.ToString(output.LatestVersionReferences.LatestPatchVersionArn))
252+
}
230253
d.Set(names.AttrName, containerRecipe.Name)
231254
d.Set(names.AttrOwner, containerRecipe.Owner)
232255
d.Set("parent_image", containerRecipe.ParentImage)

internal/service/imagebuilder/container_recipe_data_source_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ func TestAccImageBuilderContainerRecipeDataSource_arn(t *testing.T) {
3939
resource.TestCheckResourceAttrPair(dataSourceName, names.AttrEncrypted, resourceName, names.AttrEncrypted),
4040
resource.TestCheckResourceAttrPair(dataSourceName, "instance_configuration.#", resourceName, "instance_configuration.#"),
4141
resource.TestCheckResourceAttrPair(dataSourceName, names.AttrKMSKeyID, resourceName, names.AttrKMSKeyID),
42+
resource.TestCheckResourceAttrSet(dataSourceName, "latest_version_arn"),
43+
resource.TestCheckResourceAttrSet(dataSourceName, "latest_major_version_arn"),
44+
resource.TestCheckResourceAttrSet(dataSourceName, "latest_minor_version_arn"),
45+
resource.TestCheckResourceAttrSet(dataSourceName, "latest_patch_version_arn"),
4246
resource.TestCheckResourceAttrPair(dataSourceName, names.AttrName, resourceName, names.AttrName),
4347
resource.TestCheckResourceAttrPair(dataSourceName, names.AttrOwner, resourceName, names.AttrOwner),
4448
resource.TestCheckResourceAttrPair(dataSourceName, "parent_image", resourceName, "parent_image"),

internal/service/imagebuilder/container_recipe_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ func TestAccImageBuilderContainerRecipe_basic(t *testing.T) {
4646
resource.TestCheckResourceAttr(resourceName, names.AttrEncrypted, acctest.CtTrue),
4747
resource.TestCheckResourceAttr(resourceName, "instance_configuration.#", "0"),
4848
resource.TestCheckResourceAttr(resourceName, names.AttrKMSKeyID, ""),
49+
resource.TestCheckResourceAttrSet(resourceName, "latest_version_arn"),
50+
resource.TestCheckResourceAttrSet(resourceName, "latest_major_version_arn"),
51+
resource.TestCheckResourceAttrSet(resourceName, "latest_minor_version_arn"),
52+
resource.TestCheckResourceAttrSet(resourceName, "latest_patch_version_arn"),
4953
resource.TestCheckResourceAttr(resourceName, names.AttrName, rName),
5054
acctest.CheckResourceAttrAccountID(ctx, resourceName, names.AttrOwner),
5155
acctest.CheckResourceAttrRegionalARNAccountID(resourceName, "parent_image", "imagebuilder", "aws", "image/amazon-linux-x86-2/x.x.x"),

0 commit comments

Comments
 (0)