diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 89eda20e..ef423fcd 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -172,291 +172,291 @@ }, { "ImportPath": "k8s.io/api/admissionregistration/v1alpha1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/admissionregistration/v1beta1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/apps/v1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/apps/v1beta1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/apps/v1beta2", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/authentication/v1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/authentication/v1beta1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/authorization/v1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/authorization/v1beta1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/autoscaling/v1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/autoscaling/v2beta1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/batch/v1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/batch/v1beta1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/batch/v2alpha1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/certificates/v1beta1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/coordination/v1beta1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/core/v1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/events/v1beta1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/extensions/v1beta1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/networking/v1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/policy/v1beta1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/rbac/v1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/rbac/v1alpha1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/rbac/v1beta1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/scheduling/v1alpha1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/scheduling/v1beta1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/settings/v1alpha1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/storage/v1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/storage/v1alpha1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/api/storage/v1beta1", - "Rev": "2315b41a07e851014d77070954fc391a9b2d9aa9" + "Rev": "167b5831ed2b510b117579b94ed5302f2b6736c4" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/errors", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/meta", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/resource", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1beta1", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/fields", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/labels", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/schema", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/selection", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/types", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/cache", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/clock", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/diff", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/errors", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/framer", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/intstr", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/json", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/naming", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/net", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/runtime", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/sets", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation/field", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/wait", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/yaml", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/version", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/pkg/watch", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect", - "Rev": "e62e96948d15f2f21efd94c3a548e471af6ede26" + "Rev": "d4e5f596ea6e79f9493060696ad6025c6c82599d" }, { "ImportPath": "k8s.io/client-go/discovery", diff --git a/README.md b/README.md index 1bb47157..244ff48c 100644 --- a/README.md +++ b/README.md @@ -105,9 +105,8 @@ $ kubectl create -f artifacts/examples/crd-validation.yaml ## Subresources -Custom Resources support `/status` and `/scale` subresources as an -[alpha feature](https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/#subresources) in v1.10. -Enable this feature using the `CustomResourceSubresources` feature gate on the [kube-apiserver](https://kubernetes.io/docs/admin/kube-apiserver): +Custom Resources support `/status` and `/scale` subresources as a [beta feature](https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#subresources) in v1.11 and is enabled by default. +This feature is [alpha](https://v1-10.docs.kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/#subresources) in v1.10 and to enable it you need to set the `CustomResourceSubresources` feature gate on the [kube-apiserver](https://kubernetes.io/docs/admin/kube-apiserver): ```sh --feature-gates=CustomResourceSubresources=true diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go index 548a01e5..781469ec 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go @@ -179,6 +179,11 @@ func (u *Unstructured) GetOwnerReferences() []metav1.OwnerReference { } func (u *Unstructured) SetOwnerReferences(references []metav1.OwnerReference) { + if references == nil { + RemoveNestedField(u.Object, "metadata", "ownerReferences") + return + } + newReferences := make([]interface{}, 0, len(references)) for _, reference := range references { out, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&reference) @@ -212,6 +217,10 @@ func (u *Unstructured) GetNamespace() string { } func (u *Unstructured) SetNamespace(namespace string) { + if len(namespace) == 0 { + RemoveNestedField(u.Object, "metadata", "namespace") + return + } u.setNestedField(namespace, "metadata", "namespace") } @@ -220,6 +229,10 @@ func (u *Unstructured) GetName() string { } func (u *Unstructured) SetName(name string) { + if len(name) == 0 { + RemoveNestedField(u.Object, "metadata", "name") + return + } u.setNestedField(name, "metadata", "name") } @@ -227,8 +240,12 @@ func (u *Unstructured) GetGenerateName() string { return getNestedString(u.Object, "metadata", "generateName") } -func (u *Unstructured) SetGenerateName(name string) { - u.setNestedField(name, "metadata", "generateName") +func (u *Unstructured) SetGenerateName(generateName string) { + if len(generateName) == 0 { + RemoveNestedField(u.Object, "metadata", "generateName") + return + } + u.setNestedField(generateName, "metadata", "generateName") } func (u *Unstructured) GetUID() types.UID { @@ -236,6 +253,10 @@ func (u *Unstructured) GetUID() types.UID { } func (u *Unstructured) SetUID(uid types.UID) { + if len(string(uid)) == 0 { + RemoveNestedField(u.Object, "metadata", "uid") + return + } u.setNestedField(string(uid), "metadata", "uid") } @@ -243,8 +264,12 @@ func (u *Unstructured) GetResourceVersion() string { return getNestedString(u.Object, "metadata", "resourceVersion") } -func (u *Unstructured) SetResourceVersion(version string) { - u.setNestedField(version, "metadata", "resourceVersion") +func (u *Unstructured) SetResourceVersion(resourceVersion string) { + if len(resourceVersion) == 0 { + RemoveNestedField(u.Object, "metadata", "resourceVersion") + return + } + u.setNestedField(resourceVersion, "metadata", "resourceVersion") } func (u *Unstructured) GetGeneration() int64 { @@ -256,6 +281,10 @@ func (u *Unstructured) GetGeneration() int64 { } func (u *Unstructured) SetGeneration(generation int64) { + if generation == 0 { + RemoveNestedField(u.Object, "metadata", "generation") + return + } u.setNestedField(generation, "metadata", "generation") } @@ -264,6 +293,10 @@ func (u *Unstructured) GetSelfLink() string { } func (u *Unstructured) SetSelfLink(selfLink string) { + if len(selfLink) == 0 { + RemoveNestedField(u.Object, "metadata", "selfLink") + return + } u.setNestedField(selfLink, "metadata", "selfLink") } @@ -272,6 +305,10 @@ func (u *Unstructured) GetContinue() string { } func (u *Unstructured) SetContinue(c string) { + if len(c) == 0 { + RemoveNestedField(u.Object, "metadata", "continue") + return + } u.setNestedField(c, "metadata", "continue") } @@ -330,6 +367,10 @@ func (u *Unstructured) GetLabels() map[string]string { } func (u *Unstructured) SetLabels(labels map[string]string) { + if labels == nil { + RemoveNestedField(u.Object, "metadata", "labels") + return + } u.setNestedMap(labels, "metadata", "labels") } @@ -339,6 +380,10 @@ func (u *Unstructured) GetAnnotations() map[string]string { } func (u *Unstructured) SetAnnotations(annotations map[string]string) { + if annotations == nil { + RemoveNestedField(u.Object, "metadata", "annotations") + return + } u.setNestedMap(annotations, "metadata", "annotations") } @@ -387,6 +432,10 @@ func (u *Unstructured) GetFinalizers() []string { } func (u *Unstructured) SetFinalizers(finalizers []string) { + if finalizers == nil { + RemoveNestedField(u.Object, "metadata", "finalizers") + return + } u.setNestedSlice(finalizers, "metadata", "finalizers") } @@ -395,5 +444,9 @@ func (u *Unstructured) GetClusterName() string { } func (u *Unstructured) SetClusterName(clusterName string) { + if len(clusterName) == 0 { + RemoveNestedField(u.Object, "metadata", "clusterName") + return + } u.setNestedField(clusterName, "metadata", "clusterName") } diff --git a/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go b/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go index 231498ca..642b83ce 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go +++ b/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go @@ -18,6 +18,7 @@ package intstr import ( "encoding/json" + "errors" "fmt" "math" "runtime/debug" @@ -142,7 +143,17 @@ func (intstr *IntOrString) Fuzz(c fuzz.Continue) { } } +func ValueOrDefault(intOrPercent *IntOrString, defaultValue IntOrString) *IntOrString { + if intOrPercent == nil { + return &defaultValue + } + return intOrPercent +} + func GetValueFromIntOrPercent(intOrPercent *IntOrString, total int, roundUp bool) (int, error) { + if intOrPercent == nil { + return 0, errors.New("nil value for IntOrString") + } value, isPercent, err := getIntOrPercentValue(intOrPercent) if err != nil { return 0, fmt.Errorf("invalid value for IntOrString: %v", err)