// ValidateRoute tests if required fields in the route are set. func ValidateRoute(route *routeapi.Route) fielderrors.ValidationErrorList { result := fielderrors.ValidationErrorList{} //ensure meta is set properly result = append(result, kval.ValidateObjectMeta(&route.ObjectMeta, true, oapi.GetNameValidationFunc(kval.ValidatePodName)).Prefix("metadata")...) //host is not required but if it is set ensure it meets DNS requirements if len(route.Host) > 0 { if !util.IsDNS1123Subdomain(route.Host) { result = append(result, fielderrors.NewFieldInvalid("host", route.Host, "host must conform to DNS 952 subdomain conventions")) } } if len(route.Path) > 0 && !strings.HasPrefix(route.Path, "/") { result = append(result, fielderrors.NewFieldInvalid("path", route.Path, "path must begin with /")) } if len(route.ServiceName) == 0 { result = append(result, fielderrors.NewFieldRequired("serviceName")) } if errs := validateTLS(route); len(errs) != 0 { result = append(result, errs.Prefix("tls")...) } return result }
// ValidateRoute tests if required fields in the route are set. func ValidateRoute(route *routeapi.Route) field.ErrorList { //ensure meta is set properly result := kval.ValidateObjectMeta(&route.ObjectMeta, true, oapi.GetNameValidationFunc(kval.ValidatePodName), field.NewPath("metadata")) specPath := field.NewPath("spec") //host is not required but if it is set ensure it meets DNS requirements if len(route.Spec.Host) > 0 { if !kvalidation.IsDNS1123Subdomain(route.Spec.Host) { result = append(result, field.Invalid(specPath.Child("host"), route.Spec.Host, "host must conform to DNS 952 subdomain conventions")) } } if len(route.Spec.Path) > 0 && !strings.HasPrefix(route.Spec.Path, "/") { result = append(result, field.Invalid(specPath.Child("path"), route.Spec.Path, "path must begin with /")) } if len(route.Spec.Path) > 0 && route.Spec.TLS != nil && route.Spec.TLS.Termination == routeapi.TLSTerminationPassthrough { result = append(result, field.Invalid(specPath.Child("path"), route.Spec.Path, "passthrough termination does not support paths")) } if len(route.Spec.To.Name) == 0 { result = append(result, field.Required(specPath.Child("to", "name"), "")) } if route.Spec.To.Kind != "Service" { result = append(result, field.Invalid(specPath.Child("to", "kind"), route.Spec.To.Kind, "must reference a Service")) } if route.Spec.Port != nil { switch target := route.Spec.Port.TargetPort; { case target.Type == intstr.Int && target.IntVal == 0, target.Type == intstr.String && len(target.StrVal) == 0: result = append(result, field.Required(specPath.Child("port", "targetPort"), "")) } } if errs := validateTLS(route, specPath.Child("tls")); len(errs) != 0 { result = append(result, errs...) } return result }
// ValidateRoute tests if required fields in the route are set. func ValidateRoute(route *routeapi.Route) fielderrors.ValidationErrorList { result := fielderrors.ValidationErrorList{} //ensure meta is set properly result = append(result, kval.ValidateObjectMeta(&route.ObjectMeta, true, oapi.GetNameValidationFunc(kval.ValidatePodName)).Prefix("metadata")...) //host is not required but if it is set ensure it meets DNS requirements if len(route.Spec.Host) > 0 { if !kvalidation.IsDNS1123Subdomain(route.Spec.Host) { result = append(result, fielderrors.NewFieldInvalid("host", route.Spec.Host, "host must conform to DNS 952 subdomain conventions")) } } if len(route.Spec.Path) > 0 && !strings.HasPrefix(route.Spec.Path, "/") { result = append(result, fielderrors.NewFieldInvalid("path", route.Spec.Path, "path must begin with /")) } if len(route.Spec.Path) > 0 && route.Spec.TLS != nil && route.Spec.TLS.Termination == routeapi.TLSTerminationPassthrough { result = append(result, fielderrors.NewFieldInvalid("path", route.Spec.Path, "passthrough termination does not support paths")) } if len(route.Spec.To.Name) == 0 { result = append(result, fielderrors.NewFieldRequired("serviceName")) } if route.Spec.Port != nil { switch target := route.Spec.Port.TargetPort; { case target.Kind == util.IntstrInt && target.IntVal == 0, target.Kind == util.IntstrString && len(target.StrVal) == 0: result = append(result, fielderrors.NewFieldRequired("targetPort")) } } if errs := validateTLS(route); len(errs) != 0 { result = append(result, errs.Prefix("tls")...) } return result }
// ValidateRoute tests if required fields in the route are set. func ValidateRoute(route *routeapi.Route) field.ErrorList { //ensure meta is set properly result := kval.ValidateObjectMeta(&route.ObjectMeta, true, oapi.GetNameValidationFunc(kval.ValidatePodName), field.NewPath("metadata")) specPath := field.NewPath("spec") //host is not required but if it is set ensure it meets DNS requirements if len(route.Spec.Host) > 0 { if len(kvalidation.IsDNS1123Subdomain(route.Spec.Host)) != 0 { result = append(result, field.Invalid(specPath.Child("host"), route.Spec.Host, "host must conform to DNS 952 subdomain conventions")) } } if len(route.Spec.Path) > 0 && !strings.HasPrefix(route.Spec.Path, "/") { result = append(result, field.Invalid(specPath.Child("path"), route.Spec.Path, "path must begin with /")) } if len(route.Spec.Path) > 0 && route.Spec.TLS != nil && route.Spec.TLS.Termination == routeapi.TLSTerminationPassthrough { result = append(result, field.Invalid(specPath.Child("path"), route.Spec.Path, "passthrough termination does not support paths")) } if len(route.Spec.To.Name) == 0 { result = append(result, field.Required(specPath.Child("to", "name"), "")) } if route.Spec.To.Kind != "Service" { result = append(result, field.Invalid(specPath.Child("to", "kind"), route.Spec.To.Kind, "must reference a Service")) } if route.Spec.To.Weight != nil && (*route.Spec.To.Weight < 0 || *route.Spec.To.Weight > 256) { result = append(result, field.Invalid(specPath.Child("to", "weight"), route.Spec.To.Weight, "weight must be an integer between 0 and 256")) } backendPath := specPath.Child("alternateBackends") if len(route.Spec.AlternateBackends) > 3 { result = append(result, field.Required(backendPath, "cannot specify more than 3 additional backends")) } for i, svc := range route.Spec.AlternateBackends { if len(svc.Name) == 0 { result = append(result, field.Required(backendPath.Index(i).Child("name"), "")) } if svc.Kind != "Service" { result = append(result, field.Invalid(backendPath.Index(i).Child("kind"), svc.Kind, "must reference a Service")) } if svc.Weight != nil && (*svc.Weight < 0 || *svc.Weight > 256) { result = append(result, field.Invalid(backendPath.Index(i).Child("weight"), svc.Weight, "weight must be an integer between 0 and 256")) } } if route.Spec.Port != nil { switch target := route.Spec.Port.TargetPort; { case target.Type == intstr.Int && target.IntVal == 0, target.Type == intstr.String && len(target.StrVal) == 0: result = append(result, field.Required(specPath.Child("port", "targetPort"), "")) } } if errs := validateTLS(route, specPath.Child("tls")); len(errs) != 0 { result = append(result, errs...) } return result }
// ValidateTemplate tests if required fields in the Template are set. func ValidateTemplate(template *api.Template) (allErrs field.ErrorList) { allErrs = validation.ValidateObjectMeta(&template.ObjectMeta, true, oapi.GetNameValidationFunc(validation.ValidatePodName), field.NewPath("metadata")) allErrs = append(allErrs, validateTemplateBody(template)...) return }