Skip to content

Commit

Permalink
Enable updates for labels and annotations
Browse files Browse the repository at this point in the history
Fix fluxcd#1386

Signed-off-by: jonny.langefeld <[email protected]>
Signed-off-by: Jonny Langefeld <[email protected]>
Signed-off-by: Sanskar Jaiswal <[email protected]>
  • Loading branch information
jonnylangefeld authored and aryan9600 committed Apr 12, 2023
1 parent 5b7a679 commit e8aba08
Show file tree
Hide file tree
Showing 10 changed files with 205 additions and 145 deletions.
34 changes: 20 additions & 14 deletions pkg/router/appmesh.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,25 +143,26 @@ func (ar *AppMeshRouter) reconcileVirtualNode(canary *flaggerv1.Canary, name str

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

newMetadata := canary.Spec.Service.Apex
if newMetadata == nil {
newMetadata = &flaggerv1.CustomMetadata{}
}
if newMetadata.Labels == nil {
newMetadata.Labels = make(map[string]string)
}
if newMetadata.Annotations == nil {
newMetadata.Annotations = make(map[string]string)
}
newMetadata.Annotations = filterMetadata(newMetadata.Annotations)

// create virtual node
if errors.IsNotFound(err) {
metadata := canary.Spec.Service.Apex
if metadata == nil {
metadata = &flaggerv1.CustomMetadata{}
}
if metadata.Labels == nil {
metadata.Labels = make(map[string]string)
}
if metadata.Annotations == nil {
metadata.Annotations = make(map[string]string)
}

virtualnode = &appmeshv1.VirtualNode{
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: canary.Namespace,
Labels: metadata.Labels,
Annotations: filterMetadata(metadata.Annotations),
Labels: newMetadata.Labels,
Annotations: newMetadata.Annotations,
},
Spec: vnSpec,
}
Expand All @@ -187,9 +188,14 @@ func (ar *AppMeshRouter) reconcileVirtualNode(canary *flaggerv1.Canary, name str

// update virtual node
if virtualnode != nil {
if diff := cmp.Diff(vnSpec, virtualnode.Spec); diff != "" {
specDiff := cmp.Diff(vnSpec, virtualnode.Spec)
labelsDiff := cmp.Diff(newMetadata.Labels, virtualnode.Labels, cmpopts.EquateEmpty())
annotationsDiff := cmp.Diff(newMetadata.Labels, virtualnode.Annotations, cmpopts.EquateEmpty())
if specDiff != "" || labelsDiff != "" || annotationsDiff != "" {
vnClone := virtualnode.DeepCopy()
vnClone.Spec = vnSpec
vnClone.ObjectMeta.Annotations = newMetadata.Annotations
vnClone.ObjectMeta.Labels = newMetadata.Labels
_, err = ar.appmeshClient.AppmeshV1beta1().VirtualNodes(canary.Namespace).Update(context.TODO(), vnClone, metav1.UpdateOptions{})
if err != nil {
return fmt.Errorf("VirtualNode %s update error %w", name, err)
Expand Down
35 changes: 20 additions & 15 deletions pkg/router/appmesh_v1beta2.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,25 +157,26 @@ func (ar *AppMeshv1beta2Router) reconcileVirtualNode(canary *flaggerv1.Canary, n

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

newMetadata := canary.Spec.Service.Apex
if newMetadata == nil {
newMetadata = &flaggerv1.CustomMetadata{}
}
if newMetadata.Labels == nil {
newMetadata.Labels = make(map[string]string)
}
if newMetadata.Annotations == nil {
newMetadata.Annotations = make(map[string]string)
}
newMetadata.Annotations = filterMetadata(newMetadata.Annotations)

// create virtual node
if errors.IsNotFound(err) {
metadata := canary.Spec.Service.Apex
if metadata == nil {
metadata = &flaggerv1.CustomMetadata{}
}
if metadata.Labels == nil {
metadata.Labels = make(map[string]string)
}
if metadata.Annotations == nil {
metadata.Annotations = make(map[string]string)
}

virtualnode = &appmeshv1.VirtualNode{
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: canary.Namespace,
Labels: metadata.Labels,
Annotations: filterMetadata(metadata.Annotations),
Labels: newMetadata.Labels,
Annotations: newMetadata.Annotations,
},
Spec: vnSpec,
}
Expand All @@ -201,12 +202,16 @@ func (ar *AppMeshv1beta2Router) reconcileVirtualNode(canary *flaggerv1.Canary, n

// update virtual node
if virtualnode != nil {
if diff := cmp.Diff(vnSpec, virtualnode.Spec,
cmpopts.IgnoreFields(appmeshv1.VirtualNodeSpec{}, "AWSName", "MeshRef")); diff != "" {
specDiff := cmp.Diff(vnSpec, virtualnode.Spec, cmpopts.IgnoreFields(appmeshv1.VirtualNodeSpec{}, "AWSName", "MeshRef"))
labelsDiff := cmp.Diff(newMetadata.Labels, virtualnode.Labels, cmpopts.EquateEmpty())
annotationsDiff := cmp.Diff(newMetadata.Annotations, virtualnode.Annotations, cmpopts.EquateEmpty())
if specDiff != "" || labelsDiff != "" || annotationsDiff != "" {
vnClone := virtualnode.DeepCopy()
vnClone.Spec = vnSpec
vnClone.Spec.AWSName = virtualnode.Spec.AWSName
vnClone.Spec.MeshRef = virtualnode.Spec.MeshRef
vnClone.ObjectMeta.Annotations = newMetadata.Annotations
vnClone.ObjectMeta.Labels = newMetadata.Labels
_, err = ar.appmeshClient.AppmeshV1beta2().VirtualNodes(canary.Namespace).Update(context.TODO(), vnClone, metav1.UpdateOptions{})
if err != nil {
return fmt.Errorf("VirtualNode %s update error %w", name, err)
Expand Down
36 changes: 21 additions & 15 deletions pkg/router/contour.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,25 +151,26 @@ func (cr *ContourRouter) Reconcile(canary *flaggerv1.Canary) error {
}
}

newMetadata := canary.Spec.Service.Apex
if newMetadata == nil {
newMetadata = &flaggerv1.CustomMetadata{}
}
if newMetadata.Labels == nil {
newMetadata.Labels = make(map[string]string)
}
if newMetadata.Annotations == nil {
newMetadata.Annotations = make(map[string]string)
}
newMetadata.Annotations = filterMetadata(newMetadata.Annotations)

proxy, err := cr.contourClient.ProjectcontourV1().HTTPProxies(canary.Namespace).Get(context.TODO(), apexName, metav1.GetOptions{})
if errors.IsNotFound(err) {
metadata := canary.Spec.Service.Apex
if metadata == nil {
metadata = &flaggerv1.CustomMetadata{}
}
if metadata.Labels == nil {
metadata.Labels = make(map[string]string)
}
if metadata.Annotations == nil {
metadata.Annotations = make(map[string]string)
}

proxy = &contourv1.HTTPProxy{
ObjectMeta: metav1.ObjectMeta{
Name: apexName,
Namespace: canary.Namespace,
Labels: metadata.Labels,
Annotations: filterMetadata(metadata.Annotations),
Labels: newMetadata.Labels,
Annotations: newMetadata.Annotations,
},
Spec: newSpec,
Status: contourv1.HTTPProxyStatus{
Expand Down Expand Up @@ -207,13 +208,18 @@ func (cr *ContourRouter) Reconcile(canary *flaggerv1.Canary) error {

// update HTTPProxy but keep the original destination weights
if proxy != nil {
if diff := cmp.Diff(
specDiff := cmp.Diff(
newSpec,
proxy.Spec,
cmpopts.IgnoreFields(contourv1.Service{}, "Weight"),
); diff != "" {
)
labelsDiff := cmp.Diff(newMetadata.Labels, proxy.Labels, cmpopts.EquateEmpty())
annotationsDiff := cmp.Diff(newMetadata.Annotations, proxy.Annotations, cmpopts.EquateEmpty())
if specDiff != "" || labelsDiff != "" || annotationsDiff != "" {
clone := proxy.DeepCopy()
clone.Spec = newSpec
clone.ObjectMeta.Annotations = newMetadata.Annotations
clone.ObjectMeta.Labels = newMetadata.Labels

_, err = cr.contourClient.ProjectcontourV1().HTTPProxies(canary.Namespace).Update(context.TODO(), clone, metav1.UpdateOptions{})
if err != nil {
Expand Down
34 changes: 20 additions & 14 deletions pkg/router/gateway_api.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,23 +123,25 @@ func (gwr *GatewayAPIRouter) Reconcile(canary *flaggerv1.Canary) error {
context.TODO(), apexSvcName, metav1.GetOptions{},
)

newMetadata := canary.Spec.Service.Apex
if newMetadata == nil {
newMetadata = &flaggerv1.CustomMetadata{}
}
if newMetadata.Labels == nil {
newMetadata.Labels = make(map[string]string)
}
if newMetadata.Annotations == nil {
newMetadata.Annotations = make(map[string]string)
}
newMetadata.Annotations = filterMetadata(newMetadata.Annotations)

if errors.IsNotFound(err) {
metadata := canary.Spec.Service.Apex
if metadata == nil {
metadata = &flaggerv1.CustomMetadata{}
}
if metadata.Labels == nil {
metadata.Labels = make(map[string]string)
}
if metadata.Annotations == nil {
metadata.Annotations = make(map[string]string)
}
route := &v1alpha2.HTTPRoute{
ObjectMeta: metav1.ObjectMeta{
Name: apexSvcName,
Namespace: hrNamespace,
Labels: metadata.Labels,
Annotations: filterMetadata(metadata.Annotations),
Labels: newMetadata.Labels,
Annotations: newMetadata.Annotations,
},
Spec: httpRouteSpec,
}
Expand Down Expand Up @@ -167,13 +169,17 @@ func (gwr *GatewayAPIRouter) Reconcile(canary *flaggerv1.Canary) error {
}

if httpRoute != nil {
diff := cmp.Diff(
specDiff := cmp.Diff(
httpRoute.Spec, httpRouteSpec,
cmpopts.IgnoreFields(v1alpha2.BackendRef{}, "Weight"),
)
if diff != "" && httpRoute.Name != "" {
labelsDiff := cmp.Diff(newMetadata.Labels, httpRoute.Labels, cmpopts.EquateEmpty())
annotationsDiff := cmp.Diff(newMetadata.Annotations, httpRoute.Annotations, cmpopts.EquateEmpty())
if (specDiff != "" && httpRoute.Name != "") || labelsDiff != "" || annotationsDiff != "" {
hrClone := httpRoute.DeepCopy()
hrClone.Spec = httpRouteSpec
hrClone.ObjectMeta.Annotations = newMetadata.Annotations
hrClone.ObjectMeta.Labels = newMetadata.Labels
_, err := gwr.gatewayAPIClient.GatewayapiV1alpha2().HTTPRoutes(hrNamespace).
Update(context.TODO(), hrClone, metav1.UpdateOptions{})
if err != nil {
Expand Down
34 changes: 20 additions & 14 deletions pkg/router/gateway_api_v1beta1.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,23 +117,25 @@ func (gwr *GatewayAPIV1Beta1Router) Reconcile(canary *flaggerv1.Canary) error {
context.TODO(), apexSvcName, metav1.GetOptions{},
)

newMetadata := canary.Spec.Service.Apex
if newMetadata == nil {
newMetadata = &flaggerv1.CustomMetadata{}
}
if newMetadata.Labels == nil {
newMetadata.Labels = make(map[string]string)
}
if newMetadata.Annotations == nil {
newMetadata.Annotations = make(map[string]string)
}
newMetadata.Annotations = filterMetadata(newMetadata.Annotations)

if errors.IsNotFound(err) {
metadata := canary.Spec.Service.Apex
if metadata == nil {
metadata = &flaggerv1.CustomMetadata{}
}
if metadata.Labels == nil {
metadata.Labels = make(map[string]string)
}
if metadata.Annotations == nil {
metadata.Annotations = make(map[string]string)
}
route := &v1beta1.HTTPRoute{
ObjectMeta: metav1.ObjectMeta{
Name: apexSvcName,
Namespace: hrNamespace,
Labels: metadata.Labels,
Annotations: filterMetadata(metadata.Annotations),
Labels: newMetadata.Labels,
Annotations: newMetadata.Annotations,
},
Spec: httpRouteSpec,
}
Expand Down Expand Up @@ -161,13 +163,17 @@ func (gwr *GatewayAPIV1Beta1Router) Reconcile(canary *flaggerv1.Canary) error {
}

if httpRoute != nil {
diff := cmp.Diff(
specDiff := cmp.Diff(
httpRoute.Spec, httpRouteSpec,
cmpopts.IgnoreFields(v1beta1.BackendRef{}, "Weight"),
)
if diff != "" && httpRoute.Name != "" {
labelsDiff := cmp.Diff(newMetadata.Labels, httpRoute.Labels, cmpopts.EquateEmpty())
annotationsDiff := cmp.Diff(newMetadata.Annotations, httpRoute.Annotations, cmpopts.EquateEmpty())
if (specDiff != "" && httpRoute.Name != "") || labelsDiff != "" || annotationsDiff != "" {
hrClone := httpRoute.DeepCopy()
hrClone.Spec = httpRouteSpec
hrClone.ObjectMeta.Annotations = newMetadata.Annotations
hrClone.ObjectMeta.Labels = newMetadata.Labels
_, err := gwr.gatewayAPIClient.GatewayapiV1beta1().HTTPRoutes(hrNamespace).
Update(context.TODO(), hrClone, metav1.UpdateOptions{})
if err != nil {
Expand Down
36 changes: 21 additions & 15 deletions pkg/router/gloo.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,25 +98,26 @@ func (gr *GlooRouter) Reconcile(canary *flaggerv1.Canary) error {
},
}

newMetadata := canary.Spec.Service.Apex
if newMetadata == nil {
newMetadata = &flaggerv1.CustomMetadata{}
}
if newMetadata.Labels == nil {
newMetadata.Labels = make(map[string]string)
}
if newMetadata.Annotations == nil {
newMetadata.Annotations = make(map[string]string)
}
newMetadata.Annotations = filterMetadata(newMetadata.Annotations)

routeTable, err := gr.glooClient.GatewayV1().RouteTables(canary.Namespace).Get(context.TODO(), apexName, metav1.GetOptions{})
if errors.IsNotFound(err) {
metadata := canary.Spec.Service.Apex
if metadata == nil {
metadata = &flaggerv1.CustomMetadata{}
}
if metadata.Labels == nil {
metadata.Labels = make(map[string]string)
}
if metadata.Annotations == nil {
metadata.Annotations = make(map[string]string)
}

routeTable = &gatewayv1.RouteTable{
ObjectMeta: metav1.ObjectMeta{
Name: apexName,
Namespace: canary.Namespace,
Labels: metadata.Labels,
Annotations: filterMetadata(metadata.Annotations),
Labels: newMetadata.Labels,
Annotations: newMetadata.Annotations,
},
Spec: newSpec,
}
Expand All @@ -143,13 +144,18 @@ func (gr *GlooRouter) Reconcile(canary *flaggerv1.Canary) error {

// update routeTable but keep the original destination weights
if routeTable != nil {
if diff := cmp.Diff(
specDiff := cmp.Diff(
newSpec,
routeTable.Spec,
cmpopts.IgnoreFields(gatewayv1.WeightedDestination{}, "Weight"),
); diff != "" {
)
labelsDiff := cmp.Diff(newMetadata.Labels, routeTable.Labels, cmpopts.EquateEmpty())
annotationsDiff := cmp.Diff(newMetadata.Annotations, routeTable.Annotations, cmpopts.EquateEmpty())
if specDiff != "" || labelsDiff != "" || annotationsDiff != "" {
clone := routeTable.DeepCopy()
clone.Spec = newSpec
clone.ObjectMeta.Annotations = newMetadata.Annotations
clone.ObjectMeta.Labels = newMetadata.Labels

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

0 comments on commit e8aba08

Please sign in to comment.