@@ -32,6 +32,7 @@ import (
32
32
"k8s.io/client-go/tools/cache"
33
33
"k8s.io/client-go/util/workqueue"
34
34
35
+ "github.com/apache/apisix-ingress-controller/pkg/apisix"
35
36
"github.com/apache/apisix-ingress-controller/pkg/config"
36
37
"github.com/apache/apisix-ingress-controller/pkg/kube"
37
38
configv2 "github.com/apache/apisix-ingress-controller/pkg/kube/apisix/apis/config/v2"
@@ -215,12 +216,15 @@ func (c *apisixUpstreamController) sync(ctx context.Context, ev *types.Event) er
215
216
// for service discovery related configuration
216
217
if au .Spec .Discovery .ServiceName == "" || au .Spec .Discovery .Type == "" {
217
218
log .Error ("If you setup Discovery for ApisixUpstream, you need to specify the ServiceName and Type fields." )
218
- errRecord = fmt .Errorf ("No ServiceName or Type fields found" )
219
+ errRecord = fmt .Errorf ("no ServiceName or Type fields found" )
219
220
goto updateStatus
220
221
}
221
222
// updateUpstream for real
222
223
upsName := apisixv1 .ComposeExternalUpstreamName (au .Namespace , au .Name )
223
224
errRecord = c .updateUpstream (ctx , upsName , & au .Spec .ApisixUpstreamConfig , ev .Type .IsSyncEvent ())
225
+ if err == apisix .ErrNotFound {
226
+ errRecord = fmt .Errorf ("%s" , "upstream doesn't exist. It will be created after ApisixRoute is created referencing it." )
227
+ }
224
228
goto updateStatus
225
229
}
226
230
@@ -254,15 +258,22 @@ func (c *apisixUpstreamController) sync(ctx context.Context, ev *types.Event) er
254
258
cfg = au .Spec .ApisixUpstreamConfig
255
259
}
256
260
}
257
-
258
261
err := c .updateUpstream (ctx , apisixv1 .ComposeUpstreamName (namespace , name , subset .Name , port .Port , types .ResolveGranularity .Endpoint ), & cfg , ev .Type .IsSyncEvent ())
259
262
if err != nil {
260
- errRecord = err
263
+ if err == apisix .ErrNotFound {
264
+ errRecord = fmt .Errorf ("%s" , "upstream doesn't exist. It will be created after ApisixRoute is created referencing it." )
265
+ } else {
266
+ errRecord = err
267
+ }
261
268
goto updateStatus
262
269
}
263
270
err = c .updateUpstream (ctx , apisixv1 .ComposeUpstreamName (namespace , name , subset .Name , port .Port , types .ResolveGranularity .Service ), & cfg , ev .Type .IsSyncEvent ())
264
271
if err != nil {
265
- errRecord = err
272
+ if err == apisix .ErrNotFound {
273
+ errRecord = fmt .Errorf ("%s" , "upstream doesn't exist. It will be created after ApisixRoute is created referencing it." )
274
+ } else {
275
+ errRecord = err
276
+ }
266
277
goto updateStatus
267
278
}
268
279
}
@@ -330,8 +341,7 @@ func (c *apisixUpstreamController) updateUpstream(ctx context.Context, upsName s
330
341
331
342
ups , err := c .APISIX .Cluster (clusterName ).Upstream ().Get (ctx , upsName )
332
343
if err != nil {
333
- log .Errorf ("failed to get upstream %s: %s" , upsName , err )
334
- return err
344
+ return apisix .ErrNotFound
335
345
}
336
346
var newUps * apisixv1.Upstream
337
347
if cfg != nil {
@@ -373,9 +383,19 @@ func (c *apisixUpstreamController) updateExternalNodes(ctx context.Context, au *
373
383
upsName := apisixv1 .ComposeExternalUpstreamName (ns , name )
374
384
ups , err := c .APISIX .Cluster (clusterName ).Upstream ().Get (ctx , upsName )
375
385
if err != nil {
376
- log .Errorf ("failed to get upstream %s: %s" , upsName , err )
377
- c .RecordEvent (au , corev1 .EventTypeWarning , utils .ResourceSyncAborted , err )
378
- c .recordStatus (au , utils .ResourceSyncAborted , err , metav1 .ConditionFalse , au .GetGeneration ())
386
+ if err == apisix .ErrNotFound {
387
+ log .Debugw ("upstream is not referenced" ,
388
+ zap .String ("cluster" , clusterName ),
389
+ zap .String ("upstream" , upsName ),
390
+ )
391
+ err = fmt .Errorf ("%s" , "upstream doesn't exist. It will be created after ApisixRoute is created referencing it." )
392
+ c .RecordEvent (au , corev1 .EventTypeWarning , utils .ResourceSyncAborted , err )
393
+ c .recordStatus (au , utils .ResourceSyncAborted , err , metav1 .ConditionFalse , au .GetGeneration ())
394
+ } else {
395
+ c .RecordEvent (au , corev1 .EventTypeWarning , utils .ResourceSyncAborted , err )
396
+ c .recordStatus (au , utils .ResourceSyncAborted , err , metav1 .ConditionFalse , au .GetGeneration ())
397
+ log .Errorf ("failed to get upstream %s: %s" , upsName , err )
398
+ }
379
399
return err
380
400
} else if ups != nil {
381
401
nodes , err := c .translator .TranslateApisixUpstreamExternalNodes (au )
0 commit comments