Skip to content

Commit a487357

Browse files
authored
Merge pull request #1392 from jonnylangefeld/jlf/update-apex-labels-annotations
Enable updates for labels and annotations
2 parents 5b7a679 + e8aba08 commit a487357

10 files changed

+205
-145
lines changed

pkg/router/appmesh.go

+20-14
Original file line numberDiff line numberDiff line change
@@ -143,25 +143,26 @@ func (ar *AppMeshRouter) reconcileVirtualNode(canary *flaggerv1.Canary, name str
143143

144144
virtualnode, err := ar.appmeshClient.AppmeshV1beta1().VirtualNodes(canary.Namespace).Get(context.TODO(), name, metav1.GetOptions{})
145145

146+
newMetadata := canary.Spec.Service.Apex
147+
if newMetadata == nil {
148+
newMetadata = &flaggerv1.CustomMetadata{}
149+
}
150+
if newMetadata.Labels == nil {
151+
newMetadata.Labels = make(map[string]string)
152+
}
153+
if newMetadata.Annotations == nil {
154+
newMetadata.Annotations = make(map[string]string)
155+
}
156+
newMetadata.Annotations = filterMetadata(newMetadata.Annotations)
157+
146158
// create virtual node
147159
if errors.IsNotFound(err) {
148-
metadata := canary.Spec.Service.Apex
149-
if metadata == nil {
150-
metadata = &flaggerv1.CustomMetadata{}
151-
}
152-
if metadata.Labels == nil {
153-
metadata.Labels = make(map[string]string)
154-
}
155-
if metadata.Annotations == nil {
156-
metadata.Annotations = make(map[string]string)
157-
}
158-
159160
virtualnode = &appmeshv1.VirtualNode{
160161
ObjectMeta: metav1.ObjectMeta{
161162
Name: name,
162163
Namespace: canary.Namespace,
163-
Labels: metadata.Labels,
164-
Annotations: filterMetadata(metadata.Annotations),
164+
Labels: newMetadata.Labels,
165+
Annotations: newMetadata.Annotations,
165166
},
166167
Spec: vnSpec,
167168
}
@@ -187,9 +188,14 @@ func (ar *AppMeshRouter) reconcileVirtualNode(canary *flaggerv1.Canary, name str
187188

188189
// update virtual node
189190
if virtualnode != nil {
190-
if diff := cmp.Diff(vnSpec, virtualnode.Spec); diff != "" {
191+
specDiff := cmp.Diff(vnSpec, virtualnode.Spec)
192+
labelsDiff := cmp.Diff(newMetadata.Labels, virtualnode.Labels, cmpopts.EquateEmpty())
193+
annotationsDiff := cmp.Diff(newMetadata.Labels, virtualnode.Annotations, cmpopts.EquateEmpty())
194+
if specDiff != "" || labelsDiff != "" || annotationsDiff != "" {
191195
vnClone := virtualnode.DeepCopy()
192196
vnClone.Spec = vnSpec
197+
vnClone.ObjectMeta.Annotations = newMetadata.Annotations
198+
vnClone.ObjectMeta.Labels = newMetadata.Labels
193199
_, err = ar.appmeshClient.AppmeshV1beta1().VirtualNodes(canary.Namespace).Update(context.TODO(), vnClone, metav1.UpdateOptions{})
194200
if err != nil {
195201
return fmt.Errorf("VirtualNode %s update error %w", name, err)

pkg/router/appmesh_v1beta2.go

+20-15
Original file line numberDiff line numberDiff line change
@@ -157,25 +157,26 @@ func (ar *AppMeshv1beta2Router) reconcileVirtualNode(canary *flaggerv1.Canary, n
157157

158158
virtualnode, err := ar.appmeshClient.AppmeshV1beta2().VirtualNodes(canary.Namespace).Get(context.TODO(), name, metav1.GetOptions{})
159159

160+
newMetadata := canary.Spec.Service.Apex
161+
if newMetadata == nil {
162+
newMetadata = &flaggerv1.CustomMetadata{}
163+
}
164+
if newMetadata.Labels == nil {
165+
newMetadata.Labels = make(map[string]string)
166+
}
167+
if newMetadata.Annotations == nil {
168+
newMetadata.Annotations = make(map[string]string)
169+
}
170+
newMetadata.Annotations = filterMetadata(newMetadata.Annotations)
171+
160172
// create virtual node
161173
if errors.IsNotFound(err) {
162-
metadata := canary.Spec.Service.Apex
163-
if metadata == nil {
164-
metadata = &flaggerv1.CustomMetadata{}
165-
}
166-
if metadata.Labels == nil {
167-
metadata.Labels = make(map[string]string)
168-
}
169-
if metadata.Annotations == nil {
170-
metadata.Annotations = make(map[string]string)
171-
}
172-
173174
virtualnode = &appmeshv1.VirtualNode{
174175
ObjectMeta: metav1.ObjectMeta{
175176
Name: name,
176177
Namespace: canary.Namespace,
177-
Labels: metadata.Labels,
178-
Annotations: filterMetadata(metadata.Annotations),
178+
Labels: newMetadata.Labels,
179+
Annotations: newMetadata.Annotations,
179180
},
180181
Spec: vnSpec,
181182
}
@@ -201,12 +202,16 @@ func (ar *AppMeshv1beta2Router) reconcileVirtualNode(canary *flaggerv1.Canary, n
201202

202203
// update virtual node
203204
if virtualnode != nil {
204-
if diff := cmp.Diff(vnSpec, virtualnode.Spec,
205-
cmpopts.IgnoreFields(appmeshv1.VirtualNodeSpec{}, "AWSName", "MeshRef")); diff != "" {
205+
specDiff := cmp.Diff(vnSpec, virtualnode.Spec, cmpopts.IgnoreFields(appmeshv1.VirtualNodeSpec{}, "AWSName", "MeshRef"))
206+
labelsDiff := cmp.Diff(newMetadata.Labels, virtualnode.Labels, cmpopts.EquateEmpty())
207+
annotationsDiff := cmp.Diff(newMetadata.Annotations, virtualnode.Annotations, cmpopts.EquateEmpty())
208+
if specDiff != "" || labelsDiff != "" || annotationsDiff != "" {
206209
vnClone := virtualnode.DeepCopy()
207210
vnClone.Spec = vnSpec
208211
vnClone.Spec.AWSName = virtualnode.Spec.AWSName
209212
vnClone.Spec.MeshRef = virtualnode.Spec.MeshRef
213+
vnClone.ObjectMeta.Annotations = newMetadata.Annotations
214+
vnClone.ObjectMeta.Labels = newMetadata.Labels
210215
_, err = ar.appmeshClient.AppmeshV1beta2().VirtualNodes(canary.Namespace).Update(context.TODO(), vnClone, metav1.UpdateOptions{})
211216
if err != nil {
212217
return fmt.Errorf("VirtualNode %s update error %w", name, err)

pkg/router/contour.go

+21-15
Original file line numberDiff line numberDiff line change
@@ -151,25 +151,26 @@ func (cr *ContourRouter) Reconcile(canary *flaggerv1.Canary) error {
151151
}
152152
}
153153

154+
newMetadata := canary.Spec.Service.Apex
155+
if newMetadata == nil {
156+
newMetadata = &flaggerv1.CustomMetadata{}
157+
}
158+
if newMetadata.Labels == nil {
159+
newMetadata.Labels = make(map[string]string)
160+
}
161+
if newMetadata.Annotations == nil {
162+
newMetadata.Annotations = make(map[string]string)
163+
}
164+
newMetadata.Annotations = filterMetadata(newMetadata.Annotations)
165+
154166
proxy, err := cr.contourClient.ProjectcontourV1().HTTPProxies(canary.Namespace).Get(context.TODO(), apexName, metav1.GetOptions{})
155167
if errors.IsNotFound(err) {
156-
metadata := canary.Spec.Service.Apex
157-
if metadata == nil {
158-
metadata = &flaggerv1.CustomMetadata{}
159-
}
160-
if metadata.Labels == nil {
161-
metadata.Labels = make(map[string]string)
162-
}
163-
if metadata.Annotations == nil {
164-
metadata.Annotations = make(map[string]string)
165-
}
166-
167168
proxy = &contourv1.HTTPProxy{
168169
ObjectMeta: metav1.ObjectMeta{
169170
Name: apexName,
170171
Namespace: canary.Namespace,
171-
Labels: metadata.Labels,
172-
Annotations: filterMetadata(metadata.Annotations),
172+
Labels: newMetadata.Labels,
173+
Annotations: newMetadata.Annotations,
173174
},
174175
Spec: newSpec,
175176
Status: contourv1.HTTPProxyStatus{
@@ -207,13 +208,18 @@ func (cr *ContourRouter) Reconcile(canary *flaggerv1.Canary) error {
207208

208209
// update HTTPProxy but keep the original destination weights
209210
if proxy != nil {
210-
if diff := cmp.Diff(
211+
specDiff := cmp.Diff(
211212
newSpec,
212213
proxy.Spec,
213214
cmpopts.IgnoreFields(contourv1.Service{}, "Weight"),
214-
); diff != "" {
215+
)
216+
labelsDiff := cmp.Diff(newMetadata.Labels, proxy.Labels, cmpopts.EquateEmpty())
217+
annotationsDiff := cmp.Diff(newMetadata.Annotations, proxy.Annotations, cmpopts.EquateEmpty())
218+
if specDiff != "" || labelsDiff != "" || annotationsDiff != "" {
215219
clone := proxy.DeepCopy()
216220
clone.Spec = newSpec
221+
clone.ObjectMeta.Annotations = newMetadata.Annotations
222+
clone.ObjectMeta.Labels = newMetadata.Labels
217223

218224
_, err = cr.contourClient.ProjectcontourV1().HTTPProxies(canary.Namespace).Update(context.TODO(), clone, metav1.UpdateOptions{})
219225
if err != nil {

pkg/router/gateway_api.go

+20-14
Original file line numberDiff line numberDiff line change
@@ -123,23 +123,25 @@ func (gwr *GatewayAPIRouter) Reconcile(canary *flaggerv1.Canary) error {
123123
context.TODO(), apexSvcName, metav1.GetOptions{},
124124
)
125125

126+
newMetadata := canary.Spec.Service.Apex
127+
if newMetadata == nil {
128+
newMetadata = &flaggerv1.CustomMetadata{}
129+
}
130+
if newMetadata.Labels == nil {
131+
newMetadata.Labels = make(map[string]string)
132+
}
133+
if newMetadata.Annotations == nil {
134+
newMetadata.Annotations = make(map[string]string)
135+
}
136+
newMetadata.Annotations = filterMetadata(newMetadata.Annotations)
137+
126138
if errors.IsNotFound(err) {
127-
metadata := canary.Spec.Service.Apex
128-
if metadata == nil {
129-
metadata = &flaggerv1.CustomMetadata{}
130-
}
131-
if metadata.Labels == nil {
132-
metadata.Labels = make(map[string]string)
133-
}
134-
if metadata.Annotations == nil {
135-
metadata.Annotations = make(map[string]string)
136-
}
137139
route := &v1alpha2.HTTPRoute{
138140
ObjectMeta: metav1.ObjectMeta{
139141
Name: apexSvcName,
140142
Namespace: hrNamespace,
141-
Labels: metadata.Labels,
142-
Annotations: filterMetadata(metadata.Annotations),
143+
Labels: newMetadata.Labels,
144+
Annotations: newMetadata.Annotations,
143145
},
144146
Spec: httpRouteSpec,
145147
}
@@ -167,13 +169,17 @@ func (gwr *GatewayAPIRouter) Reconcile(canary *flaggerv1.Canary) error {
167169
}
168170

169171
if httpRoute != nil {
170-
diff := cmp.Diff(
172+
specDiff := cmp.Diff(
171173
httpRoute.Spec, httpRouteSpec,
172174
cmpopts.IgnoreFields(v1alpha2.BackendRef{}, "Weight"),
173175
)
174-
if diff != "" && httpRoute.Name != "" {
176+
labelsDiff := cmp.Diff(newMetadata.Labels, httpRoute.Labels, cmpopts.EquateEmpty())
177+
annotationsDiff := cmp.Diff(newMetadata.Annotations, httpRoute.Annotations, cmpopts.EquateEmpty())
178+
if (specDiff != "" && httpRoute.Name != "") || labelsDiff != "" || annotationsDiff != "" {
175179
hrClone := httpRoute.DeepCopy()
176180
hrClone.Spec = httpRouteSpec
181+
hrClone.ObjectMeta.Annotations = newMetadata.Annotations
182+
hrClone.ObjectMeta.Labels = newMetadata.Labels
177183
_, err := gwr.gatewayAPIClient.GatewayapiV1alpha2().HTTPRoutes(hrNamespace).
178184
Update(context.TODO(), hrClone, metav1.UpdateOptions{})
179185
if err != nil {

pkg/router/gateway_api_v1beta1.go

+20-14
Original file line numberDiff line numberDiff line change
@@ -117,23 +117,25 @@ func (gwr *GatewayAPIV1Beta1Router) Reconcile(canary *flaggerv1.Canary) error {
117117
context.TODO(), apexSvcName, metav1.GetOptions{},
118118
)
119119

120+
newMetadata := canary.Spec.Service.Apex
121+
if newMetadata == nil {
122+
newMetadata = &flaggerv1.CustomMetadata{}
123+
}
124+
if newMetadata.Labels == nil {
125+
newMetadata.Labels = make(map[string]string)
126+
}
127+
if newMetadata.Annotations == nil {
128+
newMetadata.Annotations = make(map[string]string)
129+
}
130+
newMetadata.Annotations = filterMetadata(newMetadata.Annotations)
131+
120132
if errors.IsNotFound(err) {
121-
metadata := canary.Spec.Service.Apex
122-
if metadata == nil {
123-
metadata = &flaggerv1.CustomMetadata{}
124-
}
125-
if metadata.Labels == nil {
126-
metadata.Labels = make(map[string]string)
127-
}
128-
if metadata.Annotations == nil {
129-
metadata.Annotations = make(map[string]string)
130-
}
131133
route := &v1beta1.HTTPRoute{
132134
ObjectMeta: metav1.ObjectMeta{
133135
Name: apexSvcName,
134136
Namespace: hrNamespace,
135-
Labels: metadata.Labels,
136-
Annotations: filterMetadata(metadata.Annotations),
137+
Labels: newMetadata.Labels,
138+
Annotations: newMetadata.Annotations,
137139
},
138140
Spec: httpRouteSpec,
139141
}
@@ -161,13 +163,17 @@ func (gwr *GatewayAPIV1Beta1Router) Reconcile(canary *flaggerv1.Canary) error {
161163
}
162164

163165
if httpRoute != nil {
164-
diff := cmp.Diff(
166+
specDiff := cmp.Diff(
165167
httpRoute.Spec, httpRouteSpec,
166168
cmpopts.IgnoreFields(v1beta1.BackendRef{}, "Weight"),
167169
)
168-
if diff != "" && httpRoute.Name != "" {
170+
labelsDiff := cmp.Diff(newMetadata.Labels, httpRoute.Labels, cmpopts.EquateEmpty())
171+
annotationsDiff := cmp.Diff(newMetadata.Annotations, httpRoute.Annotations, cmpopts.EquateEmpty())
172+
if (specDiff != "" && httpRoute.Name != "") || labelsDiff != "" || annotationsDiff != "" {
169173
hrClone := httpRoute.DeepCopy()
170174
hrClone.Spec = httpRouteSpec
175+
hrClone.ObjectMeta.Annotations = newMetadata.Annotations
176+
hrClone.ObjectMeta.Labels = newMetadata.Labels
171177
_, err := gwr.gatewayAPIClient.GatewayapiV1beta1().HTTPRoutes(hrNamespace).
172178
Update(context.TODO(), hrClone, metav1.UpdateOptions{})
173179
if err != nil {

pkg/router/gloo.go

+21-15
Original file line numberDiff line numberDiff line change
@@ -98,25 +98,26 @@ func (gr *GlooRouter) Reconcile(canary *flaggerv1.Canary) error {
9898
},
9999
}
100100

101+
newMetadata := canary.Spec.Service.Apex
102+
if newMetadata == nil {
103+
newMetadata = &flaggerv1.CustomMetadata{}
104+
}
105+
if newMetadata.Labels == nil {
106+
newMetadata.Labels = make(map[string]string)
107+
}
108+
if newMetadata.Annotations == nil {
109+
newMetadata.Annotations = make(map[string]string)
110+
}
111+
newMetadata.Annotations = filterMetadata(newMetadata.Annotations)
112+
101113
routeTable, err := gr.glooClient.GatewayV1().RouteTables(canary.Namespace).Get(context.TODO(), apexName, metav1.GetOptions{})
102114
if errors.IsNotFound(err) {
103-
metadata := canary.Spec.Service.Apex
104-
if metadata == nil {
105-
metadata = &flaggerv1.CustomMetadata{}
106-
}
107-
if metadata.Labels == nil {
108-
metadata.Labels = make(map[string]string)
109-
}
110-
if metadata.Annotations == nil {
111-
metadata.Annotations = make(map[string]string)
112-
}
113-
114115
routeTable = &gatewayv1.RouteTable{
115116
ObjectMeta: metav1.ObjectMeta{
116117
Name: apexName,
117118
Namespace: canary.Namespace,
118-
Labels: metadata.Labels,
119-
Annotations: filterMetadata(metadata.Annotations),
119+
Labels: newMetadata.Labels,
120+
Annotations: newMetadata.Annotations,
120121
},
121122
Spec: newSpec,
122123
}
@@ -143,13 +144,18 @@ func (gr *GlooRouter) Reconcile(canary *flaggerv1.Canary) error {
143144

144145
// update routeTable but keep the original destination weights
145146
if routeTable != nil {
146-
if diff := cmp.Diff(
147+
specDiff := cmp.Diff(
147148
newSpec,
148149
routeTable.Spec,
149150
cmpopts.IgnoreFields(gatewayv1.WeightedDestination{}, "Weight"),
150-
); diff != "" {
151+
)
152+
labelsDiff := cmp.Diff(newMetadata.Labels, routeTable.Labels, cmpopts.EquateEmpty())
153+
annotationsDiff := cmp.Diff(newMetadata.Annotations, routeTable.Annotations, cmpopts.EquateEmpty())
154+
if specDiff != "" || labelsDiff != "" || annotationsDiff != "" {
151155
clone := routeTable.DeepCopy()
152156
clone.Spec = newSpec
157+
clone.ObjectMeta.Annotations = newMetadata.Annotations
158+
clone.ObjectMeta.Labels = newMetadata.Labels
153159

154160
_, err = gr.glooClient.GatewayV1().RouteTables(canary.Namespace).Update(context.TODO(), clone, metav1.UpdateOptions{})
155161
if err != nil {

0 commit comments

Comments
 (0)