Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 24 additions & 27 deletions internal/controller/reconcile-networking.go
Original file line number Diff line number Diff line change
Expand Up @@ -264,49 +264,46 @@ func (c *Controller) getUpdatedTenantVirtualServiceObject(cat *v1alpha1.CAPTenan
}

func (c *Controller) getVirtualServiceHttpRoutes(cat *v1alpha1.CAPTenant, currentCavName string, headers *networkingv1.Headers) ([]*networkingv1.HTTPRoute, error) {
var (
httpRoutes []*networkingv1.HTTPRoute
prevCav *v1alpha1.CAPApplicationVersion
prevDest *networkingv1.Destination
err error
)

// Lookup previous CAV (if any)
if len(cat.Status.PreviousCAPApplicationVersions) > 0 {
prevCavName := cat.Status.PreviousCAPApplicationVersions[len(cat.Status.PreviousCAPApplicationVersions)-1]
prevCav, err = c.crdInformerFactory.Sme().V1alpha1().CAPApplicationVersions().Lister().CAPApplicationVersions(cat.Namespace).Get(prevCavName)
type prevCavInfo struct {
cav *v1alpha1.CAPApplicationVersion
dest *networkingv1.Destination
}

if err == nil { // only if found
if prevDest, err = c.getVirtualServiceHttpRouteDestination(prevCavName, cat.Namespace); err != nil {
return nil, err
}
} else if !errors.IsNotFound(err) {
return nil, err
// Get all previous CAVs (skip any that are missing or have no router port info)
var prevCavs []prevCavInfo
for _, prevCavName := range cat.Status.PreviousCAPApplicationVersions {
prevCav, err := c.crdInformerFactory.Sme().V1alpha1().CAPApplicationVersions().Lister().CAPApplicationVersions(cat.Namespace).Get(prevCavName)
if err != nil {
continue
}
prevDest, err := c.getVirtualServiceHttpRouteDestination(prevCavName, cat.Namespace)
if err != nil {
continue
}
prevCavs = append(prevCavs, prevCavInfo{cav: prevCav, dest: prevDest})
}

// Lookup current CAV destination
// Lookup current CAV destination and object
currentDest, err := c.getVirtualServiceHttpRouteDestination(currentCavName, cat.Namespace)
if err != nil {
return nil, err
}

// Retrieve current CAV for logout endpointannotations
currentCav, err := c.crdInformerFactory.Sme().V1alpha1().CAPApplicationVersions().Lister().CAPApplicationVersions(cat.Namespace).Get(currentCavName)
if err != nil {
return nil, err
}

// --- Add routes ---
// Logoff/logout routes
if prevDest != nil {
httpRoutes = append(httpRoutes, buildVirtualServiceLogOffHttpRoute(prevCav.Name, prevCav.Annotations[AnnotationLogoutEndpoint], prevDest, headers))
var httpRoutes []*networkingv1.HTTPRoute

// Logoff routes: all prev CAVs, then current
for _, p := range prevCavs {
httpRoutes = append(httpRoutes, buildVirtualServiceLogOffHttpRoute(p.cav.Name, p.cav.Annotations[AnnotationLogoutEndpoint], p.dest, headers))
}
httpRoutes = append(httpRoutes, buildVirtualServiceLogOffHttpRoute(currentCavName, currentCav.Annotations[AnnotationLogoutEndpoint], currentDest, headers))

// Cookie routes
if prevDest != nil {
httpRoutes = append(httpRoutes, buildVirtualServiceCookieHttpRoute(prevCav.Name, prevDest))
// Cookie routes: all prev CAVs, then current
for _, p := range prevCavs {
httpRoutes = append(httpRoutes, buildVirtualServiceCookieHttpRoute(p.cav.Name, p.dest))
}
httpRoutes = append(httpRoutes, buildVirtualServiceCookieHttpRoute(currentCavName, currentDest))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
annotations:
sme.sap.com/resource-hash: 4ffc680079e1711f962e91fc30cde7cf23e9d6ab260a0ed69de693f0ac2043ea
sme.sap.com/resource-hash: 014a26b701fbda31e6fee65adbcc0ff2b580568ef6b9835f847e2dac3e8975f3
sme.sap.com/owner-identifier: default.test-cap-01-provider
labels:
sme.sap.com/owner-generation: "2"
Expand All @@ -68,6 +68,22 @@ spec:
- my-provider.app-domain.test.local
- my-provider.foo.bar.local
http:
- headers:
response:
set:
Set-Cookie: CAPOP_CAV=test-cap-01-cav-v1;Path=/;HttpOnly;Secure;Max-Age=0
match:
- headers:
Cookie:
regex: (^|.*; )CAPOP_CAV=test-cap-01-cav-v1($|; .*)
uri:
regex: ^|.*(logout|logoff).*
route:
- destination:
host: test-cap-01-cav-v1-app-router-svc.default.svc.cluster.local
port:
number: 5000
weight: 100
- headers:
response:
set:
Expand Down Expand Up @@ -100,6 +116,16 @@ spec:
port:
number: 5000
weight: 100
- match:
- headers:
Cookie:
regex: (^|.*; )CAPOP_CAV=test-cap-01-cav-v1($|; .*)
route:
- destination:
host: test-cap-01-cav-v1-app-router-svc.default.svc.cluster.local
port:
number: 5000
weight: 100
- match:
- headers:
Cookie:
Expand Down
Loading