Skip to content

Commit ae76a7c

Browse files
committed
Add ingress feature to controller
1 parent 3716e5d commit ae76a7c

Some content is hidden

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

47 files changed

+5713
-65
lines changed

PROJECT

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,50 @@ resources:
2929
webhooks:
3030
defaulting: true
3131
webhookVersion: v1
32+
- api:
33+
crdVersion: v1
34+
namespaced: true
35+
controller: true
36+
domain: netbird.io
37+
kind: NBRoutingPeer
38+
path: github.com/netbirdio/kubernetes-operator/api/v1
39+
version: v1
40+
webhooks:
41+
validation: true
42+
webhookVersion: v1
43+
- controller: true
44+
external: true
45+
kind: Service
46+
path: k8s.io/api/core/v1
47+
version: v1
48+
- api:
49+
crdVersion: v1
50+
namespaced: true
51+
controller: true
52+
domain: netbird.io
53+
kind: NBResource
54+
path: github.com/netbirdio/kubernetes-operator/api/v1
55+
version: v1
56+
webhooks:
57+
validation: true
58+
webhookVersion: v1
59+
- api:
60+
crdVersion: v1
61+
namespaced: true
62+
controller: true
63+
domain: netbird.io
64+
kind: NBGroup
65+
path: github.com/netbirdio/kubernetes-operator/api/v1
66+
version: v1
67+
webhooks:
68+
validation: true
69+
webhookVersion: v1
70+
- api:
71+
crdVersion: v1
72+
namespaced: true
73+
controller: true
74+
domain: netbird.io
75+
kind: NBPolicy
76+
path: github.com/netbirdio/kubernetes-operator/api/v1
77+
version: v1
3278
version: "3"

api/v1/nbgroup_types.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package v1
2+
3+
import (
4+
"slices"
5+
6+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
7+
)
8+
9+
// NBGroupSpec defines the desired state of NBGroup.
10+
type NBGroupSpec struct {
11+
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Value is immutable"
12+
// +kubebuilder:validation:MinLength=1
13+
Name string `json:"name"`
14+
}
15+
16+
// NBGroupStatus defines the observed state of NBGroup.
17+
type NBGroupStatus struct {
18+
// +optional
19+
GroupID *string `json:"groupID"`
20+
// +optional
21+
Conditions []NBCondition `json:"conditions,omitempty"`
22+
}
23+
24+
// Equal returns if NBGroupStatus is equal to this one
25+
func (a NBGroupStatus) Equal(b NBGroupStatus) bool {
26+
return a.GroupID == b.GroupID && slices.Equal(a.Conditions, b.Conditions)
27+
}
28+
29+
// +kubebuilder:object:root=true
30+
// +kubebuilder:subresource:status
31+
32+
// NBGroup is the Schema for the nbgroups API.
33+
type NBGroup struct {
34+
metav1.TypeMeta `json:",inline"`
35+
metav1.ObjectMeta `json:"metadata,omitempty"`
36+
37+
Spec NBGroupSpec `json:"spec,omitempty"`
38+
Status NBGroupStatus `json:"status,omitempty"`
39+
}
40+
41+
// +kubebuilder:object:root=true
42+
43+
// NBGroupList contains a list of NBGroup.
44+
type NBGroupList struct {
45+
metav1.TypeMeta `json:",inline"`
46+
metav1.ListMeta `json:"metadata,omitempty"`
47+
Items []NBGroup `json:"items"`
48+
}
49+
50+
func init() {
51+
SchemeBuilder.Register(&NBGroup{}, &NBGroupList{})
52+
}

api/v1/nbpolicy_types.go

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package v1
2+
3+
import (
4+
"slices"
5+
6+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
7+
)
8+
9+
// NBPolicySpec defines the desired state of NBPolicy.
10+
type NBPolicySpec struct {
11+
// Name Policy name
12+
// +kubebuilder:validation:MinLength=1
13+
Name string `json:"name"`
14+
// +optional
15+
Description string `json:"description,omitempty"`
16+
// +optional
17+
// +kubebuilder:validation:items:MinLength=1
18+
SourceGroups []string `json:"sourceGroups,omitempty"`
19+
// +optional
20+
// +kubebuilder:validation:items:MinLength=1
21+
DestinationGroups []string `json:"destinationGroups,omitempty"`
22+
// +optional
23+
// +kubebuilder:validation:items:Enum=tcp;udp
24+
Protocols []string `json:"protocols,omitempty"`
25+
// +optional
26+
// +kubebuilder:validation:items:Minimum=0
27+
// +kubebuilder:validation:items:Maximum=65535
28+
Ports []int32 `json:"ports,omitempty"`
29+
// +optional
30+
// +default:value=true
31+
Bidirectional bool `json:"bidirectional"`
32+
}
33+
34+
// NBPolicyStatus defines the observed state of NBPolicy.
35+
type NBPolicyStatus struct {
36+
// +optional
37+
TCPPolicyID *string `json:"tcpPolicyID"`
38+
// +optional
39+
UDPPolicyID *string `json:"udpPolicyID"`
40+
// +optional
41+
LastUpdatedAt *metav1.Time `json:"lastUpdatedAt"`
42+
// +optional
43+
ManagedServiceList []string `json:"managedServiceList"`
44+
// +optional
45+
Conditions []NBCondition `json:"conditions,omitempty"`
46+
}
47+
48+
// Equal returns if NBPolicyStatus is equal to this one
49+
func (a NBPolicyStatus) Equal(b NBPolicyStatus) bool {
50+
return a.TCPPolicyID == b.TCPPolicyID &&
51+
a.UDPPolicyID == b.UDPPolicyID &&
52+
a.LastUpdatedAt == b.LastUpdatedAt &&
53+
slices.Equal(a.ManagedServiceList, b.ManagedServiceList) &&
54+
slices.Equal(a.Conditions, b.Conditions)
55+
}
56+
57+
// +kubebuilder:object:root=true
58+
// +kubebuilder:subresource:status
59+
// +kubebuilder:resource:scope=Cluster
60+
61+
// NBPolicy is the Schema for the nbpolicies API.
62+
type NBPolicy struct {
63+
metav1.TypeMeta `json:",inline"`
64+
metav1.ObjectMeta `json:"metadata,omitempty"`
65+
66+
Spec NBPolicySpec `json:"spec,omitempty"`
67+
Status NBPolicyStatus `json:"status,omitempty"`
68+
}
69+
70+
// +kubebuilder:object:root=true
71+
72+
// NBPolicyList contains a list of NBPolicy.
73+
type NBPolicyList struct {
74+
metav1.TypeMeta `json:",inline"`
75+
metav1.ListMeta `json:"metadata,omitempty"`
76+
Items []NBPolicy `json:"items"`
77+
}
78+
79+
func init() {
80+
SchemeBuilder.Register(&NBPolicy{}, &NBPolicyList{})
81+
}

api/v1/nbresource_types.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package v1
2+
3+
import (
4+
"slices"
5+
6+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
7+
)
8+
9+
// NBResourceSpec defines the desired state of NBResource.
10+
type NBResourceSpec struct {
11+
// +kubebuilder:validation:MinLength=1
12+
Name string `json:"name"`
13+
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Value is immutable"
14+
NetworkID string `json:"networkID"`
15+
// +kubebuilder:validation:MinLength=1
16+
Address string `json:"address"`
17+
// +kubebuilder:validation:items:MinLength=1
18+
Groups []string `json:"groups"`
19+
// +optional
20+
PolicyName string `json:"policyName,omitempty"`
21+
// +optional
22+
TCPPorts []int32 `json:"tcpPorts,omitempty"`
23+
// +optional
24+
UDPPorts []int32 `json:"udpPorts,omitempty"`
25+
}
26+
27+
// NBResourceStatus defines the observed state of NBResource.
28+
type NBResourceStatus struct {
29+
// +optional
30+
NetworkResourceID *string `json:"networkResourceID,omitempty"`
31+
// +optional
32+
PolicyName *string `json:"policyName,omitempty"`
33+
// +optional
34+
TCPPorts []int32 `json:"tcpPorts,omitempty"`
35+
// +optional
36+
UDPPorts []int32 `json:"udpPorts,omitempty"`
37+
// +optional
38+
Groups []string `json:"groups,omitempty"`
39+
// +optional
40+
Conditions []NBCondition `json:"conditions,omitempty"`
41+
}
42+
43+
// Equal returns if NBResourceStatus is equal to this one
44+
func (a NBResourceStatus) Equal(b NBResourceStatus) bool {
45+
return a.NetworkResourceID == b.NetworkResourceID &&
46+
a.PolicyName == b.PolicyName &&
47+
slices.Equal(a.TCPPorts, b.TCPPorts) &&
48+
slices.Equal(a.UDPPorts, b.UDPPorts) &&
49+
slices.Equal(a.Groups, b.Groups) &&
50+
slices.Equal(a.Conditions, b.Conditions)
51+
}
52+
53+
// +kubebuilder:object:root=true
54+
// +kubebuilder:subresource:status
55+
56+
// NBResource is the Schema for the nbresources API.
57+
type NBResource struct {
58+
metav1.TypeMeta `json:",inline"`
59+
metav1.ObjectMeta `json:"metadata,omitempty"`
60+
61+
Spec NBResourceSpec `json:"spec,omitempty"`
62+
Status NBResourceStatus `json:"status,omitempty"`
63+
}
64+
65+
// +kubebuilder:object:root=true
66+
67+
// NBResourceList contains a list of NBResource.
68+
type NBResourceList struct {
69+
metav1.TypeMeta `json:",inline"`
70+
metav1.ListMeta `json:"metadata,omitempty"`
71+
Items []NBResource `json:"items"`
72+
}
73+
74+
func init() {
75+
SchemeBuilder.Register(&NBResource{}, &NBResourceList{})
76+
}

api/v1/nbroutingpeer_types.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package v1
2+
3+
import (
4+
"slices"
5+
6+
corev1 "k8s.io/api/core/v1"
7+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
8+
)
9+
10+
// NBRoutingPeerSpec defines the desired state of NBRoutingPeer.
11+
type NBRoutingPeerSpec struct {
12+
// +optional
13+
Replicas *int32 `json:"replicas"`
14+
// +optional
15+
Resources corev1.ResourceRequirements `json:"resources"`
16+
// +optional
17+
Labels map[string]string `json:"labels"`
18+
// +optional
19+
Annotations map[string]string `json:"annotations"`
20+
// +optional
21+
NodeSelector map[string]string `json:"nodeSelector"`
22+
// +optional
23+
Tolerations []corev1.Toleration `json:"tolerations"`
24+
}
25+
26+
// NBRoutingPeerStatus defines the observed state of NBRoutingPeer.
27+
type NBRoutingPeerStatus struct {
28+
// +optional
29+
NetworkID *string `json:"networkID"`
30+
// +optional
31+
SetupKeyID *string `json:"setupKeyID"`
32+
// +optional
33+
RouterID *string `json:"routerID"`
34+
// +optional
35+
Conditions []NBCondition `json:"conditions,omitempty"`
36+
}
37+
38+
// Equal returns if NBRoutingPeerStatus is equal to this one
39+
func (a NBRoutingPeerStatus) Equal(b NBRoutingPeerStatus) bool {
40+
return a.NetworkID == b.NetworkID &&
41+
a.SetupKeyID == b.SetupKeyID &&
42+
a.RouterID == b.RouterID &&
43+
slices.Equal(a.Conditions, b.Conditions)
44+
}
45+
46+
// +kubebuilder:object:root=true
47+
// +kubebuilder:subresource:status
48+
49+
// NBRoutingPeer is the Schema for the nbroutingpeers API.
50+
type NBRoutingPeer struct {
51+
metav1.TypeMeta `json:",inline"`
52+
metav1.ObjectMeta `json:"metadata,omitempty"`
53+
54+
Spec NBRoutingPeerSpec `json:"spec,omitempty"`
55+
Status NBRoutingPeerStatus `json:"status,omitempty"`
56+
}
57+
58+
// +kubebuilder:object:root=true
59+
60+
// NBRoutingPeerList contains a list of NBRoutingPeer.
61+
type NBRoutingPeerList struct {
62+
metav1.TypeMeta `json:",inline"`
63+
metav1.ListMeta `json:"metadata,omitempty"`
64+
Items []NBRoutingPeer `json:"items"`
65+
}
66+
67+
func init() {
68+
SchemeBuilder.Register(&NBRoutingPeer{}, &NBRoutingPeerList{})
69+
}

0 commit comments

Comments
 (0)