Skip to content

Commit 4b50a85

Browse files
committed
修复未知错误导致的终止
1 parent 02206d5 commit 4b50a85

File tree

1 file changed

+38
-32
lines changed

1 file changed

+38
-32
lines changed

main.go

Lines changed: 38 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -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

919926
func 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

Comments
 (0)