@@ -18,6 +18,7 @@ package v1alpha1
1818
1919import (
2020 "fmt"
21+ "net"
2122
2223 apierrors "k8s.io/apimachinery/pkg/api/errors"
2324 "k8s.io/apimachinery/pkg/api/resource"
@@ -49,6 +50,9 @@ func (r *MysqlCluster) ValidateCreate() error {
4950 mysqlclusterlog .Info ("validate create" , "name" , r .Name )
5051
5152 // TODO(user): fill in your validation logic upon object creation.
53+ if err := r .validateNFSServerAddress (r ); err != nil {
54+ return err
55+ }
5256 return nil
5357}
5458
@@ -66,6 +70,9 @@ func (r *MysqlCluster) ValidateUpdate(old runtime.Object) error {
6670 if err := r .validateLowTableCase (oldCluster ); err != nil {
6771 return err
6872 }
73+ if err := r .validateNFSServerAddress (oldCluster ); err != nil {
74+ return err
75+ }
6976 return nil
7077}
7178
@@ -77,6 +84,18 @@ func (r *MysqlCluster) ValidateDelete() error {
7784 return nil
7885}
7986
87+ // TODO: Add NFSServerAddress webhook & backup schedule.
88+ func (r * MysqlCluster ) validateNFSServerAddress (oldCluster * MysqlCluster ) error {
89+ isIP := net .ParseIP (r .Spec .NFSServerAddress ) != nil
90+ if len (r .Spec .NFSServerAddress ) != 0 && ! isIP {
91+ return apierrors .NewForbidden (schema.GroupResource {}, "" , fmt .Errorf ("nfsServerAddress should be set as IP" ))
92+ }
93+ if len (r .Spec .BackupSchedule ) != 0 && len (r .Spec .BackupSecretName ) == 0 && ! isIP {
94+ return apierrors .NewForbidden (schema.GroupResource {}, "" , fmt .Errorf ("backupSchedule is set without any backupSecretName or nfsServerAddress" ))
95+ }
96+ return nil
97+ }
98+
8099// Validate volume size, forbidden shrink storage size.
81100func (r * MysqlCluster ) validateVolumeSize (oldCluster * MysqlCluster ) error {
82101 oldStorageSize , err := resource .ParseQuantity (oldCluster .Spec .Persistence .Size )
0 commit comments