@@ -455,51 +455,25 @@ func resourceTencentCloudClbServerAttachmentRead(d *schema.ResourceData, meta in
455455 } else if instance .Targets != nil {
456456 onlineTargets = instance .Targets
457457 }
458-
459- //this may cause problems when there are members in two dimensions array
460- //need to read state of the tfstate file to clear the relationships
461- //in this situation, import action is not supported
462- // TL,DR: just update partial targets which this resource declared.
463- stateTargets := d .Get ("targets" ).(* schema.Set )
464- if stateTargets .Len () != 0 {
465- //the old state exist
466- //create a new attachment with state
467- exactTargets := make ([]interface {}, 0 )
468- for i := range onlineTargets {
469- v := onlineTargets [i ]
470- if * v .Type == "CVM" && v .InstanceId != nil {
471- target := map [string ]interface {}{
472- "weight" : int (* v .Weight ),
473- "port" : int (* v .Port ),
474- "instance_id" : * v .InstanceId ,
475- }
476- if stateTargets .Contains (target ) {
477- exactTargets = append (exactTargets , map [string ]interface {}{
478- "weight" : int (* v .Weight ),
479- "port" : int (* v .Port ),
480- "instance_id" : * v .InstanceId ,
481- })
482- }
483-
484- } else if len (v .PrivateIpAddresses ) > 0 && * v .PrivateIpAddresses [0 ] != "" {
485- target := map [string ]interface {}{
486- "weight" : int (* v .Weight ),
487- "port" : int (* v .Port ),
488- "eni_ip" : * v .PrivateIpAddresses [0 ],
489- }
490- if stateTargets .Contains (target ) {
491- exactTargets = append (exactTargets , map [string ]interface {}{
492- "weight" : int (* v .Weight ),
493- "port" : int (* v .Port ),
494- "eni_ip" : * v .PrivateIpAddresses [0 ],
495- })
496- }
458+ targets := make ([]interface {}, 0 )
459+ for _ , onlineTarget := range onlineTargets {
460+ if * onlineTarget .Type == CLB_BACKEND_TYPE_CVM {
461+ target := map [string ]interface {}{
462+ "weight" : int (* onlineTarget .Weight ),
463+ "port" : int (* onlineTarget .Port ),
464+ "instance_id" : * onlineTarget .InstanceId ,
497465 }
466+ targets = append (targets , target )
467+ } else if * onlineTarget .Type == CLB_BACKEND_TYPE_ENI {
468+ target := map [string ]interface {}{
469+ "weight" : int (* onlineTarget .Weight ),
470+ "port" : int (* onlineTarget .Port ),
471+ "eni_ip" : * onlineTarget .PrivateIpAddresses [0 ],
472+ }
473+ targets = append (targets , target )
498474 }
499- _ = d .Set ("targets" , exactTargets )
500- } else {
501- _ = d .Set ("targets" , flattenBackendList (onlineTargets ))
502475 }
476+ _ = d .Set ("targets" , targets )
503477
504478 return nil
505479}
@@ -508,11 +482,15 @@ func resourceTencentCloudClbServerAttachmentRead(d *schema.ResourceData, meta in
508482// If remove diffs created, check existing cvm instance first, filter target groups which already deregister
509483func getRemoveCandidates (ctx context.Context , clbService ClbService , clbId string , listenerId string , locationId string , remove []interface {}) []interface {} {
510484 removeCandidates := make ([]interface {}, 0 )
511- existAttachments , err := clbService .DescribeAttachmentByPara (ctx , clbId , listenerId , locationId )
485+ listenerBackend , err := clbService .DescribeAttachmentByPara (ctx , clbId , listenerId , locationId )
512486 if err != nil {
513487 return removeCandidates
514488 }
515- existTargetGroups := existAttachments .Targets
489+ existTargetGroups := make ([]* clb.Backend , 0 )
490+ existTargetGroups = append (existTargetGroups , listenerBackend .Targets ... )
491+ if len (listenerBackend .Rules ) > 0 {
492+ existTargetGroups = append (existTargetGroups , listenerBackend .Rules [0 ].Targets ... )
493+ }
516494
517495 for _ , item := range remove {
518496 target := item .(map [string ]interface {})
@@ -551,7 +529,7 @@ func targetGroupContainsEni(targets []*clb.Backend, eniIp interface{}) (contains
551529 return
552530 }
553531 for _ , target := range targets {
554- if len (target .PrivateIpAddresses ) > 0 && target .PrivateIpAddresses [0 ] ! = nil {
532+ if len (target .PrivateIpAddresses ) == 0 || target .PrivateIpAddresses [0 ] = = nil {
555533 continue
556534 }
557535 if ip == * target .PrivateIpAddresses [0 ] {
0 commit comments