@@ -78,27 +78,25 @@ func (p *Parser) ingressRulesFromHTTPRoute(result *ingressRules, httproute *gate
7878// ingressRulesFromHTTPRouteWithCombinedServiceRoutes generates a set of proto-Kong routes (ingress rules) from an HTTPRoute.
7979// If multiple rules in the HTTPRoute use the same Service, it combines them into a single Kong route.
8080func (p * Parser ) ingressRulesFromHTTPRouteWithCombinedServiceRoutes (httproute * gatewayv1beta1.HTTPRoute , result * ingressRules ) error {
81- for _ , translationMeta := range translators .TranslateHTTPRoute (httproute ) {
81+ for _ , kongServiceTranslation := range translators .TranslateHTTPRoute (httproute ) {
8282 // HTTPRoute uses a wrapper HTTPBackendRef to add optional filters to its BackendRefs
83- backendRefs := httpBackendRefsToBackendRefs (translationMeta .BackendRefs )
83+ backendRefs := httpBackendRefsToBackendRefs (kongServiceTranslation .BackendRefs )
8484
85- // use the original index of the first rule that uses this service as the rule number
86- firstCombinedRuleNum := translationMeta .RulesNumbers [0 ]
85+ serviceName := kongServiceTranslation .Name
8786
8887 // create a service and attach the routes to it
89- service , err := generateKongServiceFromBackendRefWithRuleNumber (p .logger , p .storer , result , httproute , firstCombinedRuleNum , "http" , backendRefs ... )
88+ service , err := generateKongServiceFromBackendRefWithName (p .logger , p .storer , result , serviceName , httproute , "http" , backendRefs ... )
9089 if err != nil {
9190 return err
9291 }
9392
9493 // generate the routes for the service and attach them to the service
95- for j , rule := range translationMeta .Rules {
96- ruleNumber := translationMeta .RulesNumbers [j ]
97- routes , err := generateKongRoutesFromHTTPRouteRule (httproute , ruleNumber , rule , p .flagEnabledRegexPathPrefix )
94+ for _ , kongRouteTranslation := range kongServiceTranslation .KongRoutes {
95+ route , err := generateKongRouteFromTranslation (httproute , kongRouteTranslation , p .flagEnabledRegexPathPrefix )
9896 if err != nil {
9997 return err
10098 }
101- service .Routes = append (service .Routes , routes ... )
99+ service .Routes = append (service .Routes , route )
102100 }
103101
104102 // cache the service to avoid duplicates in further loop iterations
@@ -219,6 +217,30 @@ func generateKongRoutesFromHTTPRouteRule(
219217 return routes , nil
220218}
221219
220+ func generateKongRouteFromTranslation (
221+ httproute * gatewayv1beta1.HTTPRoute ,
222+ translation translators.KongRouteTranslation ,
223+ addRegexPrefix bool ,
224+ ) (kongstate.Route , error ) {
225+ // gather the k8s object information and hostnames from the httproute
226+ objectInfo := util .FromK8sObject (httproute )
227+
228+ // get the hostnames from the HTTPRoute
229+ hostnames := getHTTPRouteHostnamesAsSliceOfStringPointers (httproute )
230+
231+ // generate kong plugins from rule.filters
232+ plugins := generatePluginsFromHTTPRouteFilters (translation .Filters )
233+
234+ return generateKongRouteFromHTTPRouteMatches (
235+ translation .Name ,
236+ translation .Matches ,
237+ objectInfo ,
238+ hostnames ,
239+ plugins ,
240+ addRegexPrefix ,
241+ )
242+ }
243+
222244// generateKongRouteFromHTTPRouteMatches converts an HTTPRouteMatches to a Kong Route object.
223245// This function assumes that the HTTPRouteMatches share the query params, headers and methods.
224246func generateKongRouteFromHTTPRouteMatches (
0 commit comments