func ValidateSubresourceReference(ref extensions.SubresourceReference, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} if len(ref.Kind) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("kind"), "")) } else if ok, msg := apivalidation.IsValidPathSegmentName(ref.Kind); !ok { allErrs = append(allErrs, field.Invalid(fldPath.Child("kind"), ref.Kind, msg)) } if len(ref.Name) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("name"), "")) } else if ok, msg := apivalidation.IsValidPathSegmentName(ref.Name); !ok { allErrs = append(allErrs, field.Invalid(fldPath.Child("name"), ref.Name, msg)) } if len(ref.Subresource) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("subresource"), "")) } else if ok, msg := apivalidation.IsValidPathSegmentName(ref.Subresource); !ok { allErrs = append(allErrs, field.Invalid(fldPath.Child("subresource"), ref.Subresource, msg)) } return allErrs }
// Resource sets the resource to access (<resource>/[ns/<namespace>/]<name>) func (r *Request) Resource(resource string) *Request { if r.err != nil { return r } if len(r.resource) != 0 { r.err = fmt.Errorf("resource already set to %q, cannot change to %q", r.resource, resource) return r } if ok, msg := validation.IsValidPathSegmentName(resource); !ok { r.err = fmt.Errorf("invalid resource %q: %s", resource, msg) return r } r.resource = resource return r }
// Namespace applies the namespace scope to a request (<resource>/[ns/<namespace>/]<name>) func (r *Request) Namespace(namespace string) *Request { if r.err != nil { return r } if r.namespaceSet { r.err = fmt.Errorf("namespace already set to %q, cannot change to %q", r.namespace, namespace) return r } if ok, msg := validation.IsValidPathSegmentName(namespace); !ok { r.err = fmt.Errorf("invalid namespace %q: %s", namespace, msg) return r } r.namespaceSet = true r.namespace = namespace return r }
// SubResource sets a sub-resource path which can be multiple segments segment after the resource // name but before the suffix. func (r *Request) SubResource(subresources ...string) *Request { if r.err != nil { return r } subresource := path.Join(subresources...) if len(r.subresource) != 0 { r.err = fmt.Errorf("subresource already set to %q, cannot change to %q", r.resource, subresource) return r } for _, s := range subresources { if ok, msg := validation.IsValidPathSegmentName(s); !ok { r.err = fmt.Errorf("invalid subresource %q: %s", s, msg) return r } } r.subresource = subresource return r }