-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.
Already on GitHub? Sign in to your account
馃悰 topology should not generate empty patch for metadata #5580
馃悰 topology should not generate empty patch for metadata #5580
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/approve
/lgtm
@@ -42,7 +40,7 @@ func (m *Metadata) Get(obj *unstructured.Unstructured) (*clusterv1.ObjectMeta, e | |||
return nil, errors.Wrap(err, "failed to retrieve control plane metadata.labels") | |||
} | |||
if !ok { | |||
return nil, errors.Errorf("%s not found", "."+strings.Join(labelsPath, ".")) | |||
labelsValue = map[string]string{} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Was this done to avoid nil maps?
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: vincepri The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
@@ -42,7 +40,7 @@ func (m *Metadata) Get(obj *unstructured.Unstructured) (*clusterv1.ObjectMeta, e | |||
return nil, errors.Wrap(err, "failed to retrieve control plane metadata.labels") | |||
} | |||
if !ok { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@fabriziopandini I agree that we shouldn't return an error here, but wouldn't it be more consistent overall and with e.g. mergeMap if we would return nil label/annotations if they are not set?
(the controller runtime client also sets empty maps to nil when it returns a resource)
What this PR does / why we need it:
While testing ClusterClass handling of metadata I have found that under certain conditions the generated patch has an empty map, something like {"metadata":{"annotations":{}}}. This leads to topology reconcile assuming that the patch is not empty, and thus trying to patch an object indefinitely.
This change ensures that in case there are no labels/annotations, we are not generating empty maps in our objects, thus preventing empty patch for metadata being generated.