/
synchronize_ss.go
58 lines (51 loc) · 1.84 KB
/
synchronize_ss.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package k8simpl
import (
"github.com/traefik/traefik/v2/pkg/config/dynamic"
traefikv1alpha1 "github.com/traefik/traefik/v2/pkg/provider/kubernetes/crd/traefikio/v1alpha1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
"github.com/traPtitech/neoshowcase/pkg/domain"
"github.com/traPtitech/neoshowcase/pkg/domain/web"
)
func (b *Backend) ssServiceRef() []traefikv1alpha1.Service {
return []traefikv1alpha1.Service{{
LoadBalancerSpec: traefikv1alpha1.LoadBalancerSpec{
Name: b.config.SS.Name,
Kind: b.config.SS.Kind,
Namespace: b.config.SS.Namespace,
Port: intstr.FromInt(b.config.SS.Port),
Scheme: b.config.SS.Scheme,
},
}}
}
func (b *Backend) ssHeaderMiddleware(ss *domain.StaticSite) *traefikv1alpha1.Middleware {
return &traefikv1alpha1.Middleware{
TypeMeta: metav1.TypeMeta{
Kind: "Middleware",
APIVersion: "traefik.io/v1alpha1",
},
ObjectMeta: metav1.ObjectMeta{
Name: ssHeaderMiddlewareName(ss),
Namespace: b.config.Namespace,
Labels: b.appLabel(ss.Application.ID),
},
Spec: traefikv1alpha1.MiddlewareSpec{
Headers: &dynamic.Headers{
CustomRequestHeaders: map[string]string{
web.HeaderNameSSGenAppID: ss.Application.ID,
},
},
},
}
}
func (b *Backend) ssResources(next *resources, sites []*domain.StaticSite) {
for _, site := range sites {
ingressRoute, mw, certs := b.ingressRoute(site.Application, site.Website, b.ssServiceRef())
ssHeaderMW := b.ssHeaderMiddleware(site)
ingressRoute.Spec.Routes[0].Middlewares = append(ingressRoute.Spec.Routes[0].Middlewares, traefikv1alpha1.MiddlewareRef{Name: ssHeaderMW.Name})
mw = append(mw, ssHeaderMW)
next.middlewares = append(next.middlewares, mw...)
next.ingressRoutes = append(next.ingressRoutes, ingressRoute)
next.certificates = append(next.certificates, certs...)
}
}