Skip to content

Commit 58e5d3f

Browse files
committed
Add universal NetworkSelector API
Signed-off-by: Jaime Caamaño Ruiz <[email protected]>
1 parent ee4fd87 commit 58e5d3f

File tree

4 files changed

+279
-0
lines changed

4 files changed

+279
-0
lines changed

go-controller/hack/update-codegen.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,18 @@ if [[ "${builddir}" == /tmp/* ]]; then #paranoia
2727
rm -rf "${builddir}"
2828
fi
2929

30+
# deepcopy for types
31+
deepcopy-gen \
32+
--go-header-file hack/boilerplate.go.txt \
33+
--output-file zz_generated.deepcopy.go \
34+
--bounding-dirs github.com/ovn-org/ovn-kubernetes/go-controller/pkg/crd/types \
35+
github.com/ovn-org/ovn-kubernetes/go-controller/pkg/crd/types
36+
3037
for crd in ${crds}; do
38+
39+
# for types we already generated deepcopy above which is all we need
40+
[ "$crd" = "types" ] && continue
41+
3142
echo "Generating deepcopy funcs for $crd"
3243
deepcopy-gen \
3344
--go-header-file hack/boilerplate.go.txt \

go-controller/pkg/crd/types/doc.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// Package types contains shared types accrorss API Schema definitions
2+
// +k8s:deepcopy-gen=package
3+
package types
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
package types
2+
3+
import (
4+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
5+
)
6+
7+
// NetworkSelectors selects multiple sets of networks.
8+
// +kubebuilder:validation:MinItems=1
9+
// +kubebuilder:validation:MaxItems=5
10+
// +patchMergeKey=networkSelectionType
11+
// +patchStrategy=merge
12+
// +listType=map
13+
// +listMapKey=networkSelectionType
14+
type NetworkSelectors []NetworkSelector
15+
16+
// NetworkSelector selects a set of networks.
17+
// +kubebuilder:validation:XValidation:rule="!has(self.networkSelectionType) ? true : has(self.clusterUserDefinedNetworkSelector) ? self.networkSelectionType == 'ClusterUserDefinedNetworks' : self.networkSelectionType != 'ClusterUserDefinedNetworks'",message="Inconsistent selector: both networkSelectionType ClusterUserDefinedNetworks and clusterUserDefinedNetworkSelector have to be set or neither"
18+
// +kubebuilder:validation:XValidation:rule="!has(self.networkSelectionType) ? true : has(self.primaryUserDefinedNetworkSelector) ? self.networkSelectionType == 'PrimaryUserDefinedNetworks' : self.networkSelectionType != 'PrimaryUserDefinedNetworks'",message="Inconsistent selector: both networkSelectionType PrimaryUserDefinedNetworks and primaryUserDefinedNetworkSelector have to be set or neither"
19+
// +kubebuilder:validation:XValidation:rule="!has(self.networkSelectionType) ? true : has(self.secondaryUserDefinedNetworkSelector) ? self.networkSelectionType == 'SecondaryUserDefinedNetworks' : self.networkSelectionType != 'SecondaryUserDefinedNetworks'",message="Inconsistent selector: both networkSelectionType SecondaryUserDefinedNetworks and secondaryUserDefinedNetworkSelector have to be set or neither"
20+
// +kubebuilder:validation:XValidation:rule="!has(self.networkSelectionType) ? true : has(self.networkAttachmentDefinitionSelector) ? self.networkSelectionType == 'NetworkAttachmentDefinitions' : self.networkSelectionType != 'NetworkAttachmentDefinitions'",message="Inconsistent selector: both networkSelectionType NetworkAttachmentDefinitions and networkAttachmentDefinitionSelector have to be set or neither"
21+
type NetworkSelector struct {
22+
// networkSelectionType determines the type of networks selected.
23+
// +unionDiscriminator
24+
// +kubebuilder:validation:Required
25+
NetworkSelectionType NetworkSelectionType `json:"networkSelectionType"`
26+
27+
// clusterUserDefinedNetworkSelector selects ClusterUserDefinedNetworks when
28+
// NetworkSelectionType is 'ClusterUserDefinedNetworks'.
29+
// +kubebuilder:validation:Optional
30+
ClusterUserDefinedNetworkSelector *ClusterUserDefinedNetworkSelector `json:"clusterUserDefinedNetworkSelector,omitempty"`
31+
32+
// primaryUserDefinedNetworkSelector selects primary UserDefinedNetworks when
33+
// NetworkSelectionType is 'PrimaryUserDefinedNetworks'.
34+
// +kubebuilder:validation:Optional
35+
PrimaryUserDefinedNetworkSelector *PrimaryUserDefinedNetworkSelector `json:"primaryUserDefinedNetworkSelector,omitempty"`
36+
37+
// secondaryUserDefinedNetworkSelector selects secondary UserDefinedNetworks
38+
// when NetworkSelectionType is 'SecondaryUserDefinedNetworks'.
39+
// +kubebuilder:validation:Optional
40+
SecondaryUserDefinedNetworkSelector *SecondaryUserDefinedNetworkSelector `json:"secondaryUserDefinedNetworkSelector,omitempty"`
41+
42+
// networkAttachmentDefinitionSelector selects networks defined in the
43+
// selected NetworkAttachmentDefinitions when NetworkSelectionType is
44+
// 'SecondaryUserDefinedNetworks'.
45+
// +kubebuilder:validation:Optional
46+
NetworkAttachmentDefinitionSelector *NetworkAttachmentDefinitionSelector `json:"networkAttachmentDefinitionSelector,omitempty"`
47+
}
48+
49+
// NetworkSelectionType determines the type of networks selected.
50+
// +kubebuilder:validation:Enum=DefaultNetwork;ClusterUserDefinedNetworks;PrimaryUserDefinedNetworks;SecondaryUserDefinedNetworks;NetworkAttachmentDefinitions
51+
type NetworkSelectionType string
52+
53+
const (
54+
// DefaultNetwork determines that the default pod network is selected.
55+
DefaultNetwork NetworkSelectionType = "DefaultNetwork"
56+
57+
// ClusterUserDefinedNetworks determines that ClusterUserDefinedNetworks are selected.
58+
ClusterUserDefinedNetworks NetworkSelectionType = "ClusterUserDefinedNetworks"
59+
60+
// PrimaryUserDefinedNetworks determines that primary UserDefinedNetworks are selected.
61+
PrimaryUserDefinedNetworks NetworkSelectionType = "PrimaryUserDefinedNetworks"
62+
63+
// SecondaryUserDefinedNetworks determines that secondary UserDefinedNetworks are selected.
64+
SecondaryUserDefinedNetworks NetworkSelectionType = "SecondaryUserDefinedNetworks"
65+
66+
// NetworkAttachmentDefinitions determines that networks defined in NetworkAttachmentDefinitions are selected.
67+
NetworkAttachmentDefinitions NetworkSelectionType = "NetworkAttachmentDefinitions"
68+
)
69+
70+
// ClusterUserDefinedNetworkSelector selects ClusterUserDefinedNetworks.
71+
type ClusterUserDefinedNetworkSelector struct {
72+
// networkSelector selects ClusterUserDefinedNetworks by label. A null
73+
// selector will mot match anything, while an empty ({}) selector will match
74+
// all.
75+
// +kubebuilder:validation:Required
76+
NetworkSelector metav1.LabelSelector `json:"networkSelector"`
77+
}
78+
79+
// PrimaryUserDefinedNetworkSelector selects primary UserDefinedNetworks.
80+
type PrimaryUserDefinedNetworkSelector struct {
81+
// namespaceSelector select the primary UserDefinedNetworks that are servind
82+
// the selected namespaces. This field follows standard label selector
83+
// semantics.
84+
// +kubebuilder:validation:Required
85+
NamespaceSelector metav1.LabelSelector `json:"namespaceSelector"`
86+
}
87+
88+
// SecondaryUserDefinedNetworkSelector selects secondary UserDefinedNetworks.
89+
type SecondaryUserDefinedNetworkSelector struct {
90+
// namespaceSelector selects namespaces where the secondary
91+
// UserDefinedNetworks are defined. This field follows standard label
92+
// selector semantics.
93+
// +kubebuilder:validation:Required
94+
NamespaceSelector metav1.LabelSelector `json:"namespaceSelector"`
95+
96+
// networkSelector selects secondary UserDefinedNetworks within the selected
97+
// namespaces by label. This field follows standard label selector
98+
// semantics.
99+
// +kubebuilder:validation:Required
100+
NetworkSelector metav1.LabelSelector `json:"networkSelector"`
101+
}
102+
103+
// NetworkAttachmentDefinitionSelector selects networks defined in the selected NetworkAttachmentDefinitions.
104+
type NetworkAttachmentDefinitionSelector struct {
105+
// namespaceSelector selects namespaces where the
106+
// NetworkAttachmentDefinitions are defined. This field follows standard
107+
// label selector semantics.
108+
// +kubebuilder:validation:Required
109+
NamespaceSelector metav1.LabelSelector `json:"namespaceSelector"`
110+
111+
// networkSelector selects NetworkAttachmentDefinitions within the selected
112+
// namespaces by label. This field follows standard label selector
113+
// semantics.
114+
// +kubebuilder:validation:Required
115+
NetworkSelector metav1.LabelSelector `json:"networkSelector"`
116+
}

go-controller/pkg/crd/types/zz_generated.deepcopy.go

Lines changed: 149 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)