Skip to content

Commit 97eb42c

Browse files
feat(api): add Kubernetes client-go style typed clients for Envoy Gateway resources (#7356)
* client packages for gateway resources Signed-off-by: siddharth1036 <[email protected]> * move codegen scripts from tools to makefile Signed-off-by: siddharth1036 <[email protected]>
1 parent 26e03ed commit 97eb42c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+3264
-36
lines changed

.github/codecov.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,4 @@ ignore:
1616
- "**/*.pb.go"
1717
- "**/zz_generated.*.go"
1818
- "api/**/*_types.go"
19+
- "pkg/client/**"

api/v1alpha1/backend_types.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ const (
2929
AppProtocolTypeWSS AppProtocolType = "gateway.envoyproxy.io/wss"
3030
)
3131

32+
// +genclient
33+
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
3234
// Backend allows the user to configure the endpoints of a backend and
3335
// the behavior of the connection from Envoy Proxy to the backend.
3436
//
@@ -281,6 +283,7 @@ type BackendStatus struct {
281283
Conditions []metav1.Condition `json:"conditions,omitempty"`
282284
}
283285

286+
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
284287
// BackendList contains a list of Backend resources.
285288
//
286289
// +kubebuilder:object:root=true
@@ -291,5 +294,5 @@ type BackendList struct {
291294
}
292295

293296
func init() {
294-
SchemeBuilder.Register(&Backend{}, &BackendList{})
297+
localSchemeBuilder.Register(&Backend{}, &BackendList{})
295298
}

api/v1alpha1/backendtrafficpolicy_types.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ const (
2323
// +kubebuilder:resource:categories=envoy-gateway,shortName=btp
2424
// +kubebuilder:subresource:status
2525
// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`
26+
// +genclient
27+
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
2628
type BackendTrafficPolicy struct {
2729
metav1.TypeMeta `json:",inline"`
2830
metav1.ObjectMeta `json:"metadata,omitempty"`
@@ -165,12 +167,13 @@ type RequestBuffer struct {
165167
// BackendTrafficPolicyList contains a list of BackendTrafficPolicy resources.
166168
//
167169
// +kubebuilder:object:root=true
170+
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
168171
type BackendTrafficPolicyList struct {
169172
metav1.TypeMeta `json:",inline"`
170173
metav1.ListMeta `json:"metadata,omitempty"`
171174
Items []BackendTrafficPolicy `json:"items"`
172175
}
173176

174177
func init() {
175-
SchemeBuilder.Register(&BackendTrafficPolicy{}, &BackendTrafficPolicyList{})
178+
localSchemeBuilder.Register(&BackendTrafficPolicy{}, &BackendTrafficPolicyList{})
176179
}

api/v1alpha1/clienttrafficpolicy_types.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ const (
2222

2323
// ClientTrafficPolicy allows the user to configure the behavior of the connection
2424
// between the downstream client and Envoy Proxy listener.
25+
// +genclient
26+
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
2527
type ClientTrafficPolicy struct {
2628
metav1.TypeMeta `json:",inline"`
2729
metav1.ObjectMeta `json:"metadata,omitempty"`
@@ -404,12 +406,13 @@ type ProxyProtocolSettings struct {
404406
//+kubebuilder:object:root=true
405407

406408
// ClientTrafficPolicyList contains a list of ClientTrafficPolicy resources.
409+
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
407410
type ClientTrafficPolicyList struct {
408411
metav1.TypeMeta `json:",inline"`
409412
metav1.ListMeta `json:"metadata,omitempty"`
410413
Items []ClientTrafficPolicy `json:"items"`
411414
}
412415

413416
func init() {
414-
SchemeBuilder.Register(&ClientTrafficPolicy{}, &ClientTrafficPolicyList{})
417+
localSchemeBuilder.Register(&ClientTrafficPolicy{}, &ClientTrafficPolicyList{})
415418
}

api/v1alpha1/doc.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
// Package v1alpha1 contains API schema definitions for the gateway.envoyproxy.io
77
// API group.
88
//
9-
// +kubebuilder:object:generate=true
9+
// +k8s:deepcopy-gen=package
1010
// +groupName=gateway.envoyproxy.io
11+
// +kubebuilder:object:generate=true
1112
package v1alpha1

api/v1alpha1/envoyextensionypolicy_types.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ const (
2121
// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`
2222

2323
// EnvoyExtensionPolicy allows the user to configure various envoy extensibility options for the Gateway.
24+
// +genclient
25+
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
2426
type EnvoyExtensionPolicy struct {
2527
metav1.TypeMeta `json:",inline"`
2628
metav1.ObjectMeta `json:"metadata,omitempty"`
@@ -68,12 +70,13 @@ type EnvoyExtensionPolicySpec struct {
6870
//+kubebuilder:object:root=true
6971

7072
// EnvoyExtensionPolicyList contains a list of EnvoyExtensionPolicy resources.
73+
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
7174
type EnvoyExtensionPolicyList struct {
7275
metav1.TypeMeta `json:",inline"`
7376
metav1.ListMeta `json:"metadata,omitempty"`
7477
Items []EnvoyExtensionPolicy `json:"items"`
7578
}
7679

7780
func init() {
78-
SchemeBuilder.Register(&EnvoyExtensionPolicy{}, &EnvoyExtensionPolicyList{})
81+
localSchemeBuilder.Register(&EnvoyExtensionPolicy{}, &EnvoyExtensionPolicyList{})
7982
}

api/v1alpha1/envoygateway_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -866,5 +866,5 @@ type EnvoyGatewayTopologyInjector struct {
866866
}
867867

868868
func init() {
869-
SchemeBuilder.Register(&EnvoyGateway{})
869+
localSchemeBuilder.Register(&EnvoyGateway{})
870870
}

api/v1alpha1/envoypatchpolicy_types.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ const (
2424

2525
// EnvoyPatchPolicy allows the user to modify the generated Envoy xDS
2626
// resources by Envoy Gateway using this patch API
27+
// +genclient
28+
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
2729
type EnvoyPatchPolicy struct {
2830
metav1.TypeMeta `json:",inline"`
2931
metav1.ObjectMeta `json:"metadata,omitempty"`
@@ -169,12 +171,13 @@ const (
169171
//+kubebuilder:object:root=true
170172

171173
// EnvoyPatchPolicyList contains a list of EnvoyPatchPolicy resources.
174+
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
172175
type EnvoyPatchPolicyList struct {
173176
metav1.TypeMeta `json:",inline"`
174177
metav1.ListMeta `json:"metadata,omitempty"`
175178
Items []EnvoyPatchPolicy `json:"items"`
176179
}
177180

178181
func init() {
179-
SchemeBuilder.Register(&EnvoyPatchPolicy{}, &EnvoyPatchPolicyList{})
182+
localSchemeBuilder.Register(&EnvoyPatchPolicy{}, &EnvoyPatchPolicyList{})
180183
}

api/v1alpha1/envoyproxy_types.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ const (
2020
// +kubebuilder:subresource:status
2121

2222
// EnvoyProxy is the schema for the envoyproxies API.
23+
// +genclient
24+
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
2325
type EnvoyProxy struct {
2426
metav1.TypeMeta `json:",inline"`
2527
metav1.ObjectMeta `json:"metadata,omitempty"`
@@ -549,6 +551,7 @@ type EnvoyProxyStatus struct {
549551
// +kubebuilder:object:root=true
550552

551553
// EnvoyProxyList contains a list of EnvoyProxy
554+
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
552555
type EnvoyProxyList struct {
553556
metav1.TypeMeta `json:",inline"`
554557
metav1.ListMeta `json:"metadata,omitempty"`
@@ -570,5 +573,5 @@ const (
570573
)
571574

572575
func init() {
573-
SchemeBuilder.Register(&EnvoyProxy{}, &EnvoyProxyList{})
576+
localSchemeBuilder.Register(&EnvoyProxy{}, &EnvoyProxyList{})
574577
}

api/v1alpha1/groupversion_info.go

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,56 @@
66
package v1alpha1
77

88
import (
9+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10+
"k8s.io/apimachinery/pkg/runtime"
911
"k8s.io/apimachinery/pkg/runtime/schema"
1012
"sigs.k8s.io/controller-runtime/pkg/scheme"
1113
)
1214

1315
const GroupName = "gateway.envoyproxy.io"
1416

1517
var (
16-
1718
// GroupVersion is group version used to register these objects
1819
GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"}
1920

21+
// SchemeGroupVersion is an alias for GroupVersion for code-generator compatibility
22+
SchemeGroupVersion = GroupVersion
23+
2024
// SchemeBuilder is used to add go types to the GroupVersionKind scheme
21-
SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion}
25+
SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
26+
27+
// localSchemeBuilder is used for controller-runtime compatibility
28+
localSchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion}
2229

2330
// AddToScheme adds the types in this group-version to the given scheme.
2431
AddToScheme = SchemeBuilder.AddToScheme
2532
)
33+
34+
// Resource takes an unqualified resource and returns a Group qualified GroupResource
35+
func Resource(resource string) schema.GroupResource {
36+
return GroupVersion.WithResource(resource).GroupResource()
37+
}
38+
39+
// addKnownTypes adds the set of types defined in this package to the supplied scheme.
40+
func addKnownTypes(scheme *runtime.Scheme) error {
41+
scheme.AddKnownTypes(GroupVersion,
42+
&Backend{},
43+
&BackendList{},
44+
&BackendTrafficPolicy{},
45+
&BackendTrafficPolicyList{},
46+
&ClientTrafficPolicy{},
47+
&ClientTrafficPolicyList{},
48+
&EnvoyExtensionPolicy{},
49+
&EnvoyExtensionPolicyList{},
50+
&EnvoyPatchPolicy{},
51+
&EnvoyPatchPolicyList{},
52+
&EnvoyProxy{},
53+
&EnvoyProxyList{},
54+
&HTTPRouteFilter{},
55+
&HTTPRouteFilterList{},
56+
&SecurityPolicy{},
57+
&SecurityPolicyList{},
58+
)
59+
metav1.AddToGroupVersion(scheme, GroupVersion)
60+
return nil
61+
}

0 commit comments

Comments
 (0)