/
gatewayconfiguration_types.go
121 lines (100 loc) · 4.22 KB
/
gatewayconfiguration_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
117
118
119
120
121
/*
Copyright 2022 Kong Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package v1beta1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
func init() {
SchemeBuilder.Register(&GatewayConfiguration{}, &GatewayConfigurationList{})
}
//+genclient
//+kubebuilder:object:root=true
//+kubebuilder:subresource:status
//+kubebuilder:resource:shortName=kogc,categories=kong;all
// GatewayConfiguration is the Schema for the gatewayconfigurations API
type GatewayConfiguration struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec GatewayConfigurationSpec `json:"spec,omitempty"`
Status GatewayConfigurationStatus `json:"status,omitempty"`
}
// GatewayConfigurationSpec defines the desired state of GatewayConfiguration
type GatewayConfigurationSpec struct {
// DataPlaneOptions is the specification for configuration
// overrides for DataPlane resources that will be created for the Gateway.
//
// +optional
DataPlaneOptions *GatewayConfigDataPlaneOptions `json:"dataPlaneOptions,omitempty"`
// ControlPlaneOptions is the specification for configuration
// overrides for ControlPlane resources that will be created for the Gateway.
//
// +optional
ControlPlaneOptions *ControlPlaneOptions `json:"controlPlaneOptions,omitempty"`
}
// GatewayConfigDataPlaneOptions indicates the specific information needed to
// configure and deploy a DataPlane object.
type GatewayConfigDataPlaneOptions struct {
// +optional
Deployment DataPlaneDeploymentOptions `json:"deployment"`
// +optional
Network GatewayConfigDataPlaneNetworkOptions `json:"network"`
}
// GatewayConfigDataPlaneNetworkOptions defines network related options for a DataPlane.
type GatewayConfigDataPlaneNetworkOptions struct {
// Services indicates the configuration of Kubernetes Services needed for
// the topology of various forms of traffic (including ingress, etc.) to
// and from the DataPlane.
Services *GatewayConfigDataPlaneServices `json:"services,omitempty"`
}
// GatewayConfigDataPlaneServices contains Services related DataPlane configuration.
type GatewayConfigDataPlaneServices struct {
// Ingress is the Kubernetes Service that will be used to expose ingress
// traffic for the DataPlane. Here you can determine whether the DataPlane
// will be exposed outside the cluster (e.g. using a LoadBalancer type
// Services) or only internally (e.g. ClusterIP), and inject any additional
// annotations you need on the service (for instance, if you need to
// influence a cloud provider LoadBalancer configuration).
//
// +optional
Ingress *GatewayConfigServiceOptions `json:"ingress,omitempty"`
}
// GatewayConfigServiceOptions is used to includes options to customize the ingress service,
// such as the annotations.
type GatewayConfigServiceOptions struct {
ServiceOptions `json:",inline"`
}
// GatewayConfigurationStatus defines the observed state of GatewayConfiguration
type GatewayConfigurationStatus struct {
// Conditions describe the current conditions of the GatewayConfigurationStatus.
//
// +optional
// +listType=map
// +listMapKey=type
// +kubebuilder:validation:MaxItems=8
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
//+kubebuilder:object:root=true
// GatewayConfigurationList contains a list of GatewayConfiguration
type GatewayConfigurationList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []GatewayConfiguration `json:"items"`
}
// GetConditions retrieves the GatewayConfiguration Status Condition
func (g *GatewayConfiguration) GetConditions() []metav1.Condition {
return g.Status.Conditions
}
// SetConditions sets the GatewayConfiguration Status Condition
func (g *GatewayConfiguration) SetConditions(conditions []metav1.Condition) {
g.Status.Conditions = conditions
}