Add context and options to scale client

Kubernetes-commit: da3c3432d8361f315e7f562563e68316b10b9a2d
This commit is contained in:
Julian V. Modesto 2020-02-26 18:39:57 -05:00 committed by Kubernetes Publisher
parent c0782940c8
commit 6776475b71
4 changed files with 35 additions and 16 deletions

View File

@ -21,6 +21,7 @@ import (
"fmt" "fmt"
autoscaling "k8s.io/api/autoscaling/v1" autoscaling "k8s.io/api/autoscaling/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
serializer "k8s.io/apimachinery/pkg/runtime/serializer" serializer "k8s.io/apimachinery/pkg/runtime/serializer"
@ -31,6 +32,14 @@ import (
var scaleConverter = NewScaleConverter() var scaleConverter = NewScaleConverter()
var codecs = serializer.NewCodecFactory(scaleConverter.Scheme()) var codecs = serializer.NewCodecFactory(scaleConverter.Scheme())
var parameterScheme = runtime.NewScheme()
var dynamicParameterCodec = runtime.NewParameterCodec(parameterScheme)
var versionV1 = schema.GroupVersion{Version: "v1"}
func init() {
metav1.AddToGroupVersion(parameterScheme, versionV1)
}
// scaleClient is an implementation of ScalesGetter // scaleClient is an implementation of ScalesGetter
// which makes use of a RESTMapper and a generic REST // which makes use of a RESTMapper and a generic REST
@ -138,7 +147,7 @@ func (c *scaleClient) Scales(namespace string) ScaleInterface {
} }
} }
func (c *namespacedScaleClient) Get(resource schema.GroupResource, name string) (*autoscaling.Scale, error) { func (c *namespacedScaleClient) Get(ctx context.Context, resource schema.GroupResource, name string, opts metav1.GetOptions) (*autoscaling.Scale, error) {
// Currently, a /scale endpoint can return different scale types. // Currently, a /scale endpoint can return different scale types.
// Until we have support for the alternative API representations proposal, // Until we have support for the alternative API representations proposal,
// we need to deal with accepting different API versions. // we need to deal with accepting different API versions.
@ -155,7 +164,8 @@ func (c *namespacedScaleClient) Get(resource schema.GroupResource, name string)
Resource(gvr.Resource). Resource(gvr.Resource).
Name(name). Name(name).
SubResource("scale"). SubResource("scale").
Do(context.TODO()) SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1).
Do(ctx)
if err := result.Error(); err != nil { if err := result.Error(); err != nil {
return nil, err return nil, err
} }
@ -163,7 +173,7 @@ func (c *namespacedScaleClient) Get(resource schema.GroupResource, name string)
return convertToScale(&result) return convertToScale(&result)
} }
func (c *namespacedScaleClient) Update(resource schema.GroupResource, scale *autoscaling.Scale) (*autoscaling.Scale, error) { func (c *namespacedScaleClient) Update(ctx context.Context, resource schema.GroupResource, scale *autoscaling.Scale, opts metav1.UpdateOptions) (*autoscaling.Scale, error) {
path, gvr, err := c.client.pathAndVersionFor(resource) path, gvr, err := c.client.pathAndVersionFor(resource)
if err != nil { if err != nil {
return nil, fmt.Errorf("unable to get client for %s: %v", resource.String(), err) return nil, fmt.Errorf("unable to get client for %s: %v", resource.String(), err)
@ -196,8 +206,9 @@ func (c *namespacedScaleClient) Update(resource schema.GroupResource, scale *aut
Resource(gvr.Resource). Resource(gvr.Resource).
Name(scale.Name). Name(scale.Name).
SubResource("scale"). SubResource("scale").
SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1).
Body(scaleUpdateBytes). Body(scaleUpdateBytes).
Do(context.TODO()) Do(ctx)
if err := result.Error(); err != nil { if err := result.Error(); err != nil {
// propagate "raw" error from the API // propagate "raw" error from the API
// this allows callers to interpret underlying Reason field // this allows callers to interpret underlying Reason field
@ -208,7 +219,7 @@ func (c *namespacedScaleClient) Update(resource schema.GroupResource, scale *aut
return convertToScale(&result) return convertToScale(&result)
} }
func (c *namespacedScaleClient) Patch(gvr schema.GroupVersionResource, name string, pt types.PatchType, data []byte) (*autoscaling.Scale, error) { func (c *namespacedScaleClient) Patch(ctx context.Context, gvr schema.GroupVersionResource, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*autoscaling.Scale, error) {
groupVersion := gvr.GroupVersion() groupVersion := gvr.GroupVersion()
result := c.client.clientBase.Patch(pt). result := c.client.clientBase.Patch(pt).
AbsPath(c.client.apiPathFor(groupVersion)). AbsPath(c.client.apiPathFor(groupVersion)).
@ -216,8 +227,9 @@ func (c *namespacedScaleClient) Patch(gvr schema.GroupVersionResource, name stri
Resource(gvr.Resource). Resource(gvr.Resource).
Name(name). Name(name).
SubResource("scale"). SubResource("scale").
SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1).
Body(data). Body(data).
Do(context.TODO()) Do(ctx)
if err := result.Error(); err != nil { if err := result.Error(); err != nil {
return nil, err return nil, err
} }

View File

@ -18,6 +18,7 @@ package scale
import ( import (
"bytes" "bytes"
"context"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
@ -273,7 +274,7 @@ func TestGetScale(t *testing.T) {
} }
for _, groupResource := range groupResources { for _, groupResource := range groupResources {
scale, err := scaleClient.Scales("default").Get(groupResource, "foo") scale, err := scaleClient.Scales("default").Get(context.TODO(), groupResource, "foo", metav1.GetOptions{})
if !assert.NoError(t, err, "should have been able to fetch a scale for %s", groupResource.String()) { if !assert.NoError(t, err, "should have been able to fetch a scale for %s", groupResource.String()) {
continue continue
} }
@ -301,7 +302,7 @@ func TestUpdateScale(t *testing.T) {
} }
for _, groupResource := range groupResources { for _, groupResource := range groupResources {
scale, err := scaleClient.Scales("default").Update(groupResource, expectedScale) scale, err := scaleClient.Scales("default").Update(context.TODO(), groupResource, expectedScale, metav1.UpdateOptions{})
if !assert.NoError(t, err, "should have been able to fetch a scale for %s", groupResource.String()) { if !assert.NoError(t, err, "should have been able to fetch a scale for %s", groupResource.String()) {
continue continue
} }
@ -344,7 +345,7 @@ func TestPatchScale(t *testing.T) {
patch := []byte(`{"spec":{"replicas":5}}`) patch := []byte(`{"spec":{"replicas":5}}`)
for _, gvr := range gvrs { for _, gvr := range gvrs {
scale, err := scaleClient.Scales("default").Patch(gvr, "foo", types.MergePatchType, patch) scale, err := scaleClient.Scales("default").Patch(context.TODO(), gvr, "foo", types.MergePatchType, patch, metav1.PatchOptions{})
if !assert.NoError(t, err, "should have been able to fetch a scale for %s", gvr.String()) { if !assert.NoError(t, err, "should have been able to fetch a scale for %s", gvr.String()) {
continue continue
} }
@ -354,7 +355,7 @@ func TestPatchScale(t *testing.T) {
patch = []byte(`[{"op":"replace","path":"/spec/replicas","value":5}]`) patch = []byte(`[{"op":"replace","path":"/spec/replicas","value":5}]`)
for _, gvr := range gvrs { for _, gvr := range gvrs {
scale, err := scaleClient.Scales("default").Patch(gvr, "foo", types.JSONPatchType, patch) scale, err := scaleClient.Scales("default").Patch(context.TODO(), gvr, "foo", types.JSONPatchType, patch, metav1.PatchOptions{})
if !assert.NoError(t, err, "should have been able to fetch a scale for %s", gvr.String()) { if !assert.NoError(t, err, "should have been able to fetch a scale for %s", gvr.String()) {
continue continue
} }

View File

@ -20,7 +20,10 @@ limitations under the License.
package fake package fake
import ( import (
"context"
autoscalingapi "k8s.io/api/autoscaling/v1" autoscalingapi "k8s.io/api/autoscaling/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/scale" "k8s.io/client-go/scale"
@ -44,7 +47,7 @@ type fakeNamespacedScaleClient struct {
fake *testing.Fake fake *testing.Fake
} }
func (f *fakeNamespacedScaleClient) Get(resource schema.GroupResource, name string) (*autoscalingapi.Scale, error) { func (f *fakeNamespacedScaleClient) Get(ctx context.Context, resource schema.GroupResource, name string, opts metav1.GetOptions) (*autoscalingapi.Scale, error) {
obj, err := f.fake. obj, err := f.fake.
Invokes(testing.NewGetSubresourceAction(resource.WithVersion(""), f.namespace, "scale", name), &autoscalingapi.Scale{}) Invokes(testing.NewGetSubresourceAction(resource.WithVersion(""), f.namespace, "scale", name), &autoscalingapi.Scale{})
@ -55,7 +58,7 @@ func (f *fakeNamespacedScaleClient) Get(resource schema.GroupResource, name stri
return obj.(*autoscalingapi.Scale), err return obj.(*autoscalingapi.Scale), err
} }
func (f *fakeNamespacedScaleClient) Update(resource schema.GroupResource, scale *autoscalingapi.Scale) (*autoscalingapi.Scale, error) { func (f *fakeNamespacedScaleClient) Update(ctx context.Context, resource schema.GroupResource, scale *autoscalingapi.Scale, opts metav1.UpdateOptions) (*autoscalingapi.Scale, error) {
obj, err := f.fake. obj, err := f.fake.
Invokes(testing.NewUpdateSubresourceAction(resource.WithVersion(""), f.namespace, "scale", scale), &autoscalingapi.Scale{}) Invokes(testing.NewUpdateSubresourceAction(resource.WithVersion(""), f.namespace, "scale", scale), &autoscalingapi.Scale{})
@ -66,7 +69,7 @@ func (f *fakeNamespacedScaleClient) Update(resource schema.GroupResource, scale
return obj.(*autoscalingapi.Scale), err return obj.(*autoscalingapi.Scale), err
} }
func (f *fakeNamespacedScaleClient) Patch(gvr schema.GroupVersionResource, name string, pt types.PatchType, patch []byte) (*autoscalingapi.Scale, error) { func (f *fakeNamespacedScaleClient) Patch(ctx context.Context, gvr schema.GroupVersionResource, name string, pt types.PatchType, patch []byte, opts metav1.PatchOptions) (*autoscalingapi.Scale, error) {
obj, err := f.fake. obj, err := f.fake.
Invokes(testing.NewPatchSubresourceAction(gvr, f.namespace, name, pt, patch, "scale"), &autoscalingapi.Scale{}) Invokes(testing.NewPatchSubresourceAction(gvr, f.namespace, name, pt, patch, "scale"), &autoscalingapi.Scale{})

View File

@ -17,7 +17,10 @@ limitations under the License.
package scale package scale
import ( import (
"context"
autoscalingapi "k8s.io/api/autoscaling/v1" autoscalingapi "k8s.io/api/autoscaling/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
) )
@ -34,11 +37,11 @@ type ScalesGetter interface {
// the scale subresource. // the scale subresource.
type ScaleInterface interface { type ScaleInterface interface {
// Get fetches the scale of the given scalable resource. // Get fetches the scale of the given scalable resource.
Get(resource schema.GroupResource, name string) (*autoscalingapi.Scale, error) Get(ctx context.Context, resource schema.GroupResource, name string, opts metav1.GetOptions) (*autoscalingapi.Scale, error)
// Update updates the scale of the given scalable resource. // Update updates the scale of the given scalable resource.
Update(resource schema.GroupResource, scale *autoscalingapi.Scale) (*autoscalingapi.Scale, error) Update(ctx context.Context, resource schema.GroupResource, scale *autoscalingapi.Scale, opts metav1.UpdateOptions) (*autoscalingapi.Scale, error)
// Patch patches the scale of the given scalable resource. // Patch patches the scale of the given scalable resource.
Patch(gvr schema.GroupVersionResource, name string, pt types.PatchType, data []byte) (*autoscalingapi.Scale, error) Patch(ctx context.Context, gvr schema.GroupVersionResource, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (*autoscalingapi.Scale, error)
} }