Cluster type validations (#89)

* Cluster type validations

Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com>

* Cluster type validations

Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com>

---------

Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com>
This commit is contained in:
Hussein Galal
2024-01-12 23:09:30 +02:00
committed by GitHub
parent c92f722122
commit 6fc22df6bc
4 changed files with 36 additions and 4 deletions
+18
View File
@@ -21,16 +21,34 @@ spec:
type: string
servers:
type: integer
x-kubernetes-validations:
- message: cluster must have at least one server
rule: self >= 1
agents:
type: integer
x-kubernetes-validations:
- message: invalid value for agents
rule: self >= 0
token:
type: string
x-kubernetes-validations:
- message: token is immutable
rule: self == oldSelf
clusterCIDR:
type: string
x-kubernetes-validations:
- message: clusterCIDR is immutable
rule: self == oldSelf
serviceCIDR:
type: string
x-kubernetes-validations:
- message: serviceCIDR is immutable
rule: self == oldSelf
clusterDNS:
type: string
x-kubernetes-validations:
- message: clusterDNS is immutable
rule: self == oldSelf
serverArgs:
type: array
items:
-1
View File
@@ -236,7 +236,6 @@ func newCluster(name, token string, servers, agents int32, clusterCIDR, serviceC
APIVersion: "k3k.io/v1alpha1",
},
Spec: v1alpha1.ClusterSpec{
Name: name,
Token: token,
Servers: &servers,
Agents: &agents,
-1
View File
@@ -16,7 +16,6 @@ type Cluster struct {
}
type ClusterSpec struct {
Name string `json:"name"`
Version string `json:"version"`
Servers *int32 `json:"servers"`
Agents *int32 `json:"agents"`
+18 -2
View File
@@ -181,8 +181,8 @@ func (c *ClusterReconciler) Reconcile(ctx context.Context, req reconcile.Request
}
func (c *ClusterReconciler) createCluster(ctx context.Context, cluster *v1alpha1.Cluster) error {
if cluster.Name == ClusterInvalidName {
klog.Errorf("Invalid cluster name %s, no action will be taken", cluster.Name)
if err := c.validate(cluster); err != nil {
klog.Errorf("invalid change: %v", err)
return nil
}
s := server.New(cluster, c.Client)
@@ -574,3 +574,19 @@ func (c *ClusterReconciler) getETCDTLS(cluster *v1alpha1.Cluster) (*tls.Config,
Certificates: []tls.Certificate{clientCert},
}, nil
}
func (c *ClusterReconciler) validate(cluster *v1alpha1.Cluster) error {
if cluster.Name == ClusterInvalidName {
return errors.New("invalid cluster name " + cluster.Name + " no action will be taken")
}
if cluster.Spec.ClusterCIDR != cluster.Status.ClusterCIDR {
return errors.New("immutable field: ClusterCIDR cant be changed once set")
}
if cluster.Spec.ServiceCIDR != cluster.Status.ServiceCIDR {
return errors.New("immutable field: ServiceCIDR cant be changed once set")
}
if cluster.Spec.ClusterDNS != cluster.Status.ClusterDNS {
return errors.New("immutable field: ClusterDNS cant be changed once set")
}
return nil
}