in pkg/provider/alibaba/alb/listener.go [480:680]
func (m *ALBProvider) updateListenerAttribute(ctx context.Context, resLS *albmodel.Listener, sdkLs *albsdk.Listener) error {
traceID := ctx.Value(util.TraceID)
var (
isGzipEnabledNeedUpdate,
isQuicConfigUpdate,
isHttp2EnabledNeedUpdate,
isDefaultActionsNeedUpdate,
isRequestTimeoutNeedUpdate,
isXForwardedForConfigNeedUpdate,
isSecurityPolicyIdNeedUpdate,
isIdleTimeoutNeedUpdate,
isListenerDescriptionNeedUpdate,
isCertificatesNeedUpdate bool
)
if resLS.Spec.GzipEnabled != sdkLs.GzipEnabled {
m.logger.V(util.MgrLogLevel).Info("GzipEnabled update",
"res", resLS.Spec.GzipEnabled,
"sdk", sdkLs.GzipEnabled,
"listenerID", sdkLs.ListenerId,
"traceID", traceID)
isGzipEnabledNeedUpdate = true
}
quicConfig := transQuicConfigToSDK(resLS.Spec.QuicConfig)
if quicConfig != sdkLs.QuicConfig {
m.logger.V(util.MgrLogLevel).Info("QuicConfig update",
"res", resLS.Spec.QuicConfig,
"sdk", sdkLs.QuicConfig,
"listenerID", sdkLs.ListenerId,
"traceID", traceID)
isQuicConfigUpdate = true
}
if len(resLS.Spec.DefaultActions) == 0 {
return fmt.Errorf("empty listener default action: %v", resLS.Spec.DefaultActions)
}
resAction, err := transModelActionsToSDKLs(resLS.Spec.DefaultActions)
if err != nil {
return err
}
if len(*resAction) == 0 {
return fmt.Errorf("empty listener default action: %v", *resAction)
}
if !reflect.DeepEqual((*resAction)[0], sdkLs.DefaultActions[0]) {
m.logger.V(util.MgrLogLevel).Info("DefaultActions update",
"res", (*resAction)[0],
"sdk", sdkLs.DefaultActions[0],
"listenerID", sdkLs.ListenerId,
"traceID", traceID)
isDefaultActionsNeedUpdate = true
}
if !isListenerRequestTimeoutValid(resLS.Spec.RequestTimeout) {
return fmt.Errorf("invalid listener RequestTimeout: %d", resLS.Spec.RequestTimeout)
}
if resLS.Spec.RequestTimeout != sdkLs.RequestTimeout {
m.logger.V(util.MgrLogLevel).Info("RequestTimeout update",
"res", resLS.Spec.RequestTimeout,
"sdk", sdkLs.RequestTimeout,
"listenerID", sdkLs.ListenerId,
"traceID", traceID)
isRequestTimeoutNeedUpdate = true
}
xForwardedForConfig := transXForwardedForConfigToSDK(resLS.Spec.XForwardedForConfig)
if xForwardedForConfig != sdkLs.XForwardedForConfig {
m.logger.V(util.MgrLogLevel).Info("XForwardedForConfig update",
"res", resLS.Spec.XForwardedForConfig,
"sdk", sdkLs.XForwardedForConfig,
"listenerID", sdkLs.ListenerId,
"traceID", traceID)
isXForwardedForConfigNeedUpdate = true
}
if !isListenerIdleTimeoutValid(resLS.Spec.IdleTimeout) {
return fmt.Errorf("invalid listener IdleTimeout: %d", resLS.Spec.IdleTimeout)
}
if resLS.Spec.IdleTimeout != sdkLs.IdleTimeout {
m.logger.V(util.MgrLogLevel).Info("IdleTimeout update",
"res", resLS.Spec.IdleTimeout,
"sdk", sdkLs.IdleTimeout,
"listenerID", sdkLs.ListenerId,
"traceID", traceID)
isIdleTimeoutNeedUpdate = true
}
if resLS.Spec.ListenerDescription != sdkLs.ListenerDescription {
m.logger.V(util.MgrLogLevel).Info("ListenerDescription update",
"res", resLS.Spec.ListenerDescription,
"sdk", sdkLs.ListenerDescription,
"listenerID", sdkLs.ListenerId,
"traceID", traceID)
isListenerDescriptionNeedUpdate = true
}
if isHTTPSListenerProtocol(sdkLs.ListenerProtocol) {
if len(resLS.Spec.SecurityPolicyId) == 0 {
return fmt.Errorf("invalid https listener SecurityPolicyId: %s", resLS.Spec.SecurityPolicyId)
}
if resLS.Spec.SecurityPolicyId != sdkLs.SecurityPolicyId {
m.logger.V(util.MgrLogLevel).Info("SecurityPolicyId update",
"res", resLS.Spec.SecurityPolicyId,
"sdk", sdkLs.SecurityPolicyId,
"listenerID", sdkLs.ListenerId,
"traceID", traceID)
isSecurityPolicyIdNeedUpdate = true
}
desiredDefaultCerts, _ := buildSDKCertificates(resLS.Spec.Certificates)
if len(desiredDefaultCerts) != 1 {
return fmt.Errorf("invalid res https listener default certs len: %d", len(desiredDefaultCerts))
}
currentDefaultCerts, _ := buildSDKCertificatesModel(m.sdkCerts)
if len(currentDefaultCerts) != 1 {
return fmt.Errorf("invalid sdk https listener default certs len: %d", len(currentDefaultCerts))
}
if desiredDefaultCerts[0].CertificateId != currentDefaultCerts[0].CertificateId {
m.logger.V(util.MgrLogLevel).Info("DefaultCerts update",
"res", desiredDefaultCerts[0],
"sdk", currentDefaultCerts[0],
"listenerID", sdkLs.ListenerId,
"traceID", traceID)
isCertificatesNeedUpdate = true
}
if resLS.Spec.Http2Enabled != sdkLs.Http2Enabled {
m.logger.V(util.MgrLogLevel).Info("Http2Enabled update",
"res", resLS.Spec.Http2Enabled,
"sdk", sdkLs.Http2Enabled,
"listenerID", sdkLs.ListenerId,
"traceID", traceID)
isHttp2EnabledNeedUpdate = true
}
}
if !isGzipEnabledNeedUpdate && !isQuicConfigUpdate && !isHttp2EnabledNeedUpdate &&
!isDefaultActionsNeedUpdate && !isRequestTimeoutNeedUpdate && !isXForwardedForConfigNeedUpdate &&
!isSecurityPolicyIdNeedUpdate && !isIdleTimeoutNeedUpdate && !isListenerDescriptionNeedUpdate &&
!isCertificatesNeedUpdate {
return nil
}
updateLsReq := albsdk.CreateUpdateListenerAttributeRequest()
updateLsReq.ListenerId = sdkLs.ListenerId
if isGzipEnabledNeedUpdate {
updateLsReq.GzipEnabled = requests.NewBoolean(resLS.Spec.GzipEnabled)
}
if isQuicConfigUpdate {
updateLsReq.QuicConfig = transSDKQuicConfigToUpdateLs(resLS.Spec.QuicConfig)
}
if isHttp2EnabledNeedUpdate {
updateLsReq.Http2Enabled = requests.NewBoolean(resLS.Spec.Http2Enabled)
}
if isDefaultActionsNeedUpdate {
defaultAction, err := transModelActionToSDKUpdateLs(resLS.Spec.DefaultActions)
if err != nil {
return err
}
updateLsReq.DefaultActions = defaultAction
}
if isRequestTimeoutNeedUpdate {
updateLsReq.RequestTimeout = requests.NewInteger(resLS.Spec.RequestTimeout)
}
if isXForwardedForConfigNeedUpdate {
updateLsReq.XForwardedForConfig = transSDKXForwardedForConfigToUpdateLs(resLS.Spec.XForwardedForConfig)
}
if isSecurityPolicyIdNeedUpdate {
updateLsReq.SecurityPolicyId = resLS.Spec.SecurityPolicyId
}
if isIdleTimeoutNeedUpdate {
updateLsReq.IdleTimeout = requests.NewInteger(resLS.Spec.IdleTimeout)
}
if isListenerDescriptionNeedUpdate {
updateLsReq.ListenerDescription = resLS.Spec.ListenerDescription
}
if isCertificatesNeedUpdate {
updateLsReq.Certificates = transSDKCertificatesToUpdateLs(resLS.Spec.Certificates)
}
startTime := time.Now()
m.logger.V(util.MgrLogLevel).Info("updating listener attribute",
"stackID", resLS.Stack().StackID(),
"resourceID", resLS.ID(),
"traceID", traceID,
"listenerID", sdkLs.ListenerId,
"startTime", startTime,
util.Action, util.UpdateALBListenerAttribute)
updateLsResp, err := m.auth.ALB.UpdateListenerAttribute(updateLsReq)
if err != nil {
return err
}
m.logger.V(util.MgrLogLevel).Info("updated listener attribute",
"stackID", resLS.Stack().StackID(),
"resourceID", resLS.ID(),
"traceID", traceID,
"listenerID", sdkLs.ListenerId,
"requestID", updateLsResp.RequestId,
"elapsedTime", time.Since(startTime).Milliseconds(),
util.Action, util.UpdateALBListenerAttribute)
return nil
}