@@ -3042,6 +3042,10 @@ func (me *VpcService) describeEnis(
30423042 return tccommon .RetryError (err )
30433043 }
30443044
3045+ if response == nil && response .Response == nil && response .Response .NetworkInterfaceSet == nil {
3046+ return resource .NonRetryableError (fmt .Errorf ("Read eni list failed, Response is nil." ))
3047+ }
3048+
30453049 eniSet := response .Response .NetworkInterfaceSet
30463050 count = len (eniSet )
30473051 enis = append (enis , eniSet ... )
@@ -3295,24 +3299,36 @@ func (me *VpcService) AttachEniToCvm(ctx context.Context, eniId, cvmId string) e
32953299 client := me .client .UseVpcClient ()
32963300
32973301 attachRequest := vpc .NewAttachNetworkInterfaceRequest ()
3302+ attachResponse := vpc .NewAttachNetworkInterfaceResponse ()
32983303 attachRequest .NetworkInterfaceId = & eniId
32993304 attachRequest .InstanceId = & cvmId
33003305
33013306 if err := resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
33023307 ratelimit .Check (attachRequest .GetAction ())
3303-
3304- if _ , err := client . AttachNetworkInterface ( attachRequest ); err != nil {
3308+ result , err := client . AttachNetworkInterface ( attachRequest )
3309+ if err != nil {
33053310 log .Printf ("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]" ,
33063311 logId , attachRequest .GetAction (), attachRequest .ToJsonString (), err )
33073312 return tccommon .RetryError (err )
33083313 }
33093314
3315+ if result == nil || result .Response == nil || result .Response .RequestId == nil {
3316+ return resource .NonRetryableError (fmt .Errorf ("Attach eni to instance failed, Response is nil." ))
3317+ }
3318+
3319+ attachResponse = result
33103320 return nil
33113321 }); err != nil {
33123322 log .Printf ("[CRITAL]%s attach eni to instance failed, reason: %v" , logId , err )
33133323 return err
33143324 }
33153325
3326+ // wait
3327+ err := me .DescribeVpcTaskResult (ctx , attachResponse .Response .RequestId )
3328+ if err != nil {
3329+ return err
3330+ }
3331+
33163332 describeRequest := vpc .NewDescribeNetworkInterfacesRequest ()
33173333 describeRequest .NetworkInterfaceIds = []* string {& eniId }
33183334
@@ -3390,13 +3406,14 @@ func (me *VpcService) DetachEniFromCvm(ctx context.Context, eniId, cvmId string)
33903406 client := me .client .UseVpcClient ()
33913407
33923408 request := vpc .NewDetachNetworkInterfaceRequest ()
3409+ response := vpc .NewDetachNetworkInterfaceResponse ()
33933410 request .NetworkInterfaceId = & eniId
33943411 request .InstanceId = & cvmId
33953412
33963413 if err := resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
33973414 ratelimit .Check (request .GetAction ())
3398-
3399- if _ , err := client . DetachNetworkInterface ( request ); err != nil {
3415+ result , err := client . DetachNetworkInterface ( request )
3416+ if err != nil {
34003417 if sdkError , ok := err .(* sdkErrors.TencentCloudSDKError ); ok {
34013418 switch sdkError .Code {
34023419 case "UnsupportedOperation.InvalidState" :
@@ -3413,12 +3430,23 @@ func (me *VpcService) DetachEniFromCvm(ctx context.Context, eniId, cvmId string)
34133430 return tccommon .RetryError (err )
34143431 }
34153432
3433+ if result == nil || result .Response == nil || result .Response .RequestId == nil {
3434+ return resource .NonRetryableError (fmt .Errorf ("Detach eni from instance failed, Response is nil." ))
3435+ }
3436+
3437+ response = result
34163438 return nil
34173439 }); err != nil {
34183440 log .Printf ("[CRITAL]%s detach eni from instance failed, reason: %v" , logId , err )
34193441 return err
34203442 }
34213443
3444+ // wait
3445+ err := me .DescribeVpcTaskResult (ctx , response .Response .RequestId )
3446+ if err != nil {
3447+ return err
3448+ }
3449+
34223450 if err := waitEniDetach (ctx , eniId , client ); err != nil {
34233451 log .Printf ("[CRITAL]%s detach eni from instance failed, reason: %v" , logId , err )
34243452 return err
@@ -5001,29 +5029,33 @@ func (me *VpcService) DescribeVpnGatewayRoutes(ctx context.Context, vpnGatewayId
50015029}
50025030
50035031func (me * VpcService ) DescribeVpcTaskResult (ctx context.Context , taskId * string ) (err error ) {
5004-
50055032 logId := tccommon .GetLogId (ctx )
50065033 request := vpc .NewDescribeVpcTaskResultRequest ()
50075034 defer func () {
50085035 if err != nil {
50095036 log .Printf ("[CRITAL]%s api[%s] fail,reason[%s]" , logId , request .GetAction (), err .Error ())
50105037 }
50115038 }()
5039+
50125040 request .TaskId = taskId
50135041 err = resource .Retry (tccommon .ReadRetryTimeout , func () * resource.RetryError {
50145042 ratelimit .Check (request .GetAction ())
50155043 response , err := me .client .UseVpcClient ().DescribeVpcTaskResult (request )
50165044 if err != nil {
50175045 return tccommon .RetryError (err )
50185046 }
5047+
50195048 if response .Response .Status != nil && * response .Response .Status == VPN_TASK_STATUS_RUNNING {
50205049 return resource .RetryableError (errors .New ("VPN task is running" ))
50215050 }
5051+
50225052 return nil
50235053 })
5054+
50245055 if err != nil {
50255056 return err
50265057 }
5058+
50275059 return
50285060}
50295061
0 commit comments