mirror of
https://github.com/YuzuZensai/netbird-kubernetes-operator.git
synced 2026-09-13 18:59:09 +00:00
Implement group resource (#181)
This change implements a new group resource. It also sets the standard for a resource reference will be done through out the controller. A resource reference can either be done by ID or as a local named reference to the actual resource. This allows end users to chose if they want to manage things completely in the cluster or not. Part of #172 Signed-off-by: Philip Laine <philip.laine@gmail.com>
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
package v1alpha1
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
// GroupSpec defines the desired state of Group
|
||||
type GroupSpec struct {
|
||||
// name of the group.
|
||||
// +kubebuilder:validation:MinLength=1
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
// GroupStatus defines the observed state of Group.
|
||||
type GroupStatus struct {
|
||||
// +optional
|
||||
GroupID *string `json:"groupID,omitempty"`
|
||||
|
||||
// The status of each condition is one of True, False, or Unknown.
|
||||
// +listType=map
|
||||
// +listMapKey=type
|
||||
// +optional
|
||||
Conditions []metav1.Condition `json:"conditions,omitempty"`
|
||||
}
|
||||
|
||||
// +kubebuilder:object:root=true
|
||||
// +kubebuilder:subresource:status
|
||||
// +kubebuilder:resource
|
||||
|
||||
// Group is the Schema for the groups API
|
||||
type Group struct {
|
||||
metav1.TypeMeta `json:",inline"`
|
||||
|
||||
// metadata is a standard object metadata
|
||||
// +optional
|
||||
metav1.ObjectMeta `json:"metadata,omitzero"`
|
||||
|
||||
// spec defines the desired state of Group
|
||||
// +required
|
||||
Spec GroupSpec `json:"spec"`
|
||||
|
||||
// status defines the observed state of Group
|
||||
// +optional
|
||||
Status GroupStatus `json:"status,omitzero"`
|
||||
}
|
||||
|
||||
// +kubebuilder:object:root=true
|
||||
|
||||
// GroupList contains a list of Group
|
||||
type GroupList struct {
|
||||
metav1.TypeMeta `json:",inline"`
|
||||
metav1.ListMeta `json:"metadata,omitzero"`
|
||||
Items []Group `json:"items"`
|
||||
}
|
||||
|
||||
func init() {
|
||||
SchemeBuilder.Register(&Group{}, &GroupList{})
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package v1alpha1
|
||||
|
||||
import corev1 "k8s.io/api/core/v1"
|
||||
|
||||
// +kubebuilder:validation:XValidation:rule="(has(self.id) && !has(self.localRef)) || (!has(self.id) && has(self.localRef))",message="exactly one of id or localRef must be set"
|
||||
type ResourceReference struct {
|
||||
// id of the resource in the Netbird API.
|
||||
// +optional
|
||||
ID *string `json:"id,omitempty"`
|
||||
|
||||
// local reference to the object in the same namespace.
|
||||
// +optional
|
||||
LocalRef *corev1.LocalObjectReference `json:"localRef,omitempty"`
|
||||
}
|
||||
@@ -14,6 +14,10 @@ type SetupKeySpec struct {
|
||||
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="duration is immutable"
|
||||
// +optional
|
||||
Duration *metav1.Duration `json:"duration,omitempty"`
|
||||
|
||||
// Groups that will be automatically assigned to resources using setup key.
|
||||
// +optional
|
||||
AutoGroups []ResourceReference `json:"autoGroups,omitempty"`
|
||||
}
|
||||
|
||||
// SetupKeyStatus defines the observed state of SetupKey.
|
||||
|
||||
@@ -5,10 +5,137 @@
|
||||
package v1alpha1
|
||||
|
||||
import (
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||
)
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *Group) DeepCopyInto(out *Group) {
|
||||
*out = *in
|
||||
out.TypeMeta = in.TypeMeta
|
||||
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
|
||||
out.Spec = in.Spec
|
||||
in.Status.DeepCopyInto(&out.Status)
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Group.
|
||||
func (in *Group) DeepCopy() *Group {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(Group)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||
func (in *Group) DeepCopyObject() runtime.Object {
|
||||
if c := in.DeepCopy(); c != nil {
|
||||
return c
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *GroupList) DeepCopyInto(out *GroupList) {
|
||||
*out = *in
|
||||
out.TypeMeta = in.TypeMeta
|
||||
in.ListMeta.DeepCopyInto(&out.ListMeta)
|
||||
if in.Items != nil {
|
||||
in, out := &in.Items, &out.Items
|
||||
*out = make([]Group, len(*in))
|
||||
for i := range *in {
|
||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GroupList.
|
||||
func (in *GroupList) DeepCopy() *GroupList {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(GroupList)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||
func (in *GroupList) DeepCopyObject() runtime.Object {
|
||||
if c := in.DeepCopy(); c != nil {
|
||||
return c
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *GroupSpec) DeepCopyInto(out *GroupSpec) {
|
||||
*out = *in
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GroupSpec.
|
||||
func (in *GroupSpec) DeepCopy() *GroupSpec {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(GroupSpec)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *GroupStatus) DeepCopyInto(out *GroupStatus) {
|
||||
*out = *in
|
||||
if in.GroupID != nil {
|
||||
in, out := &in.GroupID, &out.GroupID
|
||||
*out = new(string)
|
||||
**out = **in
|
||||
}
|
||||
if in.Conditions != nil {
|
||||
in, out := &in.Conditions, &out.Conditions
|
||||
*out = make([]v1.Condition, len(*in))
|
||||
for i := range *in {
|
||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GroupStatus.
|
||||
func (in *GroupStatus) DeepCopy() *GroupStatus {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(GroupStatus)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *ResourceReference) DeepCopyInto(out *ResourceReference) {
|
||||
*out = *in
|
||||
if in.ID != nil {
|
||||
in, out := &in.ID, &out.ID
|
||||
*out = new(string)
|
||||
**out = **in
|
||||
}
|
||||
if in.LocalRef != nil {
|
||||
in, out := &in.LocalRef, &out.LocalRef
|
||||
*out = new(corev1.LocalObjectReference)
|
||||
**out = **in
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceReference.
|
||||
func (in *ResourceReference) DeepCopy() *ResourceReference {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(ResourceReference)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *SetupKey) DeepCopyInto(out *SetupKey) {
|
||||
*out = *in
|
||||
@@ -76,6 +203,13 @@ func (in *SetupKeySpec) DeepCopyInto(out *SetupKeySpec) {
|
||||
*out = new(v1.Duration)
|
||||
**out = **in
|
||||
}
|
||||
if in.AutoGroups != nil {
|
||||
in, out := &in.AutoGroups, &out.AutoGroups
|
||||
*out = make([]ResourceReference, len(*in))
|
||||
for i := range *in {
|
||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SetupKeySpec.
|
||||
|
||||
Reference in New Issue
Block a user