mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-09 03:57:41 +00:00
Split path validation into a separate library
This commit is contained in:
parent
6eb279ee6e
commit
e87edf9bd5
@ -21,6 +21,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/errors"
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/api/validation"
|
"k8s.io/kubernetes/pkg/api/validation"
|
||||||
|
path "k8s.io/kubernetes/pkg/api/validation/path"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util/validation/field"
|
"k8s.io/kubernetes/pkg/util/validation/field"
|
||||||
)
|
)
|
||||||
@ -81,7 +82,7 @@ func BeforeCreate(strategy RESTCreateStrategy, ctx api.Context, obj runtime.Obje
|
|||||||
// Custom validation (including name validation) passed
|
// Custom validation (including name validation) passed
|
||||||
// Now run common validation on object meta
|
// Now run common validation on object meta
|
||||||
// Do this *after* custom validation so that specific error messages are shown whenever possible
|
// Do this *after* custom validation so that specific error messages are shown whenever possible
|
||||||
if errs := validation.ValidateObjectMeta(objectMeta, strategy.NamespaceScoped(), validation.ValidatePathSegmentName, field.NewPath("metadata")); len(errs) > 0 {
|
if errs := validation.ValidateObjectMeta(objectMeta, strategy.NamespaceScoped(), path.ValidatePathSegmentName, field.NewPath("metadata")); len(errs) > 0 {
|
||||||
return errors.NewInvalid(kind.GroupKind(), objectMeta.Name, errs)
|
return errors.NewInvalid(kind.GroupKind(), objectMeta.Name, errs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/errors"
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/rest"
|
"k8s.io/kubernetes/pkg/api/rest"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/api/validation"
|
"k8s.io/kubernetes/pkg/api/validation/path"
|
||||||
"k8s.io/kubernetes/pkg/conversion"
|
"k8s.io/kubernetes/pkg/conversion"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
@ -366,7 +366,7 @@ func (t *Tester) testCreateIgnoresMismatchedNamespace(valid runtime.Object) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t *Tester) testCreateValidatesNames(valid runtime.Object) {
|
func (t *Tester) testCreateValidatesNames(valid runtime.Object) {
|
||||||
for _, invalidName := range validation.NameMayNotBe {
|
for _, invalidName := range path.NameMayNotBe {
|
||||||
objCopy := copyOrDie(valid)
|
objCopy := copyOrDie(valid)
|
||||||
objCopyMeta := t.getObjectMetaOrFail(objCopy)
|
objCopyMeta := t.getObjectMetaOrFail(objCopy)
|
||||||
objCopyMeta.Name = invalidName
|
objCopyMeta.Name = invalidName
|
||||||
@ -378,7 +378,7 @@ func (t *Tester) testCreateValidatesNames(valid runtime.Object) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, invalidSuffix := range validation.NameMayNotContain {
|
for _, invalidSuffix := range path.NameMayNotContain {
|
||||||
objCopy := copyOrDie(valid)
|
objCopy := copyOrDie(valid)
|
||||||
objCopyMeta := t.getObjectMetaOrFail(objCopy)
|
objCopyMeta := t.getObjectMetaOrFail(objCopy)
|
||||||
objCopyMeta.Name += invalidSuffix
|
objCopyMeta.Name += invalidSuffix
|
||||||
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package validation
|
package path
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package validation
|
package path
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
"strings"
|
@ -20,6 +20,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
|
||||||
apivalidation "k8s.io/kubernetes/pkg/api/validation"
|
apivalidation "k8s.io/kubernetes/pkg/api/validation"
|
||||||
|
pathvalidation "k8s.io/kubernetes/pkg/api/validation/path"
|
||||||
"k8s.io/kubernetes/pkg/apis/autoscaling"
|
"k8s.io/kubernetes/pkg/apis/autoscaling"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
"k8s.io/kubernetes/pkg/controller/podautoscaler"
|
"k8s.io/kubernetes/pkg/controller/podautoscaler"
|
||||||
@ -66,7 +67,7 @@ func ValidateCrossVersionObjectReference(ref autoscaling.CrossVersionObjectRefer
|
|||||||
if len(ref.Kind) == 0 {
|
if len(ref.Kind) == 0 {
|
||||||
allErrs = append(allErrs, field.Required(fldPath.Child("kind"), ""))
|
allErrs = append(allErrs, field.Required(fldPath.Child("kind"), ""))
|
||||||
} else {
|
} else {
|
||||||
for _, msg := range apivalidation.IsValidPathSegmentName(ref.Kind) {
|
for _, msg := range pathvalidation.IsValidPathSegmentName(ref.Kind) {
|
||||||
allErrs = append(allErrs, field.Invalid(fldPath.Child("kind"), ref.Kind, msg))
|
allErrs = append(allErrs, field.Invalid(fldPath.Child("kind"), ref.Kind, msg))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -74,7 +75,7 @@ func ValidateCrossVersionObjectReference(ref autoscaling.CrossVersionObjectRefer
|
|||||||
if len(ref.Name) == 0 {
|
if len(ref.Name) == 0 {
|
||||||
allErrs = append(allErrs, field.Required(fldPath.Child("name"), ""))
|
allErrs = append(allErrs, field.Required(fldPath.Child("name"), ""))
|
||||||
} else {
|
} else {
|
||||||
for _, msg := range apivalidation.IsValidPathSegmentName(ref.Name) {
|
for _, msg := range pathvalidation.IsValidPathSegmentName(ref.Name) {
|
||||||
allErrs = append(allErrs, field.Invalid(fldPath.Child("name"), ref.Name, msg))
|
allErrs = append(allErrs, field.Invalid(fldPath.Child("name"), ref.Name, msg))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ package validation
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api/validation"
|
"k8s.io/kubernetes/pkg/api/validation"
|
||||||
|
"k8s.io/kubernetes/pkg/api/validation/path"
|
||||||
"k8s.io/kubernetes/pkg/apis/rbac"
|
"k8s.io/kubernetes/pkg/apis/rbac"
|
||||||
"k8s.io/kubernetes/pkg/util/validation/field"
|
"k8s.io/kubernetes/pkg/util/validation/field"
|
||||||
)
|
)
|
||||||
@ -26,7 +27,7 @@ import (
|
|||||||
// * https://github.com/kubernetes/kubernetes/blob/60db50/pkg/api/validation/name.go
|
// * https://github.com/kubernetes/kubernetes/blob/60db50/pkg/api/validation/name.go
|
||||||
// * https://github.com/openshift/origin/blob/388478/pkg/api/helpers.go
|
// * https://github.com/openshift/origin/blob/388478/pkg/api/helpers.go
|
||||||
func minimalNameRequirements(name string, prefix bool) []string {
|
func minimalNameRequirements(name string, prefix bool) []string {
|
||||||
return validation.IsValidPathSegmentName(name)
|
return path.IsValidPathSegmentName(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ValidateRole(policy *rbac.Role) field.ErrorList {
|
func ValidateRole(policy *rbac.Role) field.ErrorList {
|
||||||
|
@ -35,7 +35,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/errors"
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
"k8s.io/kubernetes/pkg/api/validation"
|
pathvalidation "k8s.io/kubernetes/pkg/api/validation/path"
|
||||||
"k8s.io/kubernetes/pkg/client/metrics"
|
"k8s.io/kubernetes/pkg/client/metrics"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
@ -179,7 +179,7 @@ func (r *Request) Resource(resource string) *Request {
|
|||||||
r.err = fmt.Errorf("resource already set to %q, cannot change to %q", r.resource, resource)
|
r.err = fmt.Errorf("resource already set to %q, cannot change to %q", r.resource, resource)
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
if msgs := validation.IsValidPathSegmentName(resource); len(msgs) != 0 {
|
if msgs := pathvalidation.IsValidPathSegmentName(resource); len(msgs) != 0 {
|
||||||
r.err = fmt.Errorf("invalid resource %q: %v", resource, msgs)
|
r.err = fmt.Errorf("invalid resource %q: %v", resource, msgs)
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
@ -199,7 +199,7 @@ func (r *Request) SubResource(subresources ...string) *Request {
|
|||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
for _, s := range subresources {
|
for _, s := range subresources {
|
||||||
if msgs := validation.IsValidPathSegmentName(s); len(msgs) != 0 {
|
if msgs := pathvalidation.IsValidPathSegmentName(s); len(msgs) != 0 {
|
||||||
r.err = fmt.Errorf("invalid subresource %q: %v", s, msgs)
|
r.err = fmt.Errorf("invalid subresource %q: %v", s, msgs)
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
@ -221,7 +221,7 @@ func (r *Request) Name(resourceName string) *Request {
|
|||||||
r.err = fmt.Errorf("resource name already set to %q, cannot change to %q", r.resourceName, resourceName)
|
r.err = fmt.Errorf("resource name already set to %q, cannot change to %q", r.resourceName, resourceName)
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
if msgs := validation.IsValidPathSegmentName(resourceName); len(msgs) != 0 {
|
if msgs := pathvalidation.IsValidPathSegmentName(resourceName); len(msgs) != 0 {
|
||||||
r.err = fmt.Errorf("invalid resource name %q: %v", resourceName, msgs)
|
r.err = fmt.Errorf("invalid resource name %q: %v", resourceName, msgs)
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
@ -238,7 +238,7 @@ func (r *Request) Namespace(namespace string) *Request {
|
|||||||
r.err = fmt.Errorf("namespace already set to %q, cannot change to %q", r.namespace, namespace)
|
r.err = fmt.Errorf("namespace already set to %q, cannot change to %q", r.namespace, namespace)
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
if msgs := validation.IsValidPathSegmentName(namespace); len(msgs) != 0 {
|
if msgs := pathvalidation.IsValidPathSegmentName(namespace); len(msgs) != 0 {
|
||||||
r.err = fmt.Errorf("invalid namespace %q: %v", namespace, msgs)
|
r.err = fmt.Errorf("invalid namespace %q: %v", namespace, msgs)
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/rest"
|
"k8s.io/kubernetes/pkg/api/rest"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/api/validation"
|
"k8s.io/kubernetes/pkg/api/validation/path"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/registry/generic"
|
"k8s.io/kubernetes/pkg/registry/generic"
|
||||||
@ -145,7 +145,7 @@ func NamespaceKeyFunc(ctx api.Context, prefix string, name string) (string, erro
|
|||||||
if len(name) == 0 {
|
if len(name) == 0 {
|
||||||
return "", kubeerr.NewBadRequest("Name parameter required.")
|
return "", kubeerr.NewBadRequest("Name parameter required.")
|
||||||
}
|
}
|
||||||
if msgs := validation.IsValidPathSegmentName(name); len(msgs) != 0 {
|
if msgs := path.IsValidPathSegmentName(name); len(msgs) != 0 {
|
||||||
return "", kubeerr.NewBadRequest(fmt.Sprintf("Name parameter invalid: %q: %s", name, strings.Join(msgs, ";")))
|
return "", kubeerr.NewBadRequest(fmt.Sprintf("Name parameter invalid: %q: %s", name, strings.Join(msgs, ";")))
|
||||||
}
|
}
|
||||||
key = key + "/" + name
|
key = key + "/" + name
|
||||||
@ -157,7 +157,7 @@ func NoNamespaceKeyFunc(ctx api.Context, prefix string, name string) (string, er
|
|||||||
if len(name) == 0 {
|
if len(name) == 0 {
|
||||||
return "", kubeerr.NewBadRequest("Name parameter required.")
|
return "", kubeerr.NewBadRequest("Name parameter required.")
|
||||||
}
|
}
|
||||||
if msgs := validation.IsValidPathSegmentName(name); len(msgs) != 0 {
|
if msgs := path.IsValidPathSegmentName(name); len(msgs) != 0 {
|
||||||
return "", kubeerr.NewBadRequest(fmt.Sprintf("Name parameter invalid: %q: %s", name, strings.Join(msgs, ";")))
|
return "", kubeerr.NewBadRequest(fmt.Sprintf("Name parameter invalid: %q: %s", name, strings.Join(msgs, ";")))
|
||||||
}
|
}
|
||||||
key := prefix + "/" + name
|
key := prefix + "/" + name
|
||||||
|
@ -22,7 +22,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/validation"
|
"k8s.io/kubernetes/pkg/api/validation/path"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util/validation/field"
|
"k8s.io/kubernetes/pkg/util/validation/field"
|
||||||
)
|
)
|
||||||
@ -107,7 +107,7 @@ func NamespaceKeyFunc(prefix string, obj runtime.Object) (string, error) {
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
name := meta.GetName()
|
name := meta.GetName()
|
||||||
if msgs := validation.IsValidPathSegmentName(name); len(msgs) != 0 {
|
if msgs := path.IsValidPathSegmentName(name); len(msgs) != 0 {
|
||||||
return "", fmt.Errorf("invalid name: %v", msgs)
|
return "", fmt.Errorf("invalid name: %v", msgs)
|
||||||
}
|
}
|
||||||
return prefix + "/" + meta.GetNamespace() + "/" + name, nil
|
return prefix + "/" + meta.GetNamespace() + "/" + name, nil
|
||||||
@ -119,7 +119,7 @@ func NoNamespaceKeyFunc(prefix string, obj runtime.Object) (string, error) {
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
name := meta.GetName()
|
name := meta.GetName()
|
||||||
if msgs := validation.IsValidPathSegmentName(name); len(msgs) != 0 {
|
if msgs := path.IsValidPathSegmentName(name); len(msgs) != 0 {
|
||||||
return "", fmt.Errorf("invalid name: %v", msgs)
|
return "", fmt.Errorf("invalid name: %v", msgs)
|
||||||
}
|
}
|
||||||
return prefix + "/" + name, nil
|
return prefix + "/" + name, nil
|
||||||
|
Loading…
Reference in New Issue
Block a user