Skip to content

Commit 0c65837

Browse files
committed
deploy: use patch for pausing and resuming deployment config
1 parent f0670df commit 0c65837

File tree

3 files changed

+36
-14
lines changed

3 files changed

+36
-14
lines changed

pkg/client/deploymentconfigs.go

+9
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ type DeploymentConfigInterface interface {
2222
Get(name string) (*deployapi.DeploymentConfig, error)
2323
Create(config *deployapi.DeploymentConfig) (*deployapi.DeploymentConfig, error)
2424
Update(config *deployapi.DeploymentConfig) (*deployapi.DeploymentConfig, error)
25+
Patch(name string, pt kapi.PatchType, data []byte, subresources ...string) (result *deployapi.DeploymentConfig, err error)
2526
Delete(name string) error
2627
Watch(opts kapi.ListOptions) (watch.Interface, error)
2728
Generate(name string) (*deployapi.DeploymentConfig, error)
@@ -80,6 +81,14 @@ func (c *deploymentConfigs) Update(deploymentConfig *deployapi.DeploymentConfig)
8081
return
8182
}
8283

84+
// Patch takes the partial representation of a deployment config and updates it.
85+
// Returns the server's representation of the deployment config, and an error, if there is any.
86+
func (c *deploymentConfigs) Patch(name string, pt kapi.PatchType, data []byte, subresources ...string) (result *deployapi.DeploymentConfig, err error) {
87+
result = &deployapi.DeploymentConfig{}
88+
err = c.r.Patch(kapi.StrategicMergePatchType).Namespace(c.ns).Resource("deploymentConfigs").SubResource(subresources...).Name(name).Body(data).Do().Into(result)
89+
return
90+
}
91+
8392
// Delete deletes an existing deploymentConfig.
8493
func (c *deploymentConfigs) Delete(name string) error {
8594
return c.r.Delete().Namespace(c.ns).Resource("deploymentConfigs").Name(name).Do().Error()

pkg/client/testclient/fake_deploymentconfigs.go

+8
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,14 @@ func (c *FakeDeploymentConfigs) Update(inObj *deployapi.DeploymentConfig) (*depl
5454

5555
return obj.(*deployapi.DeploymentConfig), err
5656
}
57+
func (c *FakeDeploymentConfigs) Patch(name string, pt kapi.PatchType, data []byte, subresources ...string) (*deployapi.DeploymentConfig, error) {
58+
obj, err := c.Fake.Invokes(ktestclient.NewPatchAction("deploymentconfigs", c.Namespace, &deployapi.DeploymentConfig{}), &deployapi.DeploymentConfig{})
59+
if obj == nil {
60+
return nil, err
61+
}
62+
63+
return obj.(*deployapi.DeploymentConfig), err
64+
}
5765

5866
func (c *FakeDeploymentConfigs) Delete(name string) error {
5967
_, err := c.Fake.Invokes(core.NewDeleteAction(deploymentConfigsResource, c.Namespace, name), &deployapi.DeploymentConfig{})

pkg/cmd/util/clientcmd/factory_client_access.go

+19-14
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
kclientcmd "k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
2626
kclientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
2727
"k8s.io/kubernetes/pkg/kubectl"
28+
"k8s.io/kubernetes/pkg/kubectl/cmd/set"
2829
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
2930
"k8s.io/kubernetes/pkg/kubectl/resource"
3031
"k8s.io/kubernetes/pkg/runtime"
@@ -269,15 +270,17 @@ func (f *ring0Factory) Printer(mapping *meta.RESTMapping, options kubectl.PrintO
269270
func (f *ring0Factory) Pauser(info *resource.Info) (bool, error) {
270271
switch t := info.Object.(type) {
271272
case *deployapi.DeploymentConfig:
272-
if t.Spec.Paused {
273+
patches := set.CalculatePatches([]*resource.Info{info}, f.JSONEncoder(), func(*resource.Info) (bool, error) {
274+
if t.Spec.Paused {
275+
return false, nil
276+
}
277+
t.Spec.Paused = true
278+
return true, nil
279+
})
280+
if len(patches) == 0 {
273281
return true, nil
274282
}
275-
t.Spec.Paused = true
276-
oc, _, err := f.Clients()
277-
if err != nil {
278-
return false, err
279-
}
280-
_, err = oc.DeploymentConfigs(t.Namespace).Update(t)
283+
_, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, kapi.StrategicMergePatchType, patches[0].Patch)
281284
// TODO: Pause the deployer containers.
282285
return false, err
283286
default:
@@ -328,15 +331,17 @@ func (f *ring0Factory) ResolveImage(image string) (string, error) {
328331
func (f *ring0Factory) Resumer(info *resource.Info) (bool, error) {
329332
switch t := info.Object.(type) {
330333
case *deployapi.DeploymentConfig:
331-
if !t.Spec.Paused {
334+
patches := set.CalculatePatches([]*resource.Info{info}, f.JSONEncoder(), func(*resource.Info) (bool, error) {
335+
if !t.Spec.Paused {
336+
return false, nil
337+
}
338+
t.Spec.Paused = false
339+
return true, nil
340+
})
341+
if len(patches) == 0 {
332342
return true, nil
333343
}
334-
t.Spec.Paused = false
335-
oc, _, err := f.Clients()
336-
if err != nil {
337-
return false, err
338-
}
339-
_, err = oc.DeploymentConfigs(t.Namespace).Update(t)
344+
_, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, kapi.StrategicMergePatchType, patches[0].Patch)
340345
// TODO: Resume the deployer containers.
341346
return false, err
342347
default:

0 commit comments

Comments
 (0)