func()

in pkg/provider/alibaba/alb/rule.go [166:247]


func (m *ALBProvider) updateALBRuleAttribute(ctx context.Context, resLR *alb.ListenerRule, sdkLR *albsdk.Rule, judger ListenerRuleUpdateAnalyzer) (*albsdk.UpdateRuleAttributeResponse, error) {
	traceID := ctx.Value(util.TraceID)

	ruleReq := albsdk.CreateUpdateRuleAttributeRequest()
	ruleReq.RuleId = sdkLR.RuleId

	if judger.ruleNameNeedUpdate {
		m.logger.V(util.MgrLogLevel).Info("RuleName update",
			"res", resLR.Spec.RuleName,
			"sdk", sdkLR.RuleName,
			"ruleID", sdkLR.RuleId,
			"traceID", traceID)
		ruleReq.RuleName = resLR.Spec.RuleName
	}
	if judger.ruleActionsNeedUpdate {
		m.logger.V(util.MgrLogLevel).Info("Actions update",
			"res", resLR.Spec.RuleActions,
			"sdk", sdkLR.RuleActions,
			"ruleID", sdkLR.RuleId,
			"traceID", traceID)
		actions, err := transModelActionsToSDKUpdateRule(resLR.Spec.RuleActions)
		if err != nil {
			return nil, err
		}
		ruleReq.RuleActions = actions
	}
	if judger.ruleConditionsNeedUpdate {
		m.logger.V(util.MgrLogLevel).Info("Conditions update",
			"res", resLR.Spec.RuleConditions,
			"sdk", sdkLR.RuleConditions,
			"ruleID", sdkLR.RuleId,
			"traceID", traceID)
		ruleReq.RuleConditions = transSDKConditionsToUpdateRule(resLR.Spec.RuleConditions)
	}
	if judger.priorityNeedUpdate {
		m.logger.V(util.MgrLogLevel).Info("Priority update",
			"res", resLR.Spec.Priority,
			"sdk", sdkLR.Priority,
			"ruleID", sdkLR.RuleId,
			"traceID", traceID)
		ruleReq.Priority = requests.NewInteger(resLR.Spec.Priority)
	}

	var updateRuleResp *albsdk.UpdateRuleAttributeResponse
	if err := util.RetryImmediateOnError(m.waitLSExistencePollInterval, m.waitLSExistenceTimeout, isVipStatusNotSupportError, func() error {
		startTime := time.Now()
		m.logger.V(util.MgrLogLevel).Info("updating rule attribute",
			"stackID", resLR.Stack().StackID(),
			"resourceID", resLR.ID(),
			"traceID", traceID,
			"ruleID", sdkLR.RuleId,
			"startTime", startTime,
			util.Action, util.UpdateALBRuleAttribute)
		var err error
		updateRuleResp, err = m.auth.ALB.UpdateRuleAttribute(ruleReq)
		if err != nil {
			m.logger.V(util.MgrLogLevel).Info("updating rule attribute",
				"stackID", resLR.Stack().StackID(),
				"resourceID", resLR.ID(),
				"traceID", traceID,
				"ruleID", sdkLR.RuleId,
				"error", err.Error(),
				"requestID", updateRuleResp.RequestId,
				"startTime", startTime,
				util.Action, util.UpdateALBRuleAttribute)
			return err
		}
		m.logger.V(util.MgrLogLevel).Info("updated rule attribute",
			"stackID", resLR.Stack().StackID(),
			"resourceID", resLR.ID(),
			"traceID", traceID,
			"ruleID", sdkLR.RuleId,
			"requestID", updateRuleResp.RequestId,
			"elapsedTime", time.Since(startTime).Milliseconds(),
			util.Action, util.UpdateALBRuleAttribute)
		return nil
	}); err != nil {
		return nil, errors.Wrap(err, "failed to update listener rule")
	}

	return updateRuleResp, nil
}