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  }