Skip to content

Commit

Permalink
Merge pull request #17520 from liggitt/dc-scale-38
Browse files Browse the repository at this point in the history
Fix deploymentconfig scale
  • Loading branch information
deads2k authored Dec 6, 2017
2 parents ee8e85f + 5ae38cf commit 65a963f
Show file tree
Hide file tree
Showing 9 changed files with 103 additions and 29 deletions.
1 change: 0 additions & 1 deletion pkg/apps/apis/apps/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,6 @@ const (
// +genclient:method=Instantiate,verb=create,subresource=instantiate,input=DeploymentRequest
// +genclient:method=Rollback,verb=create,subresource=rollback,input=DeploymentConfigRollback
// +genclient:method=GetScale,verb=get,subresource=scale,result=k8s.io/api/extensions/v1beta1.Scale
// +genclient:method=UpdateScale,verb=update,subresource=scale,input=k8s.io/api/extensions/v1beta1.Scale,result=k8s.io/api/extensions/v1beta1.Scale
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

// DeploymentConfig represents a configuration for a single deployment (represented as a
Expand Down
7 changes: 7 additions & 0 deletions pkg/apps/apiserver/apiserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
kclientsetexternal "k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest"
kapi "k8s.io/kubernetes/pkg/api"
v1beta1extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
kclientsetinternal "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
kubeletclient "k8s.io/kubernetes/pkg/kubelet/client"

Expand Down Expand Up @@ -89,6 +90,12 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(appsapiv1.GroupName, c.ExtraConfig.Registry, c.ExtraConfig.Scheme, parameterCodec, c.ExtraConfig.Codecs)
apiGroupInfo.GroupMeta.GroupVersion = appsapiv1.SchemeGroupVersion
apiGroupInfo.VersionedResourcesStorageMap[appsapiv1.SchemeGroupVersion.Version] = v1Storage

if apiGroupInfo.SubresourceGroupVersionKind == nil {
apiGroupInfo.SubresourceGroupVersionKind = map[string]schema.GroupVersionKind{}
}
apiGroupInfo.SubresourceGroupVersionKind["deploymentconfigs/scale"] = v1beta1extensions.SchemeGroupVersion.WithKind("Scale")

if err := s.GenericAPIServer.InstallAPIGroup(&apiGroupInfo); err != nil {
return nil, err
}
Expand Down
10 changes: 10 additions & 0 deletions pkg/apps/generated/internalclientset/scheme/register_expansion.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package scheme

import (
extensionsv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
)

func init() {
// Needed for GetScale/UpdateScale
extensionsv1beta1.AddToScheme(Scheme)
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ type DeploymentConfigInterface interface {
Instantiate(deploymentConfigName string, deploymentRequest *apps.DeploymentRequest) (*apps.DeploymentConfig, error)
Rollback(deploymentConfigName string, deploymentConfigRollback *apps.DeploymentConfigRollback) (*apps.DeploymentConfig, error)
GetScale(deploymentConfigName string, options v1.GetOptions) (*v1beta1.Scale, error)
UpdateScale(deploymentConfigName string, scale *v1beta1.Scale) (*v1beta1.Scale, error)

DeploymentConfigExpansion
}
Expand Down Expand Up @@ -202,17 +201,3 @@ func (c *deploymentConfigs) GetScale(deploymentConfigName string, options v1.Get
Into(result)
return
}

// UpdateScale takes the top resource name and the representation of a scale and updates it. Returns the server's representation of the scale, and an error, if there is any.
func (c *deploymentConfigs) UpdateScale(deploymentConfigName string, scale *v1beta1.Scale) (result *v1beta1.Scale, err error) {
result = &v1beta1.Scale{}
err = c.client.Put().
Namespace(c.ns).
Resource("deploymentconfigs").
Name(deploymentConfigName).
SubResource("scale").
Body(scale).
Do().
Into(result)
return
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package internalversion

import (
v1beta1 "k8s.io/api/extensions/v1beta1"
"k8s.io/apimachinery/pkg/runtime"
kapi "k8s.io/kubernetes/pkg/api"
)

type DeploymentConfigExpansion interface {
UpdateScale(deploymentConfigName string, scale *v1beta1.Scale) (result *v1beta1.Scale, err error)
}

var scaleCodec = kapi.Codecs.LegacyCodec(v1beta1.SchemeGroupVersion)

// UpdateScale takes the top resource name and the representation of a scale and updates it. Returns the server's representation of the scale, and an error, if there is any.
func (c *deploymentConfigs) UpdateScale(deploymentConfigName string, scale *v1beta1.Scale) (result *v1beta1.Scale, err error) {
// FIXME: make non-homogenous subresource GV client generation work
data, err := runtime.Encode(scaleCodec, scale)
if err != nil {
return nil, err
}

result = &v1beta1.Scale{}
err = c.client.Put().
Namespace(c.ns).
Resource("deploymentconfigs").
Name(deploymentConfigName).
SubResource("scale").
Body(data).
Do().
Into(result)
return
}
Original file line number Diff line number Diff line change
Expand Up @@ -154,14 +154,3 @@ func (c *FakeDeploymentConfigs) GetScale(deploymentConfigName string, options v1
}
return obj.(*v1beta1.Scale), err
}

// UpdateScale takes the representation of a scale and updates it. Returns the server's representation of the scale, and an error, if there is any.
func (c *FakeDeploymentConfigs) UpdateScale(deploymentConfigName string, scale *v1beta1.Scale) (result *v1beta1.Scale, err error) {
obj, err := c.Fake.
Invokes(testing.NewUpdateSubresourceAction(deploymentconfigsResource, "scale", c.ns, scale), &v1beta1.Scale{})

if obj == nil {
return nil, err
}
return obj.(*v1beta1.Scale), err
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package fake

import (
v1beta1 "k8s.io/api/extensions/v1beta1"
testing "k8s.io/client-go/testing"
)

// UpdateScale takes the representation of a scale and updates it. Returns the server's representation of the scale, and an error, if t
func (c *FakeDeploymentConfigs) UpdateScale(deploymentConfigName string, scale *v1beta1.Scale) (result *v1beta1.Scale, err error) {
obj, err := c.Fake.
Invokes(testing.NewUpdateSubresourceAction(deploymentconfigsResource, "scale", c.ns, scale), &v1beta1.Scale{})

if obj == nil {
return nil, err
}
return obj.(*v1beta1.Scale), err
}
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
package internalversion

type DeploymentConfigExpansion interface{}
36 changes: 36 additions & 0 deletions test/integration/deploy_scale_test.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package integration

import (
"fmt"
"testing"
"time"

extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/util/wait"
internalextensionsv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"

Expand Down Expand Up @@ -50,6 +52,40 @@ func TestDeployScale(t *testing.T) {
}
generation := dc.Generation

{
// Get scale subresource
legacyPath := fmt.Sprintf("/oapi/v1/namespaces/%s/deploymentconfigs/%s/scale", dc.Namespace, dc.Name)
legacyScale := &unstructured.Unstructured{}
if err := adminAppsClient.RESTClient().Get().AbsPath(legacyPath).Do().Into(legacyScale); err != nil {
t.Fatal(err)
}
// Ensure correct type
if legacyScale.GetAPIVersion() != "extensions/v1beta1" {
t.Fatalf("Expected extensions/v1beta1, got %v", legacyScale.GetAPIVersion())
}
// Ensure we can submit the same type back
if err := adminAppsClient.RESTClient().Put().AbsPath(legacyPath).Body(legacyScale).Do().Error(); err != nil {
t.Fatal(err)
}
}

{
// Get scale subresource
scalePath := fmt.Sprintf("/apis/apps.openshift.io/v1/namespaces/%s/deploymentconfigs/%s/scale", dc.Namespace, dc.Name)
scale := &unstructured.Unstructured{}
if err := adminAppsClient.RESTClient().Get().AbsPath(scalePath).Do().Into(scale); err != nil {
t.Fatal(err)
}
// Ensure correct type
if scale.GetAPIVersion() != "extensions/v1beta1" {
t.Fatalf("Expected extensions/v1beta1, got %v", scale.GetAPIVersion())
}
// Ensure we can submit the same type back
if err := adminAppsClient.RESTClient().Put().AbsPath(scalePath).Body(scale).Do().Error(); err != nil {
t.Fatal(err)
}
}

condition := func() (bool, error) {
config, err := adminAppsClient.DeploymentConfigs(namespace).Get(dc.Name, metav1.GetOptions{})
if err != nil {
Expand Down

0 comments on commit 65a963f

Please sign in to comment.