Skip to content

Commit

Permalink
Add VPC network check in SecurityPolicy License error Annotation (#772)
Browse files Browse the repository at this point in the history
  • Loading branch information
timdengyun authored Sep 23, 2024
1 parent 4900e7d commit 5c97290
Showing 1 changed file with 21 additions and 7 deletions.
28 changes: 21 additions & 7 deletions pkg/controllers/securitypolicy/securitypolicy_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,29 +86,43 @@ func deleteSuccess(r *SecurityPolicyReconciler, _ context.Context, o *v1alpha1.S
metrics.CounterInc(r.Service.NSXConfig, metrics.ControllerDeleteSuccessTotal, MetricResType)
}

func setSecurityPolicyErrorAnnotation(ctx context.Context, securityPolicy *v1alpha1.SecurityPolicy, client client.Client, info string) {
func setSecurityPolicyErrorAnnotation(ctx context.Context, securityPolicy *v1alpha1.SecurityPolicy, isVPCEanbled bool, client client.Client, info string) {
if securityPolicy.Annotations == nil {
securityPolicy.Annotations = make(map[string]string)
}
if securityPolicy.Annotations[common.NSXOperatorError] == info {
return
}
securityPolicy.Annotations[common.NSXOperatorError] = info
updateErr := client.Update(ctx, securityPolicy)

var updateErr error
if isVPCEanbled {
finalObj := securitypolicy.T1ToVPC(securityPolicy)
updateErr = client.Update(ctx, finalObj)
} else {
updateErr = client.Update(ctx, securityPolicy)
}
if updateErr != nil {
log.Error(updateErr, "Failed to update SecurityPolicy with error annotation")
}
log.Info("update SecurityPolicy with error annotation", "error", info)
}

func cleanSecurityPolicyErrorAnnotation(ctx context.Context, securityPolicy *v1alpha1.SecurityPolicy, client client.Client) {
func cleanSecurityPolicyErrorAnnotation(ctx context.Context, securityPolicy *v1alpha1.SecurityPolicy, isVPCEanbled bool, client client.Client) {
if securityPolicy.Annotations == nil {
return
}
if _, exists := securityPolicy.Annotations[common.NSXOperatorError]; exists {
delete(securityPolicy.Annotations, common.NSXOperatorError)
}
updateErr := client.Update(ctx, securityPolicy)

var updateErr error
if isVPCEanbled {
finalObj := securitypolicy.T1ToVPC(securityPolicy)
updateErr = client.Update(ctx, finalObj)
} else {
updateErr = client.Update(ctx, securityPolicy)
}
if updateErr != nil {
log.Error(updateErr, "Failed to clean SecurityPolicy annotation")
}
Expand Down Expand Up @@ -182,21 +196,21 @@ func (r *SecurityPolicyReconciler) Reconcile(ctx context.Context, req ctrl.Reque
if err := r.Service.CreateOrUpdateSecurityPolicy(realObj); err != nil {
if errors.As(err, &nsxutil.RestrictionError{}) {
log.Error(err, err.Error(), "securitypolicy", req.NamespacedName)
setSecurityPolicyErrorAnnotation(ctx, realObj, r.Client, common.ErrorNoDFWLicense)
setSecurityPolicyErrorAnnotation(ctx, realObj, securitypolicy.IsVPCEnabled(r.Service), r.Client, common.ErrorNoDFWLicense)
updateFail(r, ctx, realObj, &err)
return ResultNormal, nil
}
if nsxutil.IsInvalidLicense(err) {
log.Error(err, err.Error(), "securitypolicy", req.NamespacedName)
setSecurityPolicyErrorAnnotation(ctx, realObj, r.Client, common.ErrorNoDFWLicense)
setSecurityPolicyErrorAnnotation(ctx, realObj, securitypolicy.IsVPCEnabled(r.Service), r.Client, common.ErrorNoDFWLicense)
os.Exit(1)
}
log.Error(err, "create or update failed, would retry exponentially", "securitypolicy", req.NamespacedName)
updateFail(r, ctx, realObj, &err)
return ResultRequeue, err
}
updateSuccess(r, ctx, realObj)
cleanSecurityPolicyErrorAnnotation(ctx, realObj, r.Client)
cleanSecurityPolicyErrorAnnotation(ctx, realObj, securitypolicy.IsVPCEnabled(r.Service), r.Client)
} else {
log.Info("reconciling CR to delete securitypolicy", "securitypolicy", req.NamespacedName)
if controllerutil.ContainsFinalizer(obj, finalizerName) {
Expand Down

0 comments on commit 5c97290

Please sign in to comment.