Skip to content

Commit 4a9f320

Browse files
committed
move similar generate upstreams to a function
1 parent ea0aee6 commit 4a9f320

File tree

1 file changed

+66
-51
lines changed

1 file changed

+66
-51
lines changed

internal/configs/virtualserver.go

Lines changed: 66 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -473,62 +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-
backup := 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, backup)
489-
upstreams = append(upstreams, ups)
490-
u.TLS.Enable = isTLSEnabled(u, vsc.spiffeCerts, vsEx.VirtualServer.Spec.InternalRoute)
491-
crUpstreams[upstreamName] = u
492-
493-
if hc := generateHealthCheck(u, upstreamName, vsc.cfgParams); hc != nil {
494-
healthChecks = append(healthChecks, *hc)
495-
if u.HealthCheck.StatusMatch != "" {
496-
statusMatches = append(
497-
statusMatches,
498-
generateUpstreamStatusMatch(upstreamName, u.HealthCheck.StatusMatch),
499-
)
500-
}
501-
}
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+
)
502489
}
503490
// generate upstreams for each VirtualServerRoute
504491
for _, vsr := range vsEx.VirtualServerRoutes {
505492
upstreamNamer := NewUpstreamNamerForVirtualServerRoute(vsEx.VirtualServer, vsr)
506493
for _, u := range vsr.Spec.Upstreams {
507-
if (sslConfig == nil || !vsc.cfgParams.HTTP2) && isGRPC(u.Type) {
508-
vsc.addWarningf(vsr, "gRPC cannot be configured for upstream %s. gRPC requires enabled HTTP/2 and TLS termination", u.Name)
509-
}
510-
511-
upstreamName := upstreamNamer.GetNameForUpstream(u.Name)
512-
upstreamNamespace := vsr.Namespace
513-
endpoints := vsc.generateEndpointsForUpstream(vsr, upstreamNamespace, u, vsEx)
514-
backup := vsc.generateBackupEndpointsForUpstream(vsEx.VirtualServer, upstreamNamespace, u, vsEx)
515-
516-
// isExternalNameSvc is always false for OSS
517-
_, isExternalNameSvc := vsEx.ExternalNameSvcs[GenerateExternalNameSvcKey(upstreamNamespace, u.Service)]
518-
ups := vsc.generateUpstream(vsr, upstreamName, u, isExternalNameSvc, endpoints, backup)
519-
upstreams = append(upstreams, ups)
520-
u.TLS.Enable = isTLSEnabled(u, vsc.spiffeCerts, vsEx.VirtualServer.Spec.InternalRoute)
521-
crUpstreams[upstreamName] = u
522-
523-
if hc := generateHealthCheck(u, upstreamName, vsc.cfgParams); hc != nil {
524-
healthChecks = append(healthChecks, *hc)
525-
if u.HealthCheck.StatusMatch != "" {
526-
statusMatches = append(
527-
statusMatches,
528-
generateUpstreamStatusMatch(upstreamName, u.HealthCheck.StatusMatch),
529-
)
530-
}
531-
}
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+
)
532507
}
533508
}
534509

@@ -921,6 +896,46 @@ func (vsc *virtualServerConfigurator) GenerateVirtualServerConfig(
921896
return vsCfg, vsc.warnings
922897
}
923898

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(owner, 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+
924939
// rateLimit hold the configuration for the ratelimiting Policy
925940
type rateLimit struct {
926941
Reqs []version2.LimitReq

0 commit comments

Comments
 (0)