diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 5aa180b6..0b5142c2 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -352,635 +352,635 @@ }, { "ImportPath": "k8s.io/apimachinery/pkg/api/errors", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/meta", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/resource", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1alpha1", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/fields", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/labels", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/schema", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/selection", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/types", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/cache", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/clock", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/diff", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/errors", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/framer", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/intstr", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/json", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/net", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/runtime", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/sets", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation/field", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/wait", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/yaml", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/version", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/pkg/watch", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect", - "Rev": "a463f34d125a31787d2be8b47bcf6370b0cf1bde" + "Rev": "91d8586aac31d9086939d077ba556d2c7fb157b4" }, { "ImportPath": "k8s.io/client-go/discovery", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/discovery/fake", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/admissionregistration", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/admissionregistration/v1alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/admissionregistration/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/apps", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/apps/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/apps/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/apps/v1beta2", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/autoscaling", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/autoscaling/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/autoscaling/v2beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/batch", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/batch/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/batch/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/batch/v2alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/certificates", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/certificates/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/core", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/core/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/events", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/events/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/extensions", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/extensions/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/internalinterfaces", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/networking", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/networking/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/policy", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/policy/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/rbac", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/rbac/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/rbac/v1alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/rbac/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/scheduling", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/scheduling/v1alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/settings", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/settings/v1alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/storage", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/storage/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/storage/v1alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/informers/storage/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/scheme", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta2", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v2alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/certificates/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/core/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/events/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/extensions/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/networking/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/policy/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/settings/v1alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/admissionregistration/v1alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/admissionregistration/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/apps/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/apps/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/apps/v1beta2", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/autoscaling/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/autoscaling/v2beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/batch/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/batch/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/batch/v2alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/certificates/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/core/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/events/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/extensions/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/networking/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/policy/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/rbac/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/rbac/v1alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/rbac/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/scheduling/v1alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/settings/v1alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/storage/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/storage/v1alpha1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/listers/storage/v1beta1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/pkg/version", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/rest", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/rest/watch", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/testing", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/tools/auth", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/tools/cache", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/tools/clientcmd", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/tools/clientcmd/api", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/tools/clientcmd/api/latest", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/tools/clientcmd/api/v1", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/tools/metrics", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/tools/pager", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/tools/record", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/tools/reference", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/transport", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/util/buffer", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/util/cert", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/util/flowcontrol", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/util/homedir", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/util/integer", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/client-go/util/workqueue", - "Rev": "18ec62fe90328a54f7ab513d5fedf3e8650c98b5" + "Rev": "21ab0aa61a13eb1ea583b24c69943f9fea5929bd" }, { "ImportPath": "k8s.io/kube-openapi/pkg/common", diff --git a/README.md b/README.md index d2aaf2b3..95ba305a 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,22 @@ type User struct { } ``` +## Validation + +To validate custom resources, use the [`CustomResourceValidation`](https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/#validation) feature. + +This feature is beta and enabled by default in v1.9. If you are using v1.8, enable the feature using +the `CustomResourceValidation` feature gate on the [kube-apiserver](https://kubernetes.io/docs/admin/kube-apiserver): + +```sh +--feature-gates=CustomResourceValidation=true +``` + +### Example + +The schema in the [example CRD](./artifacts/examples/crd.yaml) applies the following validation on the custom resource: +`spec.replicas` must be an integer and must have a minimum value of 1 and a maximum value of 10. + ## Cleanup You can clean up the created CustomResourceDefinition with: diff --git a/artifacts/examples/crd.yaml b/artifacts/examples/crd.yaml index 4a457068..36469161 100644 --- a/artifacts/examples/crd.yaml +++ b/artifacts/examples/crd.yaml @@ -9,3 +9,12 @@ spec: kind: Foo plural: foos scope: Namespaced + validation: + openAPIV3Schema: + properties: + spec: + properties: + replicas: + type: integer + minimum: 1 + maximum: 10 diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/BUILD b/vendor/k8s.io/apimachinery/pkg/api/meta/BUILD index aeff38a5..21097f9b 100644 --- a/vendor/k8s.io/apimachinery/pkg/api/meta/BUILD +++ b/vendor/k8s.io/apimachinery/pkg/api/meta/BUILD @@ -52,6 +52,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", ], ) diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/errors.go b/vendor/k8s.io/apimachinery/pkg/api/meta/errors.go index 1503bd6d..cbf5d026 100644 --- a/vendor/k8s.io/apimachinery/pkg/api/meta/errors.go +++ b/vendor/k8s.io/apimachinery/pkg/api/meta/errors.go @@ -20,6 +20,7 @@ import ( "fmt" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/sets" ) // AmbiguousResourceError is returned if the RESTMapper finds multiple matches for a resource @@ -85,11 +86,26 @@ func (e *NoResourceMatchError) Error() string { // NoKindMatchError is returned if the RESTMapper can't find any match for a kind type NoKindMatchError struct { - PartialKind schema.GroupVersionKind + // GroupKind is the API group and kind that was searched + GroupKind schema.GroupKind + // SearchedVersions is the optional list of versions the search was restricted to + SearchedVersions []string } func (e *NoKindMatchError) Error() string { - return fmt.Sprintf("no matches for %v", e.PartialKind) + searchedVersions := sets.NewString() + for _, v := range e.SearchedVersions { + searchedVersions.Insert(schema.GroupVersion{Group: e.GroupKind.Group, Version: v}.String()) + } + + switch len(searchedVersions) { + case 0: + return fmt.Sprintf("no matches for kind %q in group %q", e.GroupKind.Kind, e.GroupKind.Group) + case 1: + return fmt.Sprintf("no matches for kind %q in version %q", e.GroupKind.Kind, searchedVersions.List()[0]) + default: + return fmt.Sprintf("no matches for kind %q in versions %q", e.GroupKind.Kind, searchedVersions.List()) + } } func IsNoMatchError(err error) bool { diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/multirestmapper.go b/vendor/k8s.io/apimachinery/pkg/api/meta/multirestmapper.go index 679098fe..6b01bf19 100644 --- a/vendor/k8s.io/apimachinery/pkg/api/meta/multirestmapper.go +++ b/vendor/k8s.io/apimachinery/pkg/api/meta/multirestmapper.go @@ -179,7 +179,7 @@ func (m MultiRESTMapper) RESTMapping(gk schema.GroupKind, versions ...string) (* if len(errors) > 0 { return nil, utilerrors.NewAggregate(errors) } - return nil, &NoKindMatchError{PartialKind: gk.WithVersion("")} + return nil, &NoKindMatchError{GroupKind: gk, SearchedVersions: versions} } // RESTMappings returns all possible RESTMappings for the provided group kind, or an error @@ -204,7 +204,7 @@ func (m MultiRESTMapper) RESTMappings(gk schema.GroupKind, versions ...string) ( return nil, utilerrors.NewAggregate(errors) } if len(allMappings) == 0 { - return nil, &NoKindMatchError{PartialKind: gk.WithVersion("")} + return nil, &NoKindMatchError{GroupKind: gk, SearchedVersions: versions} } return allMappings, nil } diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/priority.go b/vendor/k8s.io/apimachinery/pkg/api/meta/priority.go index 2a14aa7a..df28e64f 100644 --- a/vendor/k8s.io/apimachinery/pkg/api/meta/priority.go +++ b/vendor/k8s.io/apimachinery/pkg/api/meta/priority.go @@ -153,7 +153,7 @@ func kindMatches(pattern schema.GroupVersionKind, kind schema.GroupVersionKind) } func (m PriorityRESTMapper) RESTMapping(gk schema.GroupKind, versions ...string) (mapping *RESTMapping, err error) { - mappings, err := m.Delegate.RESTMappings(gk) + mappings, err := m.Delegate.RESTMappings(gk, versions...) if err != nil { return nil, err } diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/restmapper.go b/vendor/k8s.io/apimachinery/pkg/api/meta/restmapper.go index 55155a6e..ff945acd 100644 --- a/vendor/k8s.io/apimachinery/pkg/api/meta/restmapper.go +++ b/vendor/k8s.io/apimachinery/pkg/api/meta/restmapper.go @@ -472,7 +472,7 @@ func (m *DefaultRESTMapper) RESTMapping(gk schema.GroupKind, versions ...string) return nil, err } if len(mappings) == 0 { - return nil, &NoKindMatchError{PartialKind: gk.WithVersion("")} + return nil, &NoKindMatchError{GroupKind: gk, SearchedVersions: versions} } // since we rely on RESTMappings method // take the first match and return to the caller @@ -510,7 +510,7 @@ func (m *DefaultRESTMapper) RESTMappings(gk schema.GroupKind, versions ...string } if len(potentialGVK) == 0 { - return nil, &NoKindMatchError{PartialKind: gk.WithVersion("")} + return nil, &NoKindMatchError{GroupKind: gk, SearchedVersions: versions} } for _, gvk := range potentialGVK { diff --git a/vendor/k8s.io/apimachinery/pkg/util/strategicpatch/patch.go b/vendor/k8s.io/apimachinery/pkg/util/strategicpatch/patch.go index fd08759f..09dcd0fd 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/strategicpatch/patch.go +++ b/vendor/k8s.io/apimachinery/pkg/util/strategicpatch/patch.go @@ -1322,23 +1322,23 @@ func mergeMap(original, patch map[string]interface{}, schema LookupPatchMeta, me // If they're both maps or lists, recurse into the value. switch originalType.Kind() { case reflect.Map: - subschema, patchMeta, err := schema.LookupPatchMetadataForStruct(k) - if err != nil { - return nil, err + subschema, patchMeta, err2 := schema.LookupPatchMetadataForStruct(k) + if err2 != nil { + return nil, err2 } - _, patchStrategy, err := extractRetainKeysPatchStrategy(patchMeta.GetPatchStrategies()) - if err != nil { - return nil, err + _, patchStrategy, err2 := extractRetainKeysPatchStrategy(patchMeta.GetPatchStrategies()) + if err2 != nil { + return nil, err2 } original[k], err = mergeMapHandler(original[k], patchV, subschema, patchStrategy, mergeOptions) case reflect.Slice: - subschema, patchMeta, err := schema.LookupPatchMetadataForSlice(k) - if err != nil { - return nil, err + subschema, patchMeta, err2 := schema.LookupPatchMetadataForSlice(k) + if err2 != nil { + return nil, err2 } - _, patchStrategy, err := extractRetainKeysPatchStrategy(patchMeta.GetPatchStrategies()) - if err != nil { - return nil, err + _, patchStrategy, err2 := extractRetainKeysPatchStrategy(patchMeta.GetPatchStrategies()) + if err2 != nil { + return nil, err2 } original[k], err = mergeSliceHandler(original[k], patchV, subschema, patchStrategy, patchMeta.GetPatchMergeKey(), isDeleteList, mergeOptions) default: diff --git a/vendor/k8s.io/client-go/tools/cache/listwatch.go b/vendor/k8s.io/client-go/tools/cache/listwatch.go index db2329c5..06657a3b 100644 --- a/vendor/k8s.io/client-go/tools/cache/listwatch.go +++ b/vendor/k8s.io/client-go/tools/cache/listwatch.go @@ -63,8 +63,18 @@ type Getter interface { // NewListWatchFromClient creates a new ListWatch from the specified client, resource, namespace and field selector. func NewListWatchFromClient(c Getter, resource string, namespace string, fieldSelector fields.Selector) *ListWatch { - listFunc := func(options metav1.ListOptions) (runtime.Object, error) { + optionsModifier := func(options *metav1.ListOptions) { options.FieldSelector = fieldSelector.String() + } + return NewFilteredListWatchFromClient(c, resource, namespace, optionsModifier) +} + +// NewFilteredListWatchFromClient creates a new ListWatch from the specified client, resource, namespace, and option modifier. +// Option modifier is a function takes a ListOptions and modifies the consumed ListOptions. Provide customized modifier function +// to apply modification to ListOptions with a field selector, a label selector, or any other desired options. +func NewFilteredListWatchFromClient(c Getter, resource string, namespace string, optionsModifier func(options *metav1.ListOptions)) *ListWatch { + listFunc := func(options metav1.ListOptions) (runtime.Object, error) { + optionsModifier(&options) return c.Get(). Namespace(namespace). Resource(resource). @@ -74,7 +84,7 @@ func NewListWatchFromClient(c Getter, resource string, namespace string, fieldSe } watchFunc := func(options metav1.ListOptions) (watch.Interface, error) { options.Watch = true - options.FieldSelector = fieldSelector.String() + optionsModifier(&options) return c.Get(). Namespace(namespace). Resource(resource). diff --git a/vendor/k8s.io/client-go/tools/clientcmd/validation.go b/vendor/k8s.io/client-go/tools/clientcmd/validation.go index 2bae0c39..4c7b15b7 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/validation.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/validation.go @@ -253,6 +253,10 @@ func validateAuthInfo(authInfoName string, authInfo clientcmdapi.AuthInfo) []err func validateContext(contextName string, context clientcmdapi.Context, config clientcmdapi.Config) []error { validationErrors := make([]error, 0) + if len(contextName) == 0 { + validationErrors = append(validationErrors, fmt.Errorf("empty context name for %#v is not allowed", context)) + } + if len(context.AuthInfo) == 0 { validationErrors = append(validationErrors, fmt.Errorf("user was not specified for context %q", contextName)) } else if _, exists := config.AuthInfos[context.AuthInfo]; !exists {