@@ -473,63 +473,37 @@ func (vsc *virtualServerConfigurator) GenerateVirtualServerConfig(
473473
474474 // generate upstreams for VirtualServer
475475 for _ , u := range vsEx .VirtualServer .Spec .Upstreams {
476-
477- if (sslConfig == nil || ! vsc .cfgParams .HTTP2 ) && isGRPC (u .Type ) {
478- vsc .addWarningf (vsEx .VirtualServer , "gRPC cannot be configured for upstream %s. gRPC requires enabled HTTP/2 and TLS termination." , u .Name )
479- }
480-
481- upstreamName := virtualServerUpstreamNamer .GetNameForUpstream (u .Name )
482- upstreamNamespace := vsEx .VirtualServer .Namespace
483- endpoints := vsc .generateEndpointsForUpstream (vsEx .VirtualServer , upstreamNamespace , u , vsEx )
484- backupEndpoints := vsc .generateBackupEndpointsForUpstream (vsEx .VirtualServer , upstreamNamespace , u , vsEx )
485-
486- // isExternalNameSvc is always false for OSS
487- _ , isExternalNameSvc := vsEx .ExternalNameSvcs [GenerateExternalNameSvcKey (upstreamNamespace , u .Service )]
488- ups := vsc .generateUpstream (vsEx .VirtualServer , upstreamName , u , isExternalNameSvc , endpoints , backupEndpoints )
489- upstreams = append (upstreams , ups )
490-
491- u .TLS .Enable = isTLSEnabled (u , vsc .spiffeCerts , vsEx .VirtualServer .Spec .InternalRoute )
492- crUpstreams [upstreamName ] = u
493-
494- if hc := generateHealthCheck (u , upstreamName , vsc .cfgParams ); hc != nil {
495- healthChecks = append (healthChecks , * hc )
496- if u .HealthCheck .StatusMatch != "" {
497- statusMatches = append (
498- statusMatches ,
499- generateUpstreamStatusMatch (upstreamName , u .HealthCheck .StatusMatch ),
500- )
501- }
502- }
476+ upstreams , healthChecks , statusMatches = generateUpstreams (
477+ sslConfig ,
478+ vsc ,
479+ u ,
480+ vsEx .VirtualServer ,
481+ vsEx .VirtualServer .Namespace ,
482+ virtualServerUpstreamNamer ,
483+ vsEx ,
484+ upstreams ,
485+ crUpstreams ,
486+ healthChecks ,
487+ statusMatches ,
488+ )
503489 }
504490 // generate upstreams for each VirtualServerRoute
505491 for _ , vsr := range vsEx .VirtualServerRoutes {
506492 upstreamNamer := NewUpstreamNamerForVirtualServerRoute (vsEx .VirtualServer , vsr )
507493 for _ , u := range vsr .Spec .Upstreams {
508- if (sslConfig == nil || ! vsc .cfgParams .HTTP2 ) && isGRPC (u .Type ) {
509- vsc .addWarningf (vsr , "gRPC cannot be configured for upstream %s. gRPC requires enabled HTTP/2 and TLS termination" , u .Name )
510- }
511-
512- upstreamName := upstreamNamer .GetNameForUpstream (u .Name )
513- upstreamNamespace := vsr .Namespace
514- endpoints := vsc .generateEndpointsForUpstream (vsr , upstreamNamespace , u , vsEx )
515- backup := vsc .generateBackupEndpointsForUpstream (vsEx .VirtualServer , upstreamNamespace , u , vsEx )
516-
517- // isExternalNameSvc is always false for OSS
518- _ , isExternalNameSvc := vsEx .ExternalNameSvcs [GenerateExternalNameSvcKey (upstreamNamespace , u .Service )]
519- ups := vsc .generateUpstream (vsr , upstreamName , u , isExternalNameSvc , endpoints , backup )
520- upstreams = append (upstreams , ups )
521- u .TLS .Enable = isTLSEnabled (u , vsc .spiffeCerts , vsEx .VirtualServer .Spec .InternalRoute )
522- crUpstreams [upstreamName ] = u
523-
524- if hc := generateHealthCheck (u , upstreamName , vsc .cfgParams ); hc != nil {
525- healthChecks = append (healthChecks , * hc )
526- if u .HealthCheck .StatusMatch != "" {
527- statusMatches = append (
528- statusMatches ,
529- generateUpstreamStatusMatch (upstreamName , u .HealthCheck .StatusMatch ),
530- )
531- }
532- }
494+ upstreams , healthChecks , statusMatches = generateUpstreams (
495+ sslConfig ,
496+ vsc ,
497+ u ,
498+ vsr ,
499+ vsr .Namespace ,
500+ upstreamNamer ,
501+ vsEx ,
502+ upstreams ,
503+ crUpstreams ,
504+ healthChecks ,
505+ statusMatches ,
506+ )
533507 }
534508 }
535509
@@ -552,11 +526,7 @@ func (vsc *virtualServerConfigurator) GenerateVirtualServerConfig(
552526
553527 // generates config for VirtualServer routes
554528 for _ , r := range vsEx .VirtualServer .Spec .Routes {
555- errorPages := errorPageDetails {
556- pages : r .ErrorPages ,
557- index : len (errorPageLocations ),
558- owner : vsEx .VirtualServer ,
559- }
529+ errorPages := generateErrorPageDetails (r .ErrorPages , errorPageLocations , vsEx .VirtualServer )
560530 errorPageLocations = append (errorPageLocations , generateErrorPageLocations (errorPages .index , errorPages .pages )... )
561531
562532 // ignore routes that reference VirtualServerRoute
@@ -700,11 +670,7 @@ func (vsc *virtualServerConfigurator) GenerateVirtualServerConfig(
700670 isVSR := true
701671 upstreamNamer := NewUpstreamNamerForVirtualServerRoute (vsEx .VirtualServer , vsr )
702672 for _ , r := range vsr .Spec .Subroutes {
703- errorPages := errorPageDetails {
704- pages : r .ErrorPages ,
705- index : len (errorPageLocations ),
706- owner : vsr ,
707- }
673+ errorPages := generateErrorPageDetails (r .ErrorPages , errorPageLocations , vsr )
708674 errorPageLocations = append (errorPageLocations , generateErrorPageLocations (errorPages .index , errorPages .pages )... )
709675 vsrNamespaceName := fmt .Sprintf ("%v/%v" , vsr .Namespace , vsr .Name )
710676 // use the VirtualServer error pages if the route does not define any
@@ -930,6 +896,46 @@ func (vsc *virtualServerConfigurator) GenerateVirtualServerConfig(
930896 return vsCfg , vsc .warnings
931897}
932898
899+ func generateUpstreams (
900+ sslConfig * version2.SSL ,
901+ vsc * virtualServerConfigurator ,
902+ u conf_v1.Upstream ,
903+ owner runtime.Object ,
904+ ownerNamespace string ,
905+ upstreamNamer * upstreamNamer ,
906+ vsEx * VirtualServerEx ,
907+ upstreams []version2.Upstream ,
908+ crUpstreams map [string ]conf_v1.Upstream ,
909+ healthChecks []version2.HealthCheck ,
910+ statusMatches []version2.StatusMatch ,
911+ ) ([]version2.Upstream , []version2.HealthCheck , []version2.StatusMatch ) {
912+ if (sslConfig == nil || ! vsc .cfgParams .HTTP2 ) && isGRPC (u .Type ) {
913+ vsc .addWarningf (owner , "gRPC cannot be configured for upstream %s. gRPC requires enabled HTTP/2 and TLS termination" , u .Name )
914+ }
915+
916+ upstreamName := upstreamNamer .GetNameForUpstream (u .Name )
917+ endpoints := vsc .generateEndpointsForUpstream (owner , ownerNamespace , u , vsEx )
918+ backup := vsc .generateBackupEndpointsForUpstream (vsEx .VirtualServer , ownerNamespace , u , vsEx )
919+
920+ // isExternalNameSvc is always false for OSS
921+ _ , isExternalNameSvc := vsEx .ExternalNameSvcs [GenerateExternalNameSvcKey (ownerNamespace , u .Service )]
922+ ups := vsc .generateUpstream (owner , upstreamName , u , isExternalNameSvc , endpoints , backup )
923+ upstreams = append (upstreams , ups )
924+ u .TLS .Enable = isTLSEnabled (u , vsc .spiffeCerts , vsEx .VirtualServer .Spec .InternalRoute )
925+ crUpstreams [upstreamName ] = u
926+
927+ if hc := generateHealthCheck (u , upstreamName , vsc .cfgParams ); hc != nil {
928+ healthChecks = append (healthChecks , * hc )
929+ if u .HealthCheck .StatusMatch != "" {
930+ statusMatches = append (
931+ statusMatches ,
932+ generateUpstreamStatusMatch (upstreamName , u .HealthCheck .StatusMatch ),
933+ )
934+ }
935+ }
936+ return upstreams , healthChecks , statusMatches
937+ }
938+
933939// rateLimit hold the configuration for the ratelimiting Policy
934940type rateLimit struct {
935941 Reqs []version2.LimitReq
@@ -3267,6 +3273,14 @@ func generateErrorPages(errPageIndex int, errorPages []conf_v1.ErrorPage) []vers
32673273 return ePages
32683274}
32693275
3276+ func generateErrorPageDetails (errorPages []conf_v1.ErrorPage , errorPageLocations []version2.ErrorPageLocation , owner runtime.Object ) errorPageDetails {
3277+ return errorPageDetails {
3278+ pages : errorPages ,
3279+ index : len (errorPageLocations ),
3280+ owner : owner ,
3281+ }
3282+ }
3283+
32703284func generateErrorPageLocations (errPageIndex int , errorPages []conf_v1.ErrorPage ) []version2.ErrorPageLocation {
32713285 var errorPageLocations []version2.ErrorPageLocation
32723286 for i , e := range errorPages {
0 commit comments