@@ -78,6 +78,21 @@ func (t *translator) TranslateRouteV1(ar *configv1.ApisixRoute) (*TranslateConte
7878 return ctx , nil
7979}
8080
81+ // TranslateRouteV2alpha1NotStrictly translates route v2alpha1 with a loose way, only generate ID and Name for delete Event.
82+ func (t * translator ) TranslateRouteV2alpha1NotStrictly (ar * configv2alpha1.ApisixRoute ) (* TranslateContext , error ) {
83+ ctx := & TranslateContext {
84+ upstreamMap : make (map [string ]struct {}),
85+ }
86+
87+ if err := t .translateHTTPRouteNotStrictly (ctx , ar ); err != nil {
88+ return nil , err
89+ }
90+ if err := t .translateTCPRouteNotStrictly (ctx , ar ); err != nil {
91+ return nil , err
92+ }
93+ return ctx , nil
94+ }
95+
8196func (t * translator ) TranslateRouteV2alpha1 (ar * configv2alpha1.ApisixRoute ) (* TranslateContext , error ) {
8297 ctx := & TranslateContext {
8398 upstreamMap : make (map [string ]struct {}),
@@ -92,6 +107,32 @@ func (t *translator) TranslateRouteV2alpha1(ar *configv2alpha1.ApisixRoute) (*Tr
92107 return ctx , nil
93108}
94109
110+ // translateHTTPRouteNotStrictly translates http route with a loose way, only generate ID and Name for delete Event.
111+ func (t * translator ) translateHTTPRouteNotStrictly (ctx * TranslateContext , ar * configv2alpha1.ApisixRoute ) error {
112+ for _ , part := range ar .Spec .HTTP {
113+ backends := part .Backends
114+ backend := part .Backend
115+ if len (backends ) > 0 {
116+ // Use the first backend as the default backend in Route,
117+ // others will be configured in traffic-split plugin.
118+ backend = backends [0 ]
119+ } // else use the deprecated Backend.
120+ upstreamName := apisixv1 .ComposeUpstreamName (ar .Namespace , backend .ServiceName , backend .Subset , backend .ServicePort .IntVal )
121+ route := apisixv1 .NewDefaultRoute ()
122+ route .Name = apisixv1 .ComposeRouteName (ar .Namespace , ar .Name , part .Name )
123+ route .ID = id .GenID (route .Name )
124+ ctx .addRoute (route )
125+ if ! ctx .checkUpstreamExist (upstreamName ) {
126+ ups , err := t .translateUpstreamNotStrictly (ar .Namespace , backend .ServiceName , backend .Subset , backend .ServicePort .IntVal )
127+ if err != nil {
128+ return err
129+ }
130+ ctx .addUpstream (ups )
131+ }
132+ }
133+ return nil
134+ }
135+
95136func (t * translator ) translateHTTPRoute (ctx * TranslateContext , ar * configv2alpha1.ApisixRoute ) error {
96137 ruleNameMap := make (map [string ]struct {})
97138 for _ , part := range ar .Spec .HTTP {
@@ -304,6 +345,27 @@ func (t *translator) translateRouteMatchExprs(nginxVars []configv2alpha1.ApisixR
304345 return vars , nil
305346}
306347
348+ // translateTCPRouteNotStrictly translates tcp route with a loose way, only generate ID and Name for delete Event.
349+ func (t * translator ) translateTCPRouteNotStrictly (ctx * TranslateContext , ar * configv2alpha1.ApisixRoute ) error {
350+ for _ , part := range ar .Spec .TCP {
351+ backend := & part .Backend
352+ sr := apisixv1 .NewDefaultStreamRoute ()
353+ name := apisixv1 .ComposeStreamRouteName (ar .Namespace , ar .Name , part .Name )
354+ sr .ID = id .GenID (name )
355+ sr .ServerPort = part .Match .IngressPort
356+ ups , err := t .translateUpstreamNotStrictly (ar .Namespace , backend .ServiceName , backend .Subset , backend .ServicePort .IntVal )
357+ if err != nil {
358+ return err
359+ }
360+ sr .UpstreamId = ups .ID
361+ ctx .addStreamRoute (sr )
362+ if ! ctx .checkUpstreamExist (ups .Name ) {
363+ ctx .addUpstream (ups )
364+ }
365+ }
366+ return nil
367+ }
368+
307369func (t * translator ) translateTCPRoute (ctx * TranslateContext , ar * configv2alpha1.ApisixRoute ) error {
308370 ruleNameMap := make (map [string ]struct {})
309371 for _ , part := range ar .Spec .TCP {
@@ -329,8 +391,12 @@ func (t *translator) translateTCPRoute(ctx *TranslateContext, ar *configv2alpha1
329391 if err != nil {
330392 return err
331393 }
332- sr .Upstream = ups
394+ sr .UpstreamId = ups . ID
333395 ctx .addStreamRoute (sr )
396+ if ! ctx .checkUpstreamExist (ups .Name ) {
397+ ctx .addUpstream (ups )
398+ }
399+
334400 }
335401 return nil
336402}
0 commit comments