Skip to content

Commit

Permalink
Implement VirtualIP types (#371)
Browse files Browse the repository at this point in the history
  • Loading branch information
adracus authored Apr 25, 2022
1 parent 421922c commit 5baee05
Show file tree
Hide file tree
Showing 55 changed files with 4,811 additions and 47 deletions.
1 change: 1 addition & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ COPY controllers/ controllers/
COPY equality/ equality/
COPY generated/ generated/
COPY registry/ registry/
COPY tableconvertor/ tableconvertor/

ARG TARGETOS TARGETARCH

Expand Down
4 changes: 4 additions & 0 deletions apis/networking/register.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ func addKnownTypes(scheme *runtime.Scheme) error {
&NetworkInterfaceList{},
&Network{},
&NetworkList{},
&VirtualIP{},
&VirtualIPList{},
&VirtualIPRouting{},
&VirtualIPRoutingList{},
)
return nil
}
4 changes: 4 additions & 0 deletions apis/networking/v1alpha1/register.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ func addKnownTypes(scheme *runtime.Scheme) error {
&NetworkInterfaceList{},
&Network{},
&NetworkList{},
&VirtualIP{},
&VirtualIPList{},
&VirtualIPRouting{},
&VirtualIPRoutingList{},
)
metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
return nil
Expand Down
69 changes: 69 additions & 0 deletions apis/networking/v1alpha1/virtualip_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*
* Copyright (c) 2022 by the OnMetal authors.
*
* 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 v1alpha1

import (
commonv1alpha1 "github.com/onmetal/onmetal-api/apis/common/v1alpha1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// VirtualIPSpec defines the desired state of VirtualIP
type VirtualIPSpec struct {
// Type is the type of VirtualIP.
Type VirtualIPType `json:"type"`
// IPFamily is the ip family of the VirtualIP.
IPFamily corev1.IPFamily `json:"ipFamily"`
// NetworkInterfaceSelector selects any NetworkInterface that should get the VirtualIP routed.
// If empty, it is assumed that an external process manages the VirtualIPRouting for this VirtualIP.
NetworkInterfaceSelector *metav1.LabelSelector `json:"networkInterfaceSelector,omitempty"`
}

// VirtualIPType is a type of VirtualIP.
type VirtualIPType string

const (
// VirtualIPTypePublic is a VirtualIP that allocates and routes a stable public IP.
VirtualIPTypePublic VirtualIPType = "Public"
)

// VirtualIPStatus defines the observed state of VirtualIP
type VirtualIPStatus struct {
// IP is the allocated IP, if any.
IP *commonv1alpha1.IP `json:"ip,omitempty"`
}

// +genclient
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

// VirtualIP is the Schema for the virtualips API
type VirtualIP struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec VirtualIPSpec `json:"spec,omitempty"`
Status VirtualIPStatus `json:"status,omitempty"`
}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

// VirtualIPList contains a list of VirtualIP
type VirtualIPList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []VirtualIP `json:"items"`
}
60 changes: 60 additions & 0 deletions apis/networking/v1alpha1/virtualiprouting_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
* Copyright (c) 2022 by the OnMetal authors.
*
* 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 v1alpha1

import (
commonv1alpha1 "github.com/onmetal/onmetal-api/apis/common/v1alpha1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
)

// +genclient
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

// VirtualIPRouting is the Schema for the virtualiproutings API
type VirtualIPRouting struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

// Subsets are the subsets that make up a VirtualIPRouting.
Subsets []VirtualIPRoutingSubset `json:"subsets,omitempty"`
}

// LocalUIDReference is a reference to another entity including its UID.
type LocalUIDReference struct {
// Name is the name of the referenced entity.
Name string `json:"name"`
// UID is the UID of the referenced entity.
UID types.UID
}

// VirtualIPRoutingSubset is one of the targets of a VirtualIPRouting.
type VirtualIPRoutingSubset struct {
// IP is the IP of the entity routed towards.
IP commonv1alpha1.IP `json:"ip"`
// TargetRef is the targeted entity.
TargetRef LocalUIDReference `json:"targetRef"`
}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

// VirtualIPRoutingList contains a list of VirtualIPRouting
type VirtualIPRoutingList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []VirtualIPRouting `json:"items"`
}
Loading

0 comments on commit 5baee05

Please sign in to comment.