github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/pkg/apis/componentconfig/cloudcore/v1alpha1/validation/validation.go (about) 1 /* 2 Copyright 2019 The KubeEdge Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package validation 18 19 import ( 20 "fmt" 21 "os" 22 "path" 23 "strings" 24 25 "k8s.io/apimachinery/pkg/util/validation/field" 26 27 "github.com/kubeedge/kubeedge/pkg/apis/componentconfig/cloudcore/v1alpha1" 28 utilvalidation "github.com/kubeedge/kubeedge/pkg/util/validation" 29 ) 30 31 // ValidateCloudCoreConfiguration validates `c` and returns an errorList if it is invalid 32 func ValidateCloudCoreConfiguration(c *v1alpha1.CloudCoreConfig) field.ErrorList { 33 allErrs := field.ErrorList{} 34 allErrs = append(allErrs, ValidateKubeAPIConfig(*c.KubeAPIConfig)...) 35 allErrs = append(allErrs, ValidateModuleCloudHub(*c.Modules.CloudHub)...) 36 allErrs = append(allErrs, ValidateModuleEdgeController(*c.Modules.EdgeController)...) 37 allErrs = append(allErrs, ValidateModuleDeviceController(*c.Modules.DeviceController)...) 38 allErrs = append(allErrs, ValidateModuleSyncController(*c.Modules.SyncController)...) 39 return allErrs 40 } 41 42 // ValidateModuleCloudHub validates `c` and returns an errorList if it is invalid 43 func ValidateModuleCloudHub(c v1alpha1.CloudHub) field.ErrorList { 44 if !c.Enable { 45 return field.ErrorList{} 46 } 47 48 allErrs := field.ErrorList{} 49 validWPort := utilvalidation.IsValidPortNum(int(c.WebSocket.Port)) 50 validAddress := utilvalidation.IsValidIP(c.WebSocket.Address) 51 validQPort := utilvalidation.IsValidPortNum(int(c.Quic.Port)) 52 validQAddress := utilvalidation.IsValidIP(c.Quic.Address) 53 54 if len(validWPort) > 0 { 55 for _, m := range validWPort { 56 allErrs = append(allErrs, field.Invalid(field.NewPath("port"), c.WebSocket.Port, m)) 57 } 58 } 59 if len(validAddress) > 0 { 60 for _, m := range validAddress { 61 allErrs = append(allErrs, field.Invalid(field.NewPath("Address"), c.WebSocket.Address, m)) 62 } 63 } 64 if len(validQPort) > 0 { 65 for _, m := range validQPort { 66 allErrs = append(allErrs, field.Invalid(field.NewPath("port"), c.Quic.Port, m)) 67 } 68 } 69 if len(validQAddress) > 0 { 70 for _, m := range validQAddress { 71 allErrs = append(allErrs, field.Invalid(field.NewPath("Address"), c.Quic.Address, m)) 72 } 73 } 74 if !utilvalidation.FileIsExist(c.TLSPrivateKeyFile) { 75 allErrs = append(allErrs, field.Invalid(field.NewPath("TLSPrivateKeyFile"), c.TLSPrivateKeyFile, "TLSPrivateKeyFile not exist")) 76 } 77 if !utilvalidation.FileIsExist(c.TLSCertFile) { 78 allErrs = append(allErrs, field.Invalid(field.NewPath("TLSCertFile"), c.TLSCertFile, "TLSCertFile not exist")) 79 } 80 if !utilvalidation.FileIsExist(c.TLSCAFile) { 81 allErrs = append(allErrs, field.Invalid(field.NewPath("TLSCAFile"), c.TLSCAFile, "TLSCAFile not exist")) 82 } 83 if !strings.HasPrefix(strings.ToLower(c.UnixSocket.Address), "unix://") { 84 allErrs = append(allErrs, field.Invalid(field.NewPath("address"), 85 c.UnixSocket.Address, "unixSocketAddress must has prefix unix://")) 86 } 87 s := strings.SplitN(c.UnixSocket.Address, "://", 2) 88 if len(s) > 1 && !utilvalidation.FileIsExist(path.Dir(s[1])) { 89 if err := os.MkdirAll(path.Dir(s[1]), os.ModePerm); err != nil { 90 allErrs = append(allErrs, field.Invalid(field.NewPath("address"), 91 c.UnixSocket.Address, fmt.Sprintf("create unixSocketAddress %v dir %v error: %v", 92 c.UnixSocket.Address, path.Dir(s[1]), err))) 93 } 94 } 95 return allErrs 96 } 97 98 // ValidateModuleEdgeController validates `e` and returns an errorList if it is invalid 99 func ValidateModuleEdgeController(e v1alpha1.EdgeController) field.ErrorList { 100 if !e.Enable { 101 return field.ErrorList{} 102 } 103 allErrs := field.ErrorList{} 104 if e.NodeUpdateFrequency <= 0 { 105 allErrs = append(allErrs, field.Invalid(field.NewPath("NodeUpdateFrequency"), e.NodeUpdateFrequency, "NodeUpdateFrequency need > 0")) 106 } 107 return allErrs 108 } 109 110 // ValidateModuleDeviceController validates `d` and returns an errorList if it is invalid 111 func ValidateModuleDeviceController(d v1alpha1.DeviceController) field.ErrorList { 112 if !d.Enable { 113 return field.ErrorList{} 114 } 115 116 allErrs := field.ErrorList{} 117 return allErrs 118 } 119 120 // ValidateModuleSyncController validates `d` and returns an errorList if it is invalid 121 func ValidateModuleSyncController(d v1alpha1.SyncController) field.ErrorList { 122 if !d.Enable { 123 return field.ErrorList{} 124 } 125 126 allErrs := field.ErrorList{} 127 return allErrs 128 } 129 130 // ValidateKubeAPIConfig validates `k` and returns an errorList if it is invalid 131 func ValidateKubeAPIConfig(k v1alpha1.KubeAPIConfig) field.ErrorList { 132 allErrs := field.ErrorList{} 133 if k.KubeConfig != "" && !path.IsAbs(k.KubeConfig) { 134 allErrs = append(allErrs, field.Invalid(field.NewPath("kubeconfig"), k.KubeConfig, "kubeconfig need abs path")) 135 } 136 if k.KubeConfig != "" && !utilvalidation.FileIsExist(k.KubeConfig) { 137 allErrs = append(allErrs, field.Invalid(field.NewPath("kubeconfig"), k.KubeConfig, "kubeconfig not exist")) 138 } 139 return allErrs 140 }