/
router_types.go
116 lines (96 loc) · 3.49 KB
/
router_types.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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package v1
import (
"strings"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/kloudlite/operator/pkg/constants"
rApi "github.com/kloudlite/operator/pkg/operator"
)
type Route struct {
App string `json:"app,omitempty"`
Lambda string `json:"lambda,omitempty"`
Path string `json:"path"`
Port uint16 `json:"port"`
// +kubebuilder:default=false
Rewrite bool `json:"rewrite,omitempty"`
}
type RateLimit struct {
Enabled bool `json:"enabled,omitempty"`
Rps int `json:"rps,omitempty"`
Rpm int `json:"rpm,omitempty"`
Connections int `json:"connections,omitempty"`
}
type Https struct {
// +kubebuilder:default=true
Enabled bool `json:"enabled"`
ForceRedirect bool `json:"forceRedirect,omitempty"`
ClusterIssuer string `json:"clusterIssuer,omitempty"`
}
type BasicAuth struct {
Enabled bool `json:"enabled"`
Username string `json:"username,omitempty"`
SecretName string `json:"secretName,omitempty"`
}
type Cors struct {
// +kubebuilder:default=false
Enabled bool `json:"enabled,omitempty"`
Origins []string `json:"origins,omitempty"`
AllowCredentials bool `json:"allowCredentials,omitempty"`
}
// RouterSpec defines the desired state of Router
type RouterSpec struct {
IngressClass string `json:"ingressClass,omitempty"`
BackendProtocol *string `json:"backendProtocol,omitempty"`
Https *Https `json:"https,omitempty"`
// +kubebuilder:validation:Optional
RateLimit *RateLimit `json:"rateLimit,omitempty"`
MaxBodySizeInMB *int `json:"maxBodySizeInMB,omitempty"`
Domains []string `json:"domains"`
Routes []Route `json:"routes,omitempty"`
BasicAuth *BasicAuth `json:"basicAuth,omitempty"`
Cors *Cors `json:"cors,omitempty"`
}
// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:JSONPath=".status.lastReconcileTime",name=Last_Reconciled_At,type=date
// +kubebuilder:printcolumn:JSONPath=".metadata.annotations.kloudlite\\.io\\/router\\.ingress-class",name=Class,type=string
// +kubebuilder:printcolumn:JSONPath=".metadata.annotations.kloudlite\\.io\\/router\\.domains",name=domains,type=string
// +kubebuilder:printcolumn:JSONPath=".metadata.annotations.kloudlite\\.io\\/resource\\.ready",name=Ready,type=string
// +kubebuilder:printcolumn:JSONPath=".metadata.creationTimestamp",name=Age,type=date
// Router is the Schema for the routers API
type Router struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec RouterSpec `json:"spec"`
// +kubebuilder:default=true
Enabled bool `json:"enabled,omitempty"`
Status rApi.Status `json:"status,omitempty" graphql:"noinput"`
}
func (r *Router) EnsureGVK() {
if r != nil {
r.SetGroupVersionKind(GroupVersion.WithKind("Router"))
}
}
func (r *Router) GetStatus() *rApi.Status {
return &r.Status
}
func (r *Router) GetEnsuredLabels() map[string]string {
return map[string]string{
constants.RouterNameKey: r.Name,
}
}
func (m *Router) GetEnsuredAnnotations() map[string]string {
return map[string]string{
"kloudlite.io/router.domains": strings.Join(m.Spec.Domains, ","),
"kloudlite.io/router.ingress-class": m.Spec.IngressClass,
}
}
// +kubebuilder:object:root=true
// RouterList contains a list of Router
type RouterList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []Router `json:"items"`
}
func init() {
SchemeBuilder.Register(&Router{}, &RouterList{})
}