From cdded4f0113217e09ae650bdeaf92af809b7064c Mon Sep 17 00:00:00 2001 From: Wojciech Tyczynski Date: Thu, 26 Nov 2015 10:40:45 +0100 Subject: [PATCH] Use VersionedParams in "extensions" client. --- pkg/api/conversion.go | 30 +++++++++++++++++-- pkg/apis/extensions/register.go | 4 +++ pkg/apis/extensions/v1beta1/register.go | 4 +++ pkg/client/cache/listwatch.go | 5 ++-- pkg/client/cache/listwatch_test.go | 2 +- pkg/client/unversioned/daemon_sets.go | 4 +-- pkg/client/unversioned/deployment.go | 3 +- pkg/client/unversioned/helper.go | 9 ------ .../unversioned/horizontalpodautoscaler.go | 3 +- pkg/client/unversioned/ingress.go | 3 +- pkg/client/unversioned/jobs.go | 3 +- pkg/client/unversioned/request.go | 13 -------- pkg/client/unversioned/request_test.go | 10 ------- 13 files changed, 45 insertions(+), 48 deletions(-) diff --git a/pkg/api/conversion.go b/pkg/api/conversion.go index f370ad0896d..8411b9299ad 100644 --- a/pkg/api/conversion.go +++ b/pkg/api/conversion.go @@ -32,8 +32,12 @@ var Codec = runtime.CodecFor(Scheme, "") func init() { Scheme.AddDefaultingFuncs( func(obj *unversioned.ListOptions) { - obj.LabelSelector = unversioned.LabelSelector{labels.Everything()} - obj.FieldSelector = unversioned.FieldSelector{fields.Everything()} + if obj.LabelSelector.Selector == nil { + obj.LabelSelector = unversioned.LabelSelector{labels.Everything()} + } + if obj.FieldSelector.Selector == nil { + obj.FieldSelector = unversioned.FieldSelector{fields.Everything()} + } }, // TODO: see about moving this into v1/defaults.go func(obj *PodExecOptions) { @@ -135,6 +139,28 @@ func init() { *out = in.Selector.String() return nil }, + func(in *unversioned.LabelSelector, out *unversioned.LabelSelector, s conversion.Scope) error { + if in.Selector == nil { + return nil + } + selector, err := labels.Parse(in.Selector.String()) + if err != nil { + return err + } + out.Selector = selector + return nil + }, + func(in *unversioned.FieldSelector, out *unversioned.FieldSelector, s conversion.Scope) error { + if in.Selector == nil { + return nil + } + selector, err := fields.ParseSelector(in.Selector.String()) + if err != nil { + return err + } + out.Selector = selector + return nil + }, func(in *resource.Quantity, out *resource.Quantity, s conversion.Scope) error { // Cannot deep copy these, because inf.Dec has unexported fields. *out = *in.Copy() diff --git a/pkg/apis/extensions/register.go b/pkg/apis/extensions/register.go index 029bfa1b75f..9d861535936 100644 --- a/pkg/apis/extensions/register.go +++ b/pkg/apis/extensions/register.go @@ -57,6 +57,10 @@ func addKnownTypes() { &Ingress{}, &IngressList{}, ) + + // Register Unversioned types + // TODO this should not be done here + api.Scheme.AddKnownTypes(SchemeGroupVersion, &unversioned.ListOptions{}) } func (*ClusterAutoscaler) IsAnAPIObject() {} diff --git a/pkg/apis/extensions/v1beta1/register.go b/pkg/apis/extensions/v1beta1/register.go index f41a5d88c1e..547283b3d71 100644 --- a/pkg/apis/extensions/v1beta1/register.go +++ b/pkg/apis/extensions/v1beta1/register.go @@ -55,6 +55,10 @@ func addKnownTypes() { &Ingress{}, &IngressList{}, ) + + // Register Unversioned types + // TODO this should not be done here + api.Scheme.AddKnownTypes(SchemeGroupVersion, &unversioned.ListOptions{}) } func (*ClusterAutoscaler) IsAnAPIObject() {} diff --git a/pkg/client/cache/listwatch.go b/pkg/client/cache/listwatch.go index 810a56da36f..0cb0ace4923 100644 --- a/pkg/client/cache/listwatch.go +++ b/pkg/client/cache/listwatch.go @@ -19,6 +19,7 @@ package cache import ( "time" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/fields" @@ -60,9 +61,7 @@ func NewListWatchFromClient(c Getter, resource string, namespace string, fieldSe Prefix("watch"). Namespace(namespace). Resource(resource). - // TODO: Use VersionedParams once this is supported for non v1 API. - Param("resourceVersion", options.ResourceVersion). - TimeoutSeconds(timeoutFromListOptions(options)). + VersionedParams(&options, api.Scheme). FieldsSelectorParam(fieldSelector). Watch() } diff --git a/pkg/client/cache/listwatch_test.go b/pkg/client/cache/listwatch_test.go index 3e7e42bf97b..716e56cfdc8 100644 --- a/pkg/client/cache/listwatch_test.go +++ b/pkg/client/cache/listwatch_test.go @@ -117,7 +117,7 @@ func TestListWatchesCanWatch(t *testing.T) { { location: buildLocation( testapi.Default.ResourcePathWithPrefix("watch", "nodes", api.NamespaceAll, ""), - buildQueryValues(url.Values{"resourceVersion": []string{""}})), + buildQueryValues(url.Values{})), rv: "", resource: "nodes", namespace: api.NamespaceAll, diff --git a/pkg/client/unversioned/daemon_sets.go b/pkg/client/unversioned/daemon_sets.go index 8d7c676a650..9e319a75cd6 100644 --- a/pkg/client/unversioned/daemon_sets.go +++ b/pkg/client/unversioned/daemon_sets.go @@ -17,6 +17,7 @@ limitations under the License. package unversioned import ( + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/fields" @@ -97,8 +98,7 @@ func (c *daemonSets) Watch(label labels.Selector, field fields.Selector, opts un Prefix("watch"). Namespace(c.ns). Resource("daemonsets"). - Param("resourceVersion", opts.ResourceVersion). - TimeoutSeconds(TimeoutFromListOptions(opts)). + VersionedParams(&opts, api.Scheme). LabelsSelectorParam(label). FieldsSelectorParam(field). Watch() diff --git a/pkg/client/unversioned/deployment.go b/pkg/client/unversioned/deployment.go index f19c4f424b3..9a15aa71e8b 100644 --- a/pkg/client/unversioned/deployment.go +++ b/pkg/client/unversioned/deployment.go @@ -107,8 +107,7 @@ func (c *deployments) Watch(label labels.Selector, field fields.Selector, opts u Prefix("watch"). Namespace(c.ns). Resource("deployments"). - Param("resourceVersion", opts.ResourceVersion). - TimeoutSeconds(TimeoutFromListOptions(opts)). + VersionedParams(&opts, api.Scheme). LabelsSelectorParam(label). FieldsSelectorParam(field). Watch() diff --git a/pkg/client/unversioned/helper.go b/pkg/client/unversioned/helper.go index 9baed37add6..736cdb5745d 100644 --- a/pkg/client/unversioned/helper.go +++ b/pkg/client/unversioned/helper.go @@ -568,12 +568,3 @@ func DefaultKubernetesUserAgent() string { version = seg[0] return fmt.Sprintf("%s/%s (%s/%s) kubernetes/%s", path.Base(os.Args[0]), version, gruntime.GOOS, gruntime.GOARCH, commit) } - -// TimeoutFromListOptions returns timeout to be set via TimeoutSeconds() method -// based on given options. -func TimeoutFromListOptions(options unversioned.ListOptions) time.Duration { - if options.TimeoutSeconds != nil { - return time.Duration(*options.TimeoutSeconds) * time.Second - } - return 0 -} diff --git a/pkg/client/unversioned/horizontalpodautoscaler.go b/pkg/client/unversioned/horizontalpodautoscaler.go index a205104a1f5..914abfbaebb 100644 --- a/pkg/client/unversioned/horizontalpodautoscaler.go +++ b/pkg/client/unversioned/horizontalpodautoscaler.go @@ -109,8 +109,7 @@ func (c *horizontalPodAutoscalers) Watch(label labels.Selector, field fields.Sel Prefix("watch"). Namespace(c.ns). Resource("horizontalPodAutoscalers"). - Param("resourceVersion", opts.ResourceVersion). - TimeoutSeconds(TimeoutFromListOptions(opts)). + VersionedParams(&opts, api.Scheme). LabelsSelectorParam(label). FieldsSelectorParam(field). Watch() diff --git a/pkg/client/unversioned/ingress.go b/pkg/client/unversioned/ingress.go index 28df8783ec9..627d6a8a242 100644 --- a/pkg/client/unversioned/ingress.go +++ b/pkg/client/unversioned/ingress.go @@ -99,8 +99,7 @@ func (c *ingress) Watch(label labels.Selector, field fields.Selector, opts unver Prefix("watch"). Namespace(c.ns). Resource("ingresses"). - Param("resourceVersion", opts.ResourceVersion). - TimeoutSeconds(TimeoutFromListOptions(opts)). + VersionedParams(&opts, api.Scheme). LabelsSelectorParam(label). FieldsSelectorParam(field). Watch() diff --git a/pkg/client/unversioned/jobs.go b/pkg/client/unversioned/jobs.go index 84adeee97f5..c59208dbcf1 100644 --- a/pkg/client/unversioned/jobs.go +++ b/pkg/client/unversioned/jobs.go @@ -103,8 +103,7 @@ func (c *jobs) Watch(label labels.Selector, field fields.Selector, opts unversio Prefix("watch"). Namespace(c.ns). Resource("jobs"). - Param("resourceVersion", opts.ResourceVersion). - TimeoutSeconds(TimeoutFromListOptions(opts)). + VersionedParams(&opts, api.Scheme). LabelsSelectorParam(label). FieldsSelectorParam(field). Watch() diff --git a/pkg/client/unversioned/request.go b/pkg/client/unversioned/request.go index bc8478fe43c..d6f20a2cc0c 100644 --- a/pkg/client/unversioned/request.go +++ b/pkg/client/unversioned/request.go @@ -464,19 +464,6 @@ func (r *Request) Timeout(d time.Duration) *Request { return r } -// Timeout makes the request use the given duration as a timeout. Sets the "timeoutSeconds" -// parameter. -func (r *Request) TimeoutSeconds(d time.Duration) *Request { - if r.err != nil { - return r - } - if d != 0 { - timeout := int64(d.Seconds()) - r.Param("timeoutSeconds", strconv.FormatInt(timeout, 10)) - } - return r -} - // Body makes the request use obj as the body. Optional. // If obj is a string, try to read a file of that name. // If obj is a []byte, send it directly. diff --git a/pkg/client/unversioned/request_test.go b/pkg/client/unversioned/request_test.go index 3be1b09b09d..db4fef4cca5 100644 --- a/pkg/client/unversioned/request_test.go +++ b/pkg/client/unversioned/request_test.go @@ -176,16 +176,6 @@ func TestRequestParam(t *testing.T) { } } -func TestTimeoutSeconds(t *testing.T) { - r := &Request{} - r.TimeoutSeconds(time.Duration(5 * time.Second)) - if !reflect.DeepEqual(r.params, url.Values{ - "timeoutSeconds": []string{"5"}, - }) { - t.Errorf("invalid timeoutSeconds parameter: %#v", r) - } -} - func TestRequestVersionedParams(t *testing.T) { r := (&Request{apiVersion: "v1"}).Param("foo", "a") if !reflect.DeepEqual(r.params, url.Values{"foo": []string{"a"}}) {