@@ -5,17 +5,15 @@ package odb
55import (
66 "context"
77 "errors"
8- "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator"
9- "github.com/hashicorp/terraform-plugin-framework/attr"
10- "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id"
11- "github.com/hashicorp/terraform-provider-aws/internal/enum"
12- tftags "github.com/hashicorp/terraform-provider-aws/internal/tags"
138 "time"
149
1510 "github.com/aws/aws-sdk-go-v2/aws"
1611 "github.com/aws/aws-sdk-go-v2/service/odb"
1712 odbtypes "github.com/aws/aws-sdk-go-v2/service/odb/types"
1813 "github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts"
14+ "github.com/hashicorp/terraform-plugin-framework-timetypes/timetypes"
15+ "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator"
16+ "github.com/hashicorp/terraform-plugin-framework/attr"
1917 "github.com/hashicorp/terraform-plugin-framework/path"
2018 "github.com/hashicorp/terraform-plugin-framework/resource"
2119 "github.com/hashicorp/terraform-plugin-framework/resource/schema"
@@ -26,13 +24,15 @@ import (
2624 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
2725 "github.com/hashicorp/terraform-provider-aws/internal/conns"
2826 "github.com/hashicorp/terraform-provider-aws/internal/create"
27+ "github.com/hashicorp/terraform-provider-aws/internal/enum"
2928 "github.com/hashicorp/terraform-provider-aws/internal/errs"
3029 "github.com/hashicorp/terraform-provider-aws/internal/errs/fwdiag"
3130 "github.com/hashicorp/terraform-provider-aws/internal/framework"
3231 "github.com/hashicorp/terraform-provider-aws/internal/framework/flex"
3332 fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types"
3433 "github.com/hashicorp/terraform-provider-aws/internal/sweep"
3534 sweepfw "github.com/hashicorp/terraform-provider-aws/internal/sweep/framework"
35+ tftags "github.com/hashicorp/terraform-provider-aws/internal/tags"
3636 "github.com/hashicorp/terraform-provider-aws/internal/tfresource"
3737 "github.com/hashicorp/terraform-provider-aws/names"
3838)
@@ -200,49 +200,13 @@ func (r *resourceNetwork) Schema(ctx context.Context, req resource.SchemaRequest
200200 },
201201 "created_at" : schema.StringAttribute {
202202 Computed : true ,
203+ CustomType : timetypes.RFC3339Type {},
203204 Description : "The date and time when the ODB network was created." ,
204205 },
205- "managed_services" : schema.ObjectAttribute {
206+ "managed_services" : schema.ListAttribute {
206207 Computed : true ,
207- CustomType : fwtypes.NewObjectTypeOf [odbNetworkManagedServicesResourceModel ](ctx ),
208+ CustomType : fwtypes.NewListNestedObjectTypeOf [odbNetworkManagedServicesResourceModel ](ctx ),
208209 Description : "The managed services configuration for the ODB network." ,
209- AttributeTypes : map [string ]attr.Type {
210- "service_network_arn" : types .StringType ,
211- "resource_gateway_arn" : types .StringType ,
212- "managed_service_ipv4_cidrs" : types.SetType {
213- ElemType : types .StringType ,
214- },
215- "service_network_endpoint" : types.ObjectType {
216- AttrTypes : map [string ]attr.Type {
217- "vpc_endpoint_id" : types .StringType ,
218- "vpc_endpoint_type" : fwtypes .StringEnumType [odbtypes.VpcEndpointType ](),
219- },
220- },
221- "managed_s3_backup_access" : types.ObjectType {
222- AttrTypes : map [string ]attr.Type {
223- "status" : fwtypes .StringEnumType [odbtypes.ManagedResourceStatus ](),
224- "ipv4_addresses" : types.SetType {
225- ElemType : types .StringType ,
226- },
227- },
228- },
229- "zero_tl_access" : types.ObjectType {
230- AttrTypes : map [string ]attr.Type {
231- "status" : fwtypes .StringEnumType [odbtypes.ManagedResourceStatus ](),
232- "cidr" : types .StringType ,
233- },
234- },
235- "s3_access" : types.ObjectType {
236- AttrTypes : map [string ]attr.Type {
237- "status" : fwtypes .StringEnumType [odbtypes.ManagedResourceStatus ](),
238- "ipv4_addresses" : types.SetType {
239- ElemType : types .StringType ,
240- },
241- "domain_name" : types .StringType ,
242- "s3_policy_document" : types .StringType ,
243- },
244- },
245- },
246210 },
247211 names .AttrTags : tftags .TagsAttribute (),
248212 names .AttrTagsAll : tftags .TagsAttributeComputedOnly (),
@@ -267,8 +231,7 @@ func (r *resourceNetwork) Create(ctx context.Context, req resource.CreateRequest
267231 }
268232
269233 input := odb.CreateOdbNetworkInput {
270- ClientToken : aws .String (id .UniqueId ()),
271- Tags : getTagsIn (ctx ),
234+ Tags : getTagsIn (ctx ),
272235 }
273236
274237 resp .Diagnostics .Append (flex .Expand (ctx , plan , & input )... )
@@ -302,7 +265,7 @@ func (r *resourceNetwork) Create(ctx context.Context, req resource.CreateRequest
302265 }
303266 //set zero etl access
304267 if plan .ZeroEtlAccess .ValueEnum () == odbtypes .AccessEnabled {
305- _ , err = waitManagedServiceEnabled (ctx , conn , * createdOdbNetwork .OdbNetworkId , managedServiceTimeout , func (managedService * odbtypes.ManagedServices ) odbtypes.ManagedResourceStatus {
268+ createdOdbNetwork , err = waitManagedServiceEnabled (ctx , conn , * createdOdbNetwork .OdbNetworkId , managedServiceTimeout , func (managedService * odbtypes.ManagedServices ) odbtypes.ManagedResourceStatus {
306269 return managedService .ZeroEtlAccess .Status
307270 })
308271 if err != nil {
@@ -312,10 +275,8 @@ func (r *resourceNetwork) Create(ctx context.Context, req resource.CreateRequest
312275 )
313276 return
314277 }
315- plan .ZeroEtlAccess = fwtypes .StringEnumValue (odbtypes .AccessEnabled )
316-
317278 } else if plan .ZeroEtlAccess .ValueEnum () == odbtypes .AccessDisabled {
318- _ , err = waitManagedServiceDisabled (ctx , conn , * createdOdbNetwork .OdbNetworkId , managedServiceTimeout , func (managedService * odbtypes.ManagedServices ) odbtypes.ManagedResourceStatus {
279+ createdOdbNetwork , err = waitManagedServiceDisabled (ctx , conn , * createdOdbNetwork .OdbNetworkId , managedServiceTimeout , func (managedService * odbtypes.ManagedServices ) odbtypes.ManagedResourceStatus {
319280 return managedService .ZeroEtlAccess .Status
320281 })
321282 if err != nil {
@@ -325,12 +286,10 @@ func (r *resourceNetwork) Create(ctx context.Context, req resource.CreateRequest
325286 )
326287 return
327288 }
328- plan .ZeroEtlAccess = fwtypes .StringEnumValue (odbtypes .AccessDisabled )
329289 }
330-
331290 //set s3 access
332291 if plan .S3Access .ValueEnum () == odbtypes .AccessEnabled {
333- _ , err = waitManagedServiceEnabled (ctx , conn , * createdOdbNetwork .OdbNetworkId , managedServiceTimeout , func (managedService * odbtypes.ManagedServices ) odbtypes.ManagedResourceStatus {
292+ createdOdbNetwork , err = waitManagedServiceEnabled (ctx , conn , * createdOdbNetwork .OdbNetworkId , managedServiceTimeout , func (managedService * odbtypes.ManagedServices ) odbtypes.ManagedResourceStatus {
334293 return managedService .S3Access .Status
335294 })
336295 if err != nil {
@@ -340,10 +299,8 @@ func (r *resourceNetwork) Create(ctx context.Context, req resource.CreateRequest
340299 )
341300 return
342301 }
343- plan .S3Access = fwtypes .StringEnumValue (odbtypes .AccessEnabled )
344-
345302 } else if plan .S3Access .ValueEnum () == odbtypes .AccessDisabled {
346- _ , err = waitManagedServiceDisabled (ctx , conn , * createdOdbNetwork .OdbNetworkId , managedServiceTimeout , func (managedService * odbtypes.ManagedServices ) odbtypes.ManagedResourceStatus {
303+ createdOdbNetwork , err = waitManagedServiceDisabled (ctx , conn , * createdOdbNetwork .OdbNetworkId , managedServiceTimeout , func (managedService * odbtypes.ManagedServices ) odbtypes.ManagedResourceStatus {
347304 return managedService .S3Access .Status
348305 })
349306 if err != nil {
@@ -353,17 +310,12 @@ func (r *resourceNetwork) Create(ctx context.Context, req resource.CreateRequest
353310 )
354311 return
355312 }
356- plan .S3Access = fwtypes .StringEnumValue (odbtypes .AccessDisabled )
357313 }
358314
359- plan .S3PolicyDocument = types .StringPointerValue (createdOdbNetwork .ManagedServices .S3Access .S3PolicyDocument )
360- plan .CreatedAt = types .StringValue (createdOdbNetwork .CreatedAt .Format (time .RFC3339 ))
361-
362315 resp .Diagnostics .Append (flex .Flatten (ctx , createdOdbNetwork , & plan )... )
363316 if resp .Diagnostics .HasError () {
364317 return
365318 }
366-
367319 resp .Diagnostics .Append (resp .State .Set (ctx , plan )... )
368320
369321}
@@ -390,36 +342,13 @@ func (r *resourceNetwork) Read(ctx context.Context, req resource.ReadRequest, re
390342 )
391343 return
392344 }
393- if out .ManagedServices != nil {
394-
395- readS3AccessStatus , err := managedServiceStatusToAccessStatus (out .ManagedServices .S3Access .Status )
396- if err != nil {
397- resp .Diagnostics .AddError (
398- create .ProblemStandardMessage (names .ODB , create .ErrActionReading , ResNameNetwork , state .OdbNetworkId .String (), err ),
399- err .Error (),
400- )
401- return
402- }
403- state .S3Access = fwtypes .StringEnumValue (readS3AccessStatus )
404- state .S3PolicyDocument = types .StringPointerValue (out .ManagedServices .S3Access .S3PolicyDocument )
405-
406- readZeroEtlAccessStatus , err := managedServiceStatusToAccessStatus (out .ManagedServices .ZeroEtlAccess .Status )
407- if err != nil {
408- resp .Diagnostics .AddError (
409- create .ProblemStandardMessage (names .ODB , create .ErrActionReading , ResNameNetwork , state .OdbNetworkId .String (), err ),
410- err .Error (),
411- )
412- return
413- }
414- state .ZeroEtlAccess = fwtypes .StringEnumValue (readZeroEtlAccessStatus )
415- } else {
345+ if out .ManagedServices == nil {
416346 resp .Diagnostics .AddError (
417347 create .ProblemStandardMessage (names .ODB , create .ErrActionReading , ResNameNetwork , state .OdbNetworkId .String (), errors .New ("odbNetwork managed service not found" )),
418348 "Odb Network managed service cannot be nil" ,
419349 )
420350 return
421351 }
422- state .CreatedAt = types .StringValue (out .CreatedAt .Format (time .RFC3339 ))
423352 resp .Diagnostics .Append (flex .Flatten (ctx , out , & state )... )
424353 if resp .Diagnostics .HasError () {
425354 return
@@ -441,29 +370,22 @@ func (r *resourceNetwork) Update(ctx context.Context, req resource.UpdateRequest
441370 isUpdateRequired := false
442371 var input odb.UpdateOdbNetworkInput
443372
444- if ! plan .DisplayName .Equal (state .DisplayName ) {
373+ if ! plan .DisplayName .Equal (state .DisplayName ) { //TODO display name change : create new
445374 isUpdateRequired = true
446375 input .DisplayName = plan .DisplayName .ValueStringPointer ()
447376 }
448377
449378 if ! plan .S3Access .Equal (state .S3Access ) {
450379 isUpdateRequired = true
451- input .S3Access = plan .S3Access .ValueEnum ()
452380 }
453-
454381 if ! plan .ZeroEtlAccess .Equal (state .ZeroEtlAccess ) {
455382 isUpdateRequired = true
456- input .ZeroEtlAccess = plan .ZeroEtlAccess .ValueEnum ()
457383 }
458384 if ! plan .S3PolicyDocument .Equal (state .S3PolicyDocument ) {
459385 isUpdateRequired = true
460- if ! plan .S3PolicyDocument .IsNull () || ! plan .S3PolicyDocument .IsUnknown () {
461- input .S3PolicyDocument = plan .S3PolicyDocument .ValueStringPointer ()
462- }
463386 }
464387 if isUpdateRequired {
465- input .OdbNetworkId = state .OdbNetworkId .ValueStringPointer ()
466-
388+ resp .Diagnostics .Append (flex .Expand (ctx , plan , & input )... )
467389 out , err := conn .UpdateOdbNetwork (ctx , & input )
468390 if err != nil {
469391 resp .Diagnostics .AddError (
@@ -492,7 +414,7 @@ func (r *resourceNetwork) Update(ctx context.Context, req resource.UpdateRequest
492414 }
493415
494416 if plan .S3Access .ValueEnum () == odbtypes .AccessEnabled {
495- _ , err = waitManagedServiceEnabled (ctx , conn , plan .OdbNetworkId .ValueString (), managedServiceTimeout , func (managedService * odbtypes.ManagedServices ) odbtypes.ManagedResourceStatus {
417+ updatedOdbNwk , err = waitManagedServiceEnabled (ctx , conn , plan .OdbNetworkId .ValueString (), managedServiceTimeout , func (managedService * odbtypes.ManagedServices ) odbtypes.ManagedResourceStatus {
496418 return managedService .S3Access .Status
497419 })
498420 if err != nil {
@@ -502,10 +424,9 @@ func (r *resourceNetwork) Update(ctx context.Context, req resource.UpdateRequest
502424 )
503425 return
504426 }
505- plan .S3Access = fwtypes .StringEnumValue (odbtypes .AccessEnabled )
506427
507428 } else if plan .S3Access .ValueEnum () == odbtypes .AccessDisabled {
508- _ , err = waitManagedServiceDisabled (ctx , conn , plan .OdbNetworkId .ValueString (), managedServiceTimeout , func (managedService * odbtypes.ManagedServices ) odbtypes.ManagedResourceStatus {
429+ updatedOdbNwk , err = waitManagedServiceDisabled (ctx , conn , plan .OdbNetworkId .ValueString (), managedServiceTimeout , func (managedService * odbtypes.ManagedServices ) odbtypes.ManagedResourceStatus {
509430 return managedService .S3Access .Status
510431 })
511432 if err != nil {
@@ -515,11 +436,10 @@ func (r *resourceNetwork) Update(ctx context.Context, req resource.UpdateRequest
515436 )
516437 return
517438 }
518- plan .S3Access = fwtypes .StringEnumValue (odbtypes .AccessDisabled )
519439 }
520440
521441 if plan .ZeroEtlAccess .ValueEnum () == odbtypes .AccessEnabled {
522- _ , err = waitManagedServiceEnabled (ctx , conn , plan .OdbNetworkId .ValueString (), managedServiceTimeout , func (managedService * odbtypes.ManagedServices ) odbtypes.ManagedResourceStatus {
442+ updatedOdbNwk , err = waitManagedServiceEnabled (ctx , conn , plan .OdbNetworkId .ValueString (), managedServiceTimeout , func (managedService * odbtypes.ManagedServices ) odbtypes.ManagedResourceStatus {
523443 return managedService .ZeroEtlAccess .Status
524444 })
525445 if err != nil {
@@ -529,10 +449,9 @@ func (r *resourceNetwork) Update(ctx context.Context, req resource.UpdateRequest
529449 )
530450 return
531451 }
532- plan .ZeroEtlAccess = fwtypes .StringEnumValue (odbtypes .AccessEnabled )
533452
534453 } else if plan .ZeroEtlAccess .ValueEnum () == odbtypes .AccessDisabled {
535- _ , err = waitManagedServiceDisabled (ctx , conn , plan .OdbNetworkId .ValueString (), managedServiceTimeout , func (managedService * odbtypes.ManagedServices ) odbtypes.ManagedResourceStatus {
454+ updatedOdbNwk , err = waitManagedServiceDisabled (ctx , conn , plan .OdbNetworkId .ValueString (), managedServiceTimeout , func (managedService * odbtypes.ManagedServices ) odbtypes.ManagedResourceStatus {
536455 return managedService .ZeroEtlAccess .Status
537456 })
538457 if err != nil {
@@ -542,18 +461,13 @@ func (r *resourceNetwork) Update(ctx context.Context, req resource.UpdateRequest
542461 )
543462 return
544463 }
545- plan .ZeroEtlAccess = fwtypes .StringEnumValue (odbtypes .AccessDisabled )
546464 }
547- plan .S3PolicyDocument = types .StringPointerValue (updatedOdbNwk .ManagedServices .S3Access .S3PolicyDocument )
548- plan .CreatedAt = types .StringValue (updatedOdbNwk .CreatedAt .Format (time .RFC3339 ))
549-
550465 resp .Diagnostics .Append (flex .Flatten (ctx , updatedOdbNwk , & plan )... )
551466 resp .Diagnostics .Append (resp .State .Set (ctx , & plan )... )
552467}
553468
554469func (r * resourceNetwork ) Delete (ctx context.Context , req resource.DeleteRequest , resp * resource.DeleteResponse ) {
555470 conn := r .Meta ().ODBClient (ctx )
556-
557471 var state odbNetworkResourceModel
558472 resp .Diagnostics .Append (req .State .Get (ctx , & state )... )
559473 if resp .Diagnostics .HasError () {
@@ -611,16 +525,6 @@ func waitNetworkCreated(ctx context.Context, conn *odb.Client, id string, timeou
611525 return nil , err
612526}
613527
614- func managedServiceStatusToAccessStatus (mangedStatus odbtypes.ManagedResourceStatus ) (odbtypes.Access , error ) {
615- if mangedStatus == odbtypes .ManagedResourceStatusDisabled {
616- return odbtypes .AccessDisabled , nil
617- }
618- if mangedStatus == odbtypes .ManagedResourceStatusEnabled {
619- return odbtypes .AccessEnabled , nil
620- }
621- return "" , errors .New ("can not convert managed status to access status" )
622- }
623-
624528func waitManagedServiceEnabled (ctx context.Context , conn * odb.Client , id string , timeout time.Duration , managedResourceStatus func (managedService * odbtypes.ManagedServices ) odbtypes.ManagedResourceStatus ) (* odbtypes.OdbNetwork , error ) {
625529 stateConf := & retry.StateChangeConf {
626530 Pending : enum .Slice (odbtypes .ManagedResourceStatusEnabling ),
@@ -786,8 +690,8 @@ type odbNetworkResourceModel struct {
786690 Status fwtypes.StringEnum [odbtypes.ResourceStatus ] `tfsdk:"status"`
787691 StatusReason types.String `tfsdk:"status_reason"`
788692 Timeouts timeouts.Value `tfsdk:"timeouts"`
789- ManagedServices fwtypes.ObjectValueOf [odbNetworkManagedServicesResourceModel ] `tfsdk:"managed_services"`
790- CreatedAt types. String `tfsdk:"created_at" autoflex:",noflatten "`
693+ ManagedServices fwtypes.ListNestedObjectValueOf [odbNetworkManagedServicesResourceModel ] `tfsdk:"managed_services"`
694+ CreatedAt timetypes. RFC3339 `tfsdk:"created_at"`
791695 Tags tftags.Map `tfsdk:"tags"`
792696 TagsAll tftags.Map `tfsdk:"tags_all"`
793697}
0 commit comments