@@ -256,16 +256,18 @@ func LaunchInstances(ads []identity.AvailabilityDomain) (sum, num int32) {
256256 SUCCESS = true
257257 num ++ //成功个数+1
258258
259- printf ("\033 [1;32m[%s] 第 %d 个实例创建成功, 实例名称: %s\033 [0m\n " , providerName , pos + 1 , * createResp .Instance .DisplayName )
260- if EACH {
261- sendMessage (providerName , "创建成功,实例名称: " + * createResp .DisplayName )
259+ // 获取实例公共IP
260+ ips , err := getInstancePublicIps (ctx , computeClient , networkClient , createResp .Instance .Id )
261+ var strIps string
262+ if err != nil {
263+ strIps = err .Error ()
264+ } else {
265+ strIps = strings .Join (ips , "," )
262266 }
263267
264- ips := getInstancePublicIps (ctx , computeClient , networkClient , createResp .Instance .Id )
265- strIps := strings .Join (ips , "," )
266- printf ("\033 [1;32m[%s] 实例名称: %s, IP: %s\033 [0m\n " , providerName , * createResp .Instance .DisplayName , strIps )
268+ printf ("\033 [1;32m[%s] 第 %d 个实例创建成功. 实例名称: %s, 公网IP: %s\033 [0m\n " , providerName , pos + 1 , * createResp .Instance .DisplayName , strIps )
267269 if EACH {
268- sendMessage (providerName , "实例名称: " + * createResp .DisplayName + ", IP: " + strIps )
270+ sendMessage (providerName , fmt . Sprintf ( "第 %d 个实例创建成功 \n 实例名称: %s \n 公网IP: %s" , pos + 1 , * createResp .Instance . DisplayName , strIps ) )
269271 }
270272
271273 sleepRandomSecond (minTime , maxTime )
@@ -282,34 +284,39 @@ func LaunchInstances(ads []identity.AvailabilityDomain) (sum, num int32) {
282284 SKIP_RETRY := false
283285
284286 //isRetryable := common.IsErrorRetryableByDefault(err)
285- //fmt.Println("IsErrorRetryableByDefault", isRetryable)
286- isNetErr := common .IsNetworkError (err )
287+ //isNetErr := common.IsNetworkError(err)
287288 servErr , isServErr := common .IsServiceError (err )
288- if isNetErr || (isServErr && (servErr .GetHTTPStatusCode () == 409 || servErr .GetHTTPStatusCode () == 429 || (500 <= servErr .GetHTTPStatusCode () && servErr .GetHTTPStatusCode () < 505 ))) {
289- // 可重试
289+
290+ // API Errors: https://docs.cloud.oracle.com/Content/API/References/apierrors.htm
291+
292+ if isServErr && (400 <= servErr .GetHTTPStatusCode () && servErr .GetHTTPStatusCode () <= 405 ) ||
293+ (servErr .GetHTTPStatusCode () == 409 && ! strings .EqualFold (servErr .GetCode (), "IncorrectState" )) ||
294+ servErr .GetHTTPStatusCode () == 412 || servErr .GetHTTPStatusCode () == 413 || servErr .GetHTTPStatusCode () == 422 ||
295+ servErr .GetHTTPStatusCode () == 431 || servErr .GetHTTPStatusCode () == 501 {
296+ // 不可重试
290297 if isServErr {
291298 errInfo = servErr .GetMessage ()
292299 }
293- printf ("\033 [1;31m[%s] 第 %d 个实例创建失败, Error: \033 [0m%s\n " , providerName , pos + 1 , errInfo )
300+ printf ("\033 [1;31m[%s] 创建失败, Error: \033 [0m%s\n " , providerName , errInfo )
301+ if EACH {
302+ sendMessage (providerName , "创建失败,Error: " + errInfo )
303+ }
294304
295- SKIP_RETRY = false
305+ SKIP_RETRY = true
296306 if AD_NOT_FIXED && ! EACH_AD {
297- SKIP_RETRY_MAP [adIndex - 1 ] = false
307+ SKIP_RETRY_MAP [adIndex - 1 ] = true
298308 }
299309
300310 } else {
301- // 无需重试
311+ // 可重试
302312 if isServErr {
303313 errInfo = servErr .GetMessage ()
304314 }
305- printf ("\033 [1;31m[%s] 第 %d 个实例创建失败, Error: \033 [0m%s\n " , providerName , pos + 1 , errInfo )
306- if EACH {
307- sendMessage (providerName , "创建失败,Error: " + errInfo )
308- }
315+ printf ("\033 [1;31m[%s] 创建失败, Error: \033 [0m%s\n " , providerName , errInfo )
309316
310- SKIP_RETRY = true
317+ SKIP_RETRY = false
311318 if AD_NOT_FIXED && ! EACH_AD {
312- SKIP_RETRY_MAP [adIndex - 1 ] = true
319+ SKIP_RETRY_MAP [adIndex - 1 ] = false
313320 }
314321 }
315322
@@ -918,7 +925,9 @@ func ListInstances(ctx context.Context, c core.ComputeClient) []core.Instance {
918925
919926func ListVnicAttachments (ctx context.Context , c core.ComputeClient , instanceId * string ) ([]core.VnicAttachment , error ) {
920927 compartmentID , err := provider .TenancyOCID ()
921- helpers .FatalIfError (err )
928+ if err != nil {
929+ return nil , err
930+ }
922931 req := core.ListVnicAttachmentsRequest {CompartmentId : & compartmentID }
923932 if instanceId != nil && * instanceId != "" {
924933 req .InstanceId = instanceId
@@ -1068,19 +1077,16 @@ func printf(format string, a ...interface{}) {
10681077}
10691078
10701079// 根据实例OCID获取公共IP
1071- func getInstancePublicIps (ctx context.Context , computeClient core.ComputeClient , networkClient core.VirtualNetworkClient , instanceId * string ) (ips []string ) {
1072- var err error
1073- var vnicAttachments []core.VnicAttachment
1074- var vnic core.Vnic
1075- vnicAttachments , err = ListVnicAttachments (ctx , computeClient , instanceId )
1076- if err != nil {
1077- printf ("ListVnicAttachments error: %s\n " , err .Error ())
1080+ func getInstancePublicIps (ctx context.Context , computeClient core.ComputeClient , networkClient core.VirtualNetworkClient , instanceId * string ) (ips []string , err error ) {
1081+ vnicAttachments , attachmentsErr := ListVnicAttachments (ctx , computeClient , instanceId )
1082+ if attachmentsErr != nil {
1083+ err = errors .New ("获取失败" )
10781084 return
10791085 }
10801086 for _ , vnicAttachment := range vnicAttachments {
1081- vnic , err = GetVnic (ctx , networkClient , vnicAttachment .VnicId )
1082- if err != nil {
1083- printf ("GetVnic error: %s\n " , err .Error ())
1087+ vnic , vnicErr : = GetVnic (ctx , networkClient , vnicAttachment .VnicId )
1088+ if vnicErr != nil {
1089+ printf ("GetVnic error: %s\n " , vnicErr .Error ())
10841090 continue
10851091 }
10861092 ips = append (ips , * vnic .PublicIp )
0 commit comments