@@ -18,6 +18,7 @@ package v1alpha1
18
18
19
19
import (
20
20
"fmt"
21
+ "net"
21
22
22
23
apierrors "k8s.io/apimachinery/pkg/api/errors"
23
24
"k8s.io/apimachinery/pkg/api/resource"
@@ -49,6 +50,9 @@ func (r *MysqlCluster) ValidateCreate() error {
49
50
mysqlclusterlog .Info ("validate create" , "name" , r .Name )
50
51
51
52
// TODO(user): fill in your validation logic upon object creation.
53
+ if err := r .validateNFSServerAddress (r ); err != nil {
54
+ return err
55
+ }
52
56
return nil
53
57
}
54
58
@@ -66,6 +70,9 @@ func (r *MysqlCluster) ValidateUpdate(old runtime.Object) error {
66
70
if err := r .validateLowTableCase (oldCluster ); err != nil {
67
71
return err
68
72
}
73
+ if err := r .validateNFSServerAddress (oldCluster ); err != nil {
74
+ return err
75
+ }
69
76
return nil
70
77
}
71
78
@@ -77,6 +84,18 @@ func (r *MysqlCluster) ValidateDelete() error {
77
84
return nil
78
85
}
79
86
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
+
80
99
// Validate volume size, forbidden shrink storage size.
81
100
func (r * MysqlCluster ) validateVolumeSize (oldCluster * MysqlCluster ) error {
82
101
oldStorageSize , err := resource .ParseQuantity (oldCluster .Spec .Persistence .Size )
0 commit comments