Skip to content

Commit 6bdf26e

Browse files
committed
fix: http route
Signed-off-by: ashing <[email protected]>
1 parent 2527285 commit 6bdf26e

File tree

1 file changed

+73
-16
lines changed

1 file changed

+73
-16
lines changed

internal/provider/adc/adc.go

Lines changed: 73 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"errors"
88
"os"
99
"os/exec"
10+
"slices"
1011
"sync"
1112

1213
"go.uber.org/zap"
@@ -147,36 +148,50 @@ func (d *adcClient) Update(ctx context.Context, tctx *provider.TranslateContext,
147148
err error
148149
)
149150

151+
rk := ResourceKind{
152+
Kind: obj.GetObjectKind().GroupVersionKind().Kind,
153+
Namespace: obj.GetNamespace(),
154+
Name: obj.GetName(),
155+
}
150156
switch t := obj.(type) {
151157
case *gatewayv1.HTTPRoute:
152-
result, err = d.translator.TranslateHTTPRoute(tctx, t.DeepCopy())
158+
if result, err = d.translator.TranslateHTTPRoute(tctx, t.DeepCopy()); err != nil {
159+
return err
160+
}
153161
resourceTypes = append(resourceTypes, "service")
162+
// delete http route if old configs diff with new configs exist
163+
if err = d.DeleteHTTPRoute(ctx, tctx, t.DeepCopy()); err != nil {
164+
return err
165+
}
154166
case *gatewayv1.Gateway:
155-
result, err = d.translator.TranslateGateway(tctx, t.DeepCopy())
167+
if result, err = d.translator.TranslateGateway(tctx, t.DeepCopy()); err != nil {
168+
return err
169+
}
156170
resourceTypes = append(resourceTypes, "global_rule", "ssl", "plugin_metadata")
171+
if err = d.updateConfigs(rk, tctx); err != nil {
172+
return err
173+
}
157174
case *networkingv1.Ingress:
158-
result, err = d.translator.TranslateIngress(tctx, t.DeepCopy())
175+
if result, err = d.translator.TranslateIngress(tctx, t.DeepCopy()); err != nil {
176+
return err
177+
}
159178
resourceTypes = append(resourceTypes, "service", "ssl")
179+
if err = d.updateConfigs(rk, tctx); err != nil {
180+
return err
181+
}
160182
case *v1alpha1.Consumer:
161-
result, err = d.translator.TranslateConsumerV1alpha1(tctx, t.DeepCopy())
183+
if result, err = d.translator.TranslateConsumerV1alpha1(tctx, t.DeepCopy()); err != nil {
184+
return err
185+
}
162186
resourceTypes = append(resourceTypes, "consumer")
163-
}
164-
if err != nil {
165-
return err
187+
if err = d.updateConfigs(rk, tctx); err != nil {
188+
return err
189+
}
166190
}
167191
if result == nil {
168192
return nil
169193
}
170194

171-
// update adc configs
172-
rk := ResourceKind{
173-
Kind: obj.GetObjectKind().GroupVersionKind().Kind,
174-
Namespace: obj.GetNamespace(),
175-
Name: obj.GetName(),
176-
}
177-
if err := d.updateConfigs(rk, tctx); err != nil {
178-
return err
179-
}
180195
configs := d.getConfigs(rk)
181196

182197
return d.sync(Task{
@@ -194,6 +209,48 @@ func (d *adcClient) Update(ctx context.Context, tctx *provider.TranslateContext,
194209
})
195210
}
196211

212+
func (d *adcClient) DeleteHTTPRoute(ctx context.Context, tctx *provider.TranslateContext, obj client.Object) error {
213+
// diff adc configs
214+
rk := ResourceKind{
215+
Kind: obj.GetObjectKind().GroupVersionKind().Kind,
216+
Namespace: obj.GetNamespace(),
217+
Name: obj.GetName(),
218+
}
219+
220+
oldConfigs := d.getConfigs(rk)
221+
err := d.updateConfigs(rk, tctx)
222+
if err != nil {
223+
return err
224+
}
225+
newConfigs := d.getConfigs(rk)
226+
227+
// diff old configs and new configs
228+
var deleteConfigs []adcConfig
229+
for _, config := range oldConfigs {
230+
if !slices.ContainsFunc(newConfigs, func(c adcConfig) bool {
231+
return c.ServerAddr == config.ServerAddr && c.Token == config.Token
232+
}) {
233+
deleteConfigs = append(deleteConfigs, config)
234+
}
235+
}
236+
237+
if len(deleteConfigs) > 0 {
238+
log.Debugw("http route delete configs", zap.Any("configs", deleteConfigs))
239+
// sync old delete
240+
err = d.sync(Task{
241+
Name: obj.GetName(),
242+
Labels: label.GenLabel(obj),
243+
ResourceTypes: []string{"service"},
244+
configs: deleteConfigs,
245+
})
246+
if err != nil {
247+
return err
248+
}
249+
}
250+
251+
return nil
252+
}
253+
197254
func (d *adcClient) Delete(ctx context.Context, obj client.Object) error {
198255
log.Debugw("deleting object", zap.Any("object", obj))
199256

0 commit comments

Comments
 (0)