@@ -18,14 +18,15 @@ package controllers
1818
1919import (
2020 "context"
21- "encoding/json"
2221 "fmt"
22+ "reflect"
2323
2424 "gitee.com/zongzw/bigip-kubernetes-gateway/k8s"
2525 "gitee.com/zongzw/bigip-kubernetes-gateway/pkg"
2626 "k8s.io/apimachinery/pkg/runtime"
2727 ctrl "sigs.k8s.io/controller-runtime"
2828 "sigs.k8s.io/controller-runtime/pkg/client"
29+ "sigs.k8s.io/controller-runtime/pkg/log"
2930
3031 v1 "k8s.io/api/core/v1"
3132
@@ -51,46 +52,78 @@ func (r *EndpointsReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
5152
5253 var obj v1.Endpoints
5354 // zlog := log.FromContext(ctx)
54- // zlog.V(1).Info("resource event: " + req.NamespacedName.String())
55+ // // too many logs.
56+ // zlog.V(1).Info("endpoint event: " + req.NamespacedName.String())
5557 if err := r .Get (ctx , req .NamespacedName , & obj ); err != nil {
5658 if client .IgnoreNotFound (err ) == nil {
5759 svc := pkg .ActiveSIGs .GetService (req .NamespacedName .String ())
60+ ocfgs , err := pkg .ParseRelated ([]* gatewayv1beta1.Gateway {}, []* gatewayv1beta1.HTTPRoute {}, []* v1.Service {svc })
61+ if err != nil {
62+ return ctrl.Result {}, err
63+ }
5864 hrs := pkg .ActiveSIGs .HTTPRoutesRefsOf (svc )
5965 pkg .ActiveSIGs .UnsetEndpoints (req .NamespacedName .String ())
60-
61- return reapply (hrs )
66+ ncfgs , err := pkg .ParseRelated ([]* gatewayv1beta1.Gateway {}, hrs , []* v1.Service {})
67+ if err != nil {
68+ return ctrl.Result {}, err
69+ }
70+ applyCfgs (ocfgs , ncfgs )
71+ return ctrl.Result {}, nil
6272 } else {
6373 return ctrl.Result {}, err
6474 }
6575 } else {
66- cpObj := obj .DeepCopy ()
67- pkg .ActiveSIGs .SetEndpoints (cpObj )
6876 svc := pkg .ActiveSIGs .GetService (req .NamespacedName .String ())
69- hrs := pkg .ActiveSIGs .HTTPRoutesRefsOf (svc )
70- return reapply (hrs )
77+ ocfgs , err := pkg .ParseRelated ([]* gatewayv1beta1.Gateway {}, []* gatewayv1beta1.HTTPRoute {}, []* v1.Service {svc })
78+ if err != nil {
79+ return ctrl.Result {}, err
80+ }
81+ pkg .ActiveSIGs .SetEndpoints (obj .DeepCopy ())
82+ ncfgs , err := pkg .ParseRelated ([]* gatewayv1beta1.Gateway {}, []* gatewayv1beta1.HTTPRoute {}, []* v1.Service {svc })
83+ if err != nil {
84+ return ctrl.Result {}, err
85+ }
86+ applyCfgs (ocfgs , ncfgs )
87+ return ctrl.Result {}, nil
7188 }
7289}
7390
7491func (r * ServiceReconciler ) Reconcile (ctx context.Context , req ctrl.Request ) (ctrl.Result , error ) {
7592
7693 var obj v1.Service
77- // zlog := log.FromContext(ctx)
78- // zlog.V(1).Info("resource event: " + req.NamespacedName.String())
94+ zlog := log .FromContext (ctx )
95+ zlog .V (1 ).Info ("Service event: " + req .NamespacedName .String ())
7996 if err := r .Get (ctx , req .NamespacedName , & obj ); err != nil {
8097 if client .IgnoreNotFound (err ) == nil {
8198 svc := pkg .ActiveSIGs .GetService (req .NamespacedName .String ())
99+ ocfgs , err := pkg .ParseRelated ([]* gatewayv1beta1.Gateway {}, []* gatewayv1beta1.HTTPRoute {}, []* v1.Service {svc })
100+ if err != nil {
101+ return ctrl.Result {}, err
102+ }
82103 hrs := pkg .ActiveSIGs .HTTPRoutesRefsOf (svc )
83104 pkg .ActiveSIGs .UnsetService (req .NamespacedName .String ())
84- return reapply (hrs )
105+ ncfgs , err := pkg .ParseRelated ([]* gatewayv1beta1.Gateway {}, hrs , []* v1.Service {})
106+ if err != nil {
107+ return ctrl.Result {}, err
108+ }
109+ applyCfgs (ocfgs , ncfgs )
110+ return ctrl.Result {}, nil
85111 } else {
86112 return ctrl.Result {}, err
87113 }
88114 } else {
89- cpObj := obj .DeepCopy ()
90- pkg .ActiveSIGs .SetService (cpObj )
91115 svc := pkg .ActiveSIGs .GetService (req .NamespacedName .String ())
92- hrs := pkg .ActiveSIGs .HTTPRoutesRefsOf (svc )
93- return reapply (hrs )
116+ ocfgs , err := pkg .ParseRelated ([]* gatewayv1beta1.Gateway {}, []* gatewayv1beta1.HTTPRoute {}, []* v1.Service {svc })
117+ if err != nil {
118+ return ctrl.Result {}, err
119+ }
120+ pkg .ActiveSIGs .SetService (obj .DeepCopy ())
121+ ncfgs , err := pkg .ParseRelated ([]* gatewayv1beta1.Gateway {}, []* gatewayv1beta1.HTTPRoute {}, []* v1.Service {svc })
122+ if err != nil {
123+ return ctrl.Result {}, err
124+ }
125+ applyCfgs (ocfgs , ncfgs )
126+ return ctrl.Result {}, nil
94127 }
95128}
96129
@@ -136,24 +169,16 @@ func SetupReconcilerForCoreV1WithManager(mgr ctrl.Manager) error {
136169 }
137170}
138171
139- func reapply (hrs []* gatewayv1beta1.HTTPRoute ) (ctrl.Result , error ) {
140-
141- if len (hrs ) == 0 {
142- return ctrl.Result {}, nil
172+ func applyCfgs (ocfgs , ncfgs map [string ]interface {}) {
173+ if reflect .DeepEqual (ocfgs , ncfgs ) {
174+ return
143175 }
144- if ncfgs , err := pkg .ParseRelated ([]* gatewayv1beta1.Gateway {}, hrs , []* v1.Service {}); err != nil {
145- return ctrl.Result {}, err
146- } else {
147- bcfgs , _ := json .Marshal (ncfgs )
148- ctrl .Log .V (1 ).Info (fmt .Sprintf ("sending deploy configs: %s" , bcfgs ))
149- pkg .PendingDeploys <- pkg.DeployRequest {
150- Meta : "upserting svc/eps related by httproutes" ,
151- From : nil ,
152- To : & ncfgs ,
153- StatusFunc : func () {
154- // do something
155- },
156- }
157- return ctrl.Result {}, nil
176+ pkg .PendingDeploys <- pkg.DeployRequest {
177+ Meta : "upserting svc/eps" ,
178+ From : & ocfgs ,
179+ To : & ncfgs ,
180+ StatusFunc : func () {
181+ // do something
182+ },
158183 }
159184}
0 commit comments