in pkg/provider/alibaba/alb/listener.go [24:109]
func (m *ALBProvider) CreateALBListener(ctx context.Context, resLS *albmodel.Listener) (albmodel.ListenerStatus, error) {
traceID := ctx.Value(util.TraceID)
createLsReq, err := buildSDKCreateListenerRequest(resLS.Spec)
if err != nil {
return albmodel.ListenerStatus{}, err
}
var createLsResp *albsdk.CreateListenerResponse
if err := util.RetryImmediateOnError(m.waitLSExistencePollInterval, m.waitLSExistenceTimeout, isIncorrectStatusLoadBalancerError, func() error {
startTime := time.Now()
m.logger.V(util.MgrLogLevel).Info("creating listener",
"stackID", resLS.Stack().StackID(),
"resourceID", resLS.ID(),
"traceID", traceID,
"listenerPort", resLS.Spec.ListenerPort,
"listenerProtocol", resLS.Spec.ListenerProtocol,
"startTime", startTime,
util.Action, util.CreateALBListener)
createLsResp, err = m.auth.ALB.CreateListener(createLsReq)
if err != nil {
m.logger.V(util.MgrLogLevel).Info("creating listener",
"stackID", resLS.Stack().StackID(),
"resourceID", resLS.ID(),
"traceID", traceID,
"listenerID", createLsResp.ListenerId,
"requestID", createLsResp.RequestId,
"error", err.Error(),
util.Action, util.CreateALBListener)
return err
}
m.logger.V(util.MgrLogLevel).Info("created listener",
"stackID", resLS.Stack().StackID(),
"resourceID", resLS.ID(),
"traceID", traceID,
"listenerID", createLsResp.ListenerId,
"requestID", createLsResp.RequestId,
"elapsedTime", time.Since(startTime).Milliseconds(),
util.Action, util.CreateALBListener)
return nil
}); err != nil {
return albmodel.ListenerStatus{}, errors.Wrap(err, "failed to create listener")
}
asynchronousStartTime := time.Now()
m.logger.V(util.MgrLogLevel).Info("creating listener asynchronous",
"stackID", resLS.Stack().StackID(),
"resourceID", resLS.ID(),
"traceID", traceID,
"listenerID", createLsResp.ListenerId,
"startTime", asynchronousStartTime,
util.Action, util.CreateALBListenerAsynchronous)
var getLsResp *albsdk.GetListenerAttributeResponse
for i := 0; i < util.CreateListenerWaitRunningMaxRetryTimes; i++ {
time.Sleep(util.CreateListenerWaitRunningRetryInterval)
getLsResp, err = getALBListenerAttributeFunc(ctx, createLsResp.ListenerId, m.auth, m.logger)
if err != nil {
return albmodel.ListenerStatus{}, err
}
if isListenerListenerStatusRunning(getLsResp.ListenerStatus) {
break
}
}
m.logger.V(util.MgrLogLevel).Info("created listener asynchronous",
"stackID", resLS.Stack().StackID(),
"resourceID", resLS.ID(),
"traceID", traceID,
"listenerID", createLsResp.ListenerId,
"listenerStatus", getLsResp.ListenerStatus,
"requestID", getLsResp.RequestId,
"elapsedTime", time.Since(asynchronousStartTime).Milliseconds(),
util.Action, util.CreateALBListenerAsynchronous)
if isHTTPSListenerProtocol(resLS.Spec.ListenerProtocol) {
if err := util.RetryImmediateOnError(m.waitLSExistencePollInterval, m.waitLSExistenceTimeout, isIncorrectStatusListenerError, func() error {
if err := m.updateListenerExtraCertificates(ctx, createLsResp.ListenerId, resLS); err != nil {
return err
}
return nil
}); err != nil {
return albmodel.ListenerStatus{}, errors.Wrap(err, "failed to update listener extra certificates")
}
}
return buildResListenerStatus(createLsResp.ListenerId), nil
}