@@ -60,6 +60,10 @@ func resourceAliCloudKmsInstance() *schema.Resource {
6060 Type : schema .TypeString ,
6161 Computed : true ,
6262 },
63+ "deletion_protection" : {
64+ Type : schema .TypeBool ,
65+ Optional : true ,
66+ },
6367 "end_date" : {
6468 Type : schema .TypeString ,
6569 Computed : true ,
@@ -282,7 +286,7 @@ func resourceAliCloudKmsInstanceCreate(d *schema.ResourceData, meta interface{})
282286 }
283287 request ["SubscriptionType" ] = "Subscription"
284288 if v , ok := d .GetOk ("payment_type" ); ok {
285- request ["SubscriptionType" ] = convertKmsInstanceSubscriptionTypeRequest ( v .(string ) )
289+ request ["SubscriptionType" ] = v .(string )
286290 }
287291 var endpoint string
288292 request ["ProductCode" ] = "kms"
@@ -299,7 +303,7 @@ func resourceAliCloudKmsInstanceCreate(d *schema.ResourceData, meta interface{})
299303 request ["ProductType" ] = "kms_ppi_public_intl"
300304 }
301305 }
302- wait := incrementalWait (3 * time .Second , 5 * time .Second )
306+ wait := incrementalWait (5 * time .Second , 5 * time .Second )
303307 err = resource .Retry (d .Timeout (schema .TimeoutCreate ), func () * resource.RetryError {
304308 response , err = client .RpcPostWithEndpoint ("BssOpenApi" , "2017-12-14" , action , query , request , true , endpoint )
305309 if err != nil {
@@ -360,7 +364,7 @@ func resourceAliCloudKmsInstanceCreate(d *schema.ResourceData, meta interface{})
360364 request ["VSwitchIds" ] = convertListToCommaSeparate (convertToInterfaceArray (vswitchIdsJsonPath ))
361365 }
362366
363- wait = incrementalWait (3 * time .Second , 5 * time .Second )
367+ wait = incrementalWait (5 * time .Second , 5 * time .Second )
364368 err = resource .Retry (d .Timeout (schema .TimeoutCreate ), func () * resource.RetryError {
365369 response , err = client .RpcPost ("Kms" , "2016-01-20" , action , query , request , true )
366370 if err != nil {
@@ -405,6 +409,7 @@ func resourceAliCloudKmsInstanceRead(d *schema.ResourceData, meta interface{}) e
405409
406410 d .Set ("ca_certificate_chain_pem" , objectRaw ["CaCertificateChainPem" ])
407411 d .Set ("create_time" , objectRaw ["CreateTime" ])
412+ d .Set ("deletion_protection" , objectRaw ["DeletionProtection" ])
408413 d .Set ("end_date" , objectRaw ["EndDate" ])
409414 d .Set ("instance_name" , objectRaw ["InstanceName" ])
410415 d .Set ("key_num" , objectRaw ["KeyNum" ])
@@ -438,18 +443,18 @@ func resourceAliCloudKmsInstanceRead(d *schema.ResourceData, meta interface{}) e
438443 return err
439444 }
440445
441- vswitchIds := make ([]interface {}, 0 )
446+ vswitchIdsRaw := make ([]interface {}, 0 )
442447 if objectRaw ["VswitchIds" ] != nil {
443- vswitchIds = objectRaw ["VswitchIds" ].([] interface {} )
448+ vswitchIdsRaw = convertToInterfaceArray ( objectRaw ["VswitchIds" ])
444449 }
445450
446- d .Set ("vswitch_ids" , vswitchIds )
447-
448- zoneIds := make ([]interface {}, 0 )
451+ d .Set ("vswitch_ids" , vswitchIdsRaw )
452+ zoneIdsRaw := make ([]interface {}, 0 )
449453 if objectRaw ["ZoneIds" ] != nil {
450- zoneIds = objectRaw ["ZoneIds" ].([] interface {} )
454+ zoneIdsRaw = convertToInterfaceArray ( objectRaw ["ZoneIds" ])
451455 }
452- d .Set ("zone_ids" , zoneIds )
456+
457+ d .Set ("zone_ids" , zoneIdsRaw )
453458
454459 objectRaw , err = kmsServiceV2 .DescribeInstanceQueryAvailableInstances (d )
455460 if err != nil && ! NotFoundError (err ) {
@@ -487,34 +492,68 @@ func resourceAliCloudKmsInstanceUpdate(d *schema.ResourceData, meta interface{})
487492 request ["InstanceId" ] = d .Id ()
488493
489494 request ["ClientToken" ] = buildClientToken (action )
490- if ! d .IsNewResource () && d .HasChanges ("vpc_num" , "spec" , "secret_num" , "key_num" , "log" , "log_storage" , "product_version" ) {
495+
496+ parameterMapList := make ([]map [string ]interface {}, 0 )
497+
498+ if ! d .IsNewResource () && d .HasChange ("vpc_num" ) {
491499 update = true
500+
501+ if v , ok := d .GetOk ("vpc_num" ); ok {
502+ parameterMapList = append (parameterMapList , map [string ]interface {}{
503+ "Code" : "VpcNum" ,
504+ "Value" : fmt .Sprint (v ),
505+ })
506+ }
492507 }
493- parameterMapList := make ([]map [string ]interface {}, 0 )
494- if v , ok := d .GetOk ("vpc_num" ); ok {
495- parameterMapList = append (parameterMapList , map [string ]interface {}{
496- "Code" : "VpcNum" ,
497- "Value" : fmt .Sprint (v ),
498- })
508+
509+ if ! d .IsNewResource () && d .HasChange ("spec" ) {
510+ update = true
511+
512+ if v , ok := d .GetOk ("spec" ); ok {
513+ parameterMapList = append (parameterMapList , map [string ]interface {}{
514+ "Code" : "Spec" ,
515+ "Value" : fmt .Sprint (v ),
516+ })
517+ }
499518 }
500- if v , ok := d .GetOk ("spec" ); ok {
501- parameterMapList = append (parameterMapList , map [string ]interface {}{
502- "Code" : "Spec" ,
503- "Value" : fmt .Sprint (v ),
504- })
519+
520+ if ! d .IsNewResource () && d .HasChange ("secret_num" ) {
521+ update = true
522+
523+ if v , ok := d .GetOk ("secret_num" ); ok {
524+ parameterMapList = append (parameterMapList , map [string ]interface {}{
525+ "Code" : "SecretNum" ,
526+ "Value" : fmt .Sprint (v ),
527+ })
528+ }
505529 }
506- if v , ok := d .GetOk ("secret_num" ); ok {
507- parameterMapList = append (parameterMapList , map [string ]interface {}{
508- "Code" : "SecretNum" ,
509- "Value" : fmt .Sprint (v ),
510- })
530+
531+ if ! d .IsNewResource () && d .HasChange ("key_num" ) {
532+ update = true
533+
534+ if v , ok := d .GetOk ("key_num" ); ok {
535+ parameterMapList = append (parameterMapList , map [string ]interface {}{
536+ "Code" : "KeyNum" ,
537+ "Value" : fmt .Sprint (v ),
538+ })
539+ }
511540 }
512- if v , ok := d .GetOk ("key_num" ); ok {
513- parameterMapList = append (parameterMapList , map [string ]interface {}{
514- "Code" : "KeyNum" ,
515- "Value" : fmt .Sprint (v ),
516- })
541+
542+ if ! d .IsNewResource () && d .HasChange ("product_version" ) {
543+ update = true
544+
545+ if v , ok := d .GetOk ("product_version" ); ok {
546+ parameterMapList = append (parameterMapList , map [string ]interface {}{
547+ "Code" : "ProductVersion" ,
548+ "Value" : v ,
549+ })
550+ }
517551 }
552+
553+ if ! d .IsNewResource () && d .HasChanges ("log" , "log_storage" ) {
554+ update = true
555+ }
556+
518557 if v , ok := d .GetOk ("log" ); ok {
519558 parameterMapList = append (parameterMapList , map [string ]interface {}{
520559 "Code" : "Log" ,
@@ -527,12 +566,6 @@ func resourceAliCloudKmsInstanceUpdate(d *schema.ResourceData, meta interface{})
527566 "Value" : fmt .Sprint (v ),
528567 })
529568 }
530- if v , ok := d .GetOk ("product_version" ); ok {
531- parameterMapList = append (parameterMapList , map [string ]interface {}{
532- "Code" : "ProductVersion" ,
533- "Value" : v ,
534- })
535- }
536569 request ["Parameter" ] = parameterMapList
537570
538571 if ! d .IsNewResource () && d .HasChange ("payment_type" ) {
@@ -556,7 +589,7 @@ func resourceAliCloudKmsInstanceUpdate(d *schema.ResourceData, meta interface{})
556589 }
557590 }
558591 if update {
559- wait := incrementalWait (3 * time .Second , 5 * time .Second )
592+ wait := incrementalWait (5 * time .Second , 5 * time .Second )
560593 err = resource .Retry (d .Timeout (schema .TimeoutUpdate ), func () * resource.RetryError {
561594 response , err = client .RpcPostWithEndpoint ("BssOpenApi" , "2017-12-14" , action , query , request , true , endpoint )
562595 if err != nil {
@@ -621,7 +654,7 @@ func resourceAliCloudKmsInstanceUpdate(d *schema.ResourceData, meta interface{})
621654 }
622655
623656 if update {
624- wait := incrementalWait (3 * time .Second , 5 * time .Second )
657+ wait := incrementalWait (3 * time .Second , 0 * time .Second )
625658 err = resource .Retry (d .Timeout (schema .TimeoutUpdate ), func () * resource.RetryError {
626659 response , err = client .RpcGet ("Kms" , "2016-01-20" , action , query , request )
627660 if err != nil {
@@ -650,7 +683,7 @@ func resourceAliCloudKmsInstanceUpdate(d *schema.ResourceData, meta interface{})
650683 }
651684
652685 if update {
653- wait := incrementalWait (3 * time .Second , 5 * time .Second )
686+ wait := incrementalWait (3 * time .Second , 0 * time .Second )
654687 err = resource .Retry (d .Timeout (schema .TimeoutUpdate ), func () * resource.RetryError {
655688 response , err = client .RpcPost ("Kms" , "2016-01-20" , action , query , request , true )
656689 if err != nil {
@@ -705,7 +738,7 @@ func resourceAliCloudKmsInstanceUpdate(d *schema.ResourceData, meta interface{})
705738 }
706739 }
707740 if update {
708- wait := incrementalWait (3 * time .Second , 5 * time .Second )
741+ wait := incrementalWait (3 * time .Second , 0 * time .Second )
709742 err = resource .Retry (d .Timeout (schema .TimeoutUpdate ), func () * resource.RetryError {
710743 response , err = client .RpcPostWithEndpoint ("BssOpenApi" , "2017-12-14" , action , query , request , true , endpoint )
711744 if err != nil {
@@ -732,6 +765,37 @@ func resourceAliCloudKmsInstanceUpdate(d *schema.ResourceData, meta interface{})
732765 return WrapErrorf (err , DefaultErrorMsg , d .Id (), action , AlibabaCloudSdkGoERROR )
733766 }
734767 }
768+ update = false
769+ action = "SetDeletionProtection"
770+ request = make (map [string ]interface {})
771+ query = make (map [string ]interface {})
772+ request ["KmsInstanceId" ] = d .Id ()
773+
774+ if d .HasChange ("deletion_protection" ) {
775+ update = true
776+
777+ if v , ok := d .GetOkExists ("deletion_protection" ); ok {
778+ request ["EnableDeletionProtection" ] = v
779+ }
780+ }
781+ if update {
782+ wait := incrementalWait (3 * time .Second , 0 * time .Second )
783+ err = resource .Retry (d .Timeout (schema .TimeoutUpdate ), func () * resource.RetryError {
784+ response , err = client .RpcPost ("Kms" , "2016-01-20" , action , query , request , true )
785+ if err != nil {
786+ if NeedRetry (err ) {
787+ wait ()
788+ return resource .RetryableError (err )
789+ }
790+ return resource .NonRetryableError (err )
791+ }
792+ return nil
793+ })
794+ addDebug (action , response , request )
795+ if err != nil {
796+ return WrapErrorf (err , DefaultErrorMsg , d .Id (), action , AlibabaCloudSdkGoERROR )
797+ }
798+ }
735799
736800 if d .HasChange ("tags" ) {
737801 kmsServiceV2 := KmsServiceV2 {client }
@@ -871,9 +935,3 @@ func convertKmsInstanceKmsInstanceChargeTypeResponse(source interface{}) interfa
871935 }
872936 return source
873937}
874- func convertKmsInstanceSubscriptionTypeRequest (source interface {}) interface {} {
875- source = fmt .Sprint (source )
876- switch source {
877- }
878- return source
879- }
0 commit comments