Skip to content

Commit 65a963f

Browse files
authored
Merge pull request #17520 from liggitt/dc-scale-38
Fix deploymentconfig scale
2 parents ee8e85f + 5ae38cf commit 65a963f

File tree

9 files changed

+103
-29
lines changed

9 files changed

+103
-29
lines changed

pkg/apps/apis/apps/types.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,6 @@ const (
138138
// +genclient:method=Instantiate,verb=create,subresource=instantiate,input=DeploymentRequest
139139
// +genclient:method=Rollback,verb=create,subresource=rollback,input=DeploymentConfigRollback
140140
// +genclient:method=GetScale,verb=get,subresource=scale,result=k8s.io/api/extensions/v1beta1.Scale
141-
// +genclient:method=UpdateScale,verb=update,subresource=scale,input=k8s.io/api/extensions/v1beta1.Scale,result=k8s.io/api/extensions/v1beta1.Scale
142141
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
143142

144143
// DeploymentConfig represents a configuration for a single deployment (represented as a

pkg/apps/apiserver/apiserver.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
kclientsetexternal "k8s.io/client-go/kubernetes"
1414
restclient "k8s.io/client-go/rest"
1515
kapi "k8s.io/kubernetes/pkg/api"
16+
v1beta1extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
1617
kclientsetinternal "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
1718
kubeletclient "k8s.io/kubernetes/pkg/kubelet/client"
1819

@@ -89,6 +90,12 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
8990
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(appsapiv1.GroupName, c.ExtraConfig.Registry, c.ExtraConfig.Scheme, parameterCodec, c.ExtraConfig.Codecs)
9091
apiGroupInfo.GroupMeta.GroupVersion = appsapiv1.SchemeGroupVersion
9192
apiGroupInfo.VersionedResourcesStorageMap[appsapiv1.SchemeGroupVersion.Version] = v1Storage
93+
94+
if apiGroupInfo.SubresourceGroupVersionKind == nil {
95+
apiGroupInfo.SubresourceGroupVersionKind = map[string]schema.GroupVersionKind{}
96+
}
97+
apiGroupInfo.SubresourceGroupVersionKind["deploymentconfigs/scale"] = v1beta1extensions.SchemeGroupVersion.WithKind("Scale")
98+
9299
if err := s.GenericAPIServer.InstallAPIGroup(&apiGroupInfo); err != nil {
93100
return nil, err
94101
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package scheme
2+
3+
import (
4+
extensionsv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
5+
)
6+
7+
func init() {
8+
// Needed for GetScale/UpdateScale
9+
extensionsv1beta1.AddToScheme(Scheme)
10+
}

pkg/apps/generated/internalclientset/typed/apps/internalversion/deploymentconfig.go

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ type DeploymentConfigInterface interface {
3030
Instantiate(deploymentConfigName string, deploymentRequest *apps.DeploymentRequest) (*apps.DeploymentConfig, error)
3131
Rollback(deploymentConfigName string, deploymentConfigRollback *apps.DeploymentConfigRollback) (*apps.DeploymentConfig, error)
3232
GetScale(deploymentConfigName string, options v1.GetOptions) (*v1beta1.Scale, error)
33-
UpdateScale(deploymentConfigName string, scale *v1beta1.Scale) (*v1beta1.Scale, error)
3433

3534
DeploymentConfigExpansion
3635
}
@@ -202,17 +201,3 @@ func (c *deploymentConfigs) GetScale(deploymentConfigName string, options v1.Get
202201
Into(result)
203202
return
204203
}
205-
206-
// 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.
207-
func (c *deploymentConfigs) UpdateScale(deploymentConfigName string, scale *v1beta1.Scale) (result *v1beta1.Scale, err error) {
208-
result = &v1beta1.Scale{}
209-
err = c.client.Put().
210-
Namespace(c.ns).
211-
Resource("deploymentconfigs").
212-
Name(deploymentConfigName).
213-
SubResource("scale").
214-
Body(scale).
215-
Do().
216-
Into(result)
217-
return
218-
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package internalversion
2+
3+
import (
4+
v1beta1 "k8s.io/api/extensions/v1beta1"
5+
"k8s.io/apimachinery/pkg/runtime"
6+
kapi "k8s.io/kubernetes/pkg/api"
7+
)
8+
9+
type DeploymentConfigExpansion interface {
10+
UpdateScale(deploymentConfigName string, scale *v1beta1.Scale) (result *v1beta1.Scale, err error)
11+
}
12+
13+
var scaleCodec = kapi.Codecs.LegacyCodec(v1beta1.SchemeGroupVersion)
14+
15+
// 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.
16+
func (c *deploymentConfigs) UpdateScale(deploymentConfigName string, scale *v1beta1.Scale) (result *v1beta1.Scale, err error) {
17+
// FIXME: make non-homogenous subresource GV client generation work
18+
data, err := runtime.Encode(scaleCodec, scale)
19+
if err != nil {
20+
return nil, err
21+
}
22+
23+
result = &v1beta1.Scale{}
24+
err = c.client.Put().
25+
Namespace(c.ns).
26+
Resource("deploymentconfigs").
27+
Name(deploymentConfigName).
28+
SubResource("scale").
29+
Body(data).
30+
Do().
31+
Into(result)
32+
return
33+
}

pkg/apps/generated/internalclientset/typed/apps/internalversion/fake/fake_deploymentconfig.go

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -154,14 +154,3 @@ func (c *FakeDeploymentConfigs) GetScale(deploymentConfigName string, options v1
154154
}
155155
return obj.(*v1beta1.Scale), err
156156
}
157-
158-
// 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.
159-
func (c *FakeDeploymentConfigs) UpdateScale(deploymentConfigName string, scale *v1beta1.Scale) (result *v1beta1.Scale, err error) {
160-
obj, err := c.Fake.
161-
Invokes(testing.NewUpdateSubresourceAction(deploymentconfigsResource, "scale", c.ns, scale), &v1beta1.Scale{})
162-
163-
if obj == nil {
164-
return nil, err
165-
}
166-
return obj.(*v1beta1.Scale), err
167-
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package fake
2+
3+
import (
4+
v1beta1 "k8s.io/api/extensions/v1beta1"
5+
testing "k8s.io/client-go/testing"
6+
)
7+
8+
// UpdateScale takes the representation of a scale and updates it. Returns the server's representation of the scale, and an error, if t
9+
func (c *FakeDeploymentConfigs) UpdateScale(deploymentConfigName string, scale *v1beta1.Scale) (result *v1beta1.Scale, err error) {
10+
obj, err := c.Fake.
11+
Invokes(testing.NewUpdateSubresourceAction(deploymentconfigsResource, "scale", c.ns, scale), &v1beta1.Scale{})
12+
13+
if obj == nil {
14+
return nil, err
15+
}
16+
return obj.(*v1beta1.Scale), err
17+
}
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
11
package internalversion
2-
3-
type DeploymentConfigExpansion interface{}

test/integration/deploy_scale_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package integration
22

33
import (
4+
"fmt"
45
"testing"
56
"time"
67

78
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
89
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10+
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
911
"k8s.io/apimachinery/pkg/util/wait"
1012
internalextensionsv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
1113

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

55+
{
56+
// Get scale subresource
57+
legacyPath := fmt.Sprintf("/oapi/v1/namespaces/%s/deploymentconfigs/%s/scale", dc.Namespace, dc.Name)
58+
legacyScale := &unstructured.Unstructured{}
59+
if err := adminAppsClient.RESTClient().Get().AbsPath(legacyPath).Do().Into(legacyScale); err != nil {
60+
t.Fatal(err)
61+
}
62+
// Ensure correct type
63+
if legacyScale.GetAPIVersion() != "extensions/v1beta1" {
64+
t.Fatalf("Expected extensions/v1beta1, got %v", legacyScale.GetAPIVersion())
65+
}
66+
// Ensure we can submit the same type back
67+
if err := adminAppsClient.RESTClient().Put().AbsPath(legacyPath).Body(legacyScale).Do().Error(); err != nil {
68+
t.Fatal(err)
69+
}
70+
}
71+
72+
{
73+
// Get scale subresource
74+
scalePath := fmt.Sprintf("/apis/apps.openshift.io/v1/namespaces/%s/deploymentconfigs/%s/scale", dc.Namespace, dc.Name)
75+
scale := &unstructured.Unstructured{}
76+
if err := adminAppsClient.RESTClient().Get().AbsPath(scalePath).Do().Into(scale); err != nil {
77+
t.Fatal(err)
78+
}
79+
// Ensure correct type
80+
if scale.GetAPIVersion() != "extensions/v1beta1" {
81+
t.Fatalf("Expected extensions/v1beta1, got %v", scale.GetAPIVersion())
82+
}
83+
// Ensure we can submit the same type back
84+
if err := adminAppsClient.RESTClient().Put().AbsPath(scalePath).Body(scale).Do().Error(); err != nil {
85+
t.Fatal(err)
86+
}
87+
}
88+
5389
condition := func() (bool, error) {
5490
config, err := adminAppsClient.DeploymentConfigs(namespace).Get(dc.Name, metav1.GetOptions{})
5591
if err != nil {

0 commit comments

Comments
 (0)