Skip to content

Commit e1256c0

Browse files
committed
Make delete actually stop resources by default.
Refactor for shared code.
1 parent 01f2019 commit e1256c0

34 files changed

+122
-57
lines changed

contrib/completions/bash/kubectl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@ _kubectl_delete()
343343
flags_completion=()
344344

345345
flags+=("--all")
346+
flags+=("--cascade")
346347
flags+=("--filename=")
347348
flags_with_completion+=("--filename")
348349
flags_completion+=("_filedir '@(json|yaml|yml)'")

docs/kubectl.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,4 @@ kubectl
6666
* [kubectl update](kubectl_update.md) - Update a resource by filename or stdin.
6767
* [kubectl version](kubectl_version.md) - Print the client and server version information.
6868

69-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.529528989 +0000 UTC
69+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.18016485 +0000 UTC

docs/kubectl_api-versions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,4 @@ kubectl api-versions
5050
### SEE ALSO
5151
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
5252

53-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.529124749 +0000 UTC
53+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.179420324 +0000 UTC

docs/kubectl_cluster-info.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,4 @@ kubectl cluster-info
5050
### SEE ALSO
5151
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
5252

53-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.528967691 +0000 UTC
53+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.179075262 +0000 UTC

docs/kubectl_config.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,4 @@ kubectl config SUBCOMMAND
6363
* [kubectl config use-context](kubectl_config_use-context.md) - Sets the current-context in a kubeconfig file
6464
* [kubectl config view](kubectl_config_view.md) - displays Merged kubeconfig settings or a specified kubeconfig file.
6565

66-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.528802509 +0000 UTC
66+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.178743093 +0000 UTC

docs/kubectl_config_set-cluster.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,4 @@ $ kubectl config set-cluster e2e --insecure-skip-tls-verify=true
6565
### SEE ALSO
6666
* [kubectl config](kubectl_config.md) - config modifies kubeconfig files
6767

68-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.527769365 +0000 UTC
68+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.176632377 +0000 UTC

docs/kubectl_config_set-context.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,4 @@ $ kubectl config set-context gce --user=cluster-admin
5858
### SEE ALSO
5959
* [kubectl config](kubectl_config.md) - config modifies kubeconfig files
6060

61-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.528131768 +0000 UTC
61+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.177351504 +0000 UTC

docs/kubectl_config_set-credentials.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,4 @@ $ kubectl set-credentials cluster-admin --client-certificate=~/.kube/admin.crt -
7878
### SEE ALSO
7979
* [kubectl config](kubectl_config.md) - config modifies kubeconfig files
8080

81-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.527942873 +0000 UTC
81+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.176997115 +0000 UTC

docs/kubectl_config_set.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,4 @@ kubectl config set PROPERTY_NAME PROPERTY_VALUE
5252
### SEE ALSO
5353
* [kubectl config](kubectl_config.md) - config modifies kubeconfig files
5454

55-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.528303344 +0000 UTC
55+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.177697607 +0000 UTC

docs/kubectl_config_unset.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,4 @@ kubectl config unset PROPERTY_NAME
5151
### SEE ALSO
5252
* [kubectl config](kubectl_config.md) - config modifies kubeconfig files
5353

54-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.528464868 +0000 UTC
54+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.178014311 +0000 UTC

docs/kubectl_config_use-context.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,4 @@ kubectl config use-context CONTEXT_NAME
5050
### SEE ALSO
5151
* [kubectl config](kubectl_config.md) - config modifies kubeconfig files
5252

53-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.528626589 +0000 UTC
53+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.178387488 +0000 UTC

docs/kubectl_config_view.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,4 @@ $ kubectl config view -o template --template='{{range .users}}{{ if eq .name "e2
7373
### SEE ALSO
7474
* [kubectl config](kubectl_config.md) - config modifies kubeconfig files
7575

76-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.527582988 +0000 UTC
76+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.176300117 +0000 UTC

docs/kubectl_create.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,4 @@ $ cat pod.json | kubectl create -f -
6363
### SEE ALSO
6464
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
6565

66-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.52422236 +0000 UTC
66+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.169347287 +0000 UTC

docs/kubectl_delete.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ $ kubectl delete pods --all
4343

4444
```
4545
--all=false: [-all] to select all the specified resources
46+
--cascade=true: If true, cascade the delete resources managed by this resource (e.g. Pods created by a ReplicationController). Default true.
4647
-f, --filename=[]: Filename, directory, or URL to a file containing the resource to delete
4748
-h, --help=false: help for delete
4849
-l, --selector="": Selector (label query) to filter on
@@ -81,4 +82,4 @@ $ kubectl delete pods --all
8182
### SEE ALSO
8283
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
8384

84-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.524590507 +0000 UTC
85+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.170113984 +0000 UTC

docs/kubectl_describe.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,4 @@ $ kubectl describe pods/nginx
6363
### SEE ALSO
6464
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
6565

66-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.524047164 +0000 UTC
66+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.168905946 +0000 UTC

docs/kubectl_exec.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,4 @@ $ kubectl exec -p 123456-7890 -c ruby-container -i -t -- bash -il
6464
### SEE ALSO
6565
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
6666

67-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.52551618 +0000 UTC
67+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.173193785 +0000 UTC

docs/kubectl_expose.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,4 @@ $ kubectl expose streamer --port=4100 --protocol=udp --service-name=video-stream
8282
### SEE ALSO
8383
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
8484

85-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.527149074 +0000 UTC
85+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.175492324 +0000 UTC

docs/kubectl_get.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,4 @@ $ kubectl get rc/web service/frontend pods/web-pod-13je7
8585
### SEE ALSO
8686
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
8787

88-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.523839103 +0000 UTC
88+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.168465048 +0000 UTC

docs/kubectl_label.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,4 @@ $ kubectl label pods foo bar-
8181
### SEE ALSO
8282
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
8383

84-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.527386643 +0000 UTC
84+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.175924183 +0000 UTC

docs/kubectl_log.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,4 @@ $ kubectl log -f 123456-7890 ruby-container
6262
### SEE ALSO
6363
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
6464

65-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.524938744 +0000 UTC
65+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.170843937 +0000 UTC

docs/kubectl_namespace.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,4 @@ kubectl namespace [namespace]
5353
### SEE ALSO
5454
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
5555

56-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.524751287 +0000 UTC
56+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.170473143 +0000 UTC

docs/kubectl_port-forward.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,4 @@ $ kubectl port-forward -p mypod 0:5000
6868
### SEE ALSO
6969
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
7070

71-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.525691097 +0000 UTC
71+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.173592919 +0000 UTC

docs/kubectl_proxy.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,4 @@ $ kubectl proxy --api-prefix=k8s-api
6565
### SEE ALSO
6666
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
6767

68-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.525864716 +0000 UTC
68+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.173961813 +0000 UTC

docs/kubectl_resize.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,4 @@ $ kubectl resize --current-replicas=2 --replicas=3 replicationcontrollers foo
6868
### SEE ALSO
6969
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
7070

71-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.52532658 +0000 UTC
71+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.171613369 +0000 UTC

docs/kubectl_rolling-update.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,4 @@ $ kubectl rolling-update frontend --image=image:v2
8383
### SEE ALSO
8484
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
8585

86-
###### Auto generated by spf13/cobra at 2015-04-27 22:44:36.84341428 +0000 UTC
86+
###### Auto generated by spf13/cobra at 2015-04-28 21:28:37.951011185 +0000 UTC

docs/kubectl_run-container.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,4 @@ $ kubectl run-container nginx --image=nginx --overrides='{ "apiVersion": "v1beta
7878
### SEE ALSO
7979
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
8080

81-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.526080215 +0000 UTC
81+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.174507457 +0000 UTC

docs/kubectl_stop.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,4 @@ $ kubectl stop -f path/to/resources
7272
### SEE ALSO
7373
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
7474

75-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.526923863 +0000 UTC
75+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.174999749 +0000 UTC

docs/kubectl_update.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,4 @@ $ kubectl update pods my-pod --patch='{ "apiVersion": "v1beta1", "desiredState":
6767
### SEE ALSO
6868
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
6969

70-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.52440746 +0000 UTC
70+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.16972972 +0000 UTC

docs/kubectl_version.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,4 @@ kubectl version
5151
### SEE ALSO
5252
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager
5353

54-
###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.529297188 +0000 UTC
54+
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.179736961 +0000 UTC

docs/man/man1/kubectl-delete.1

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ will be lost along with the rest of the resource.
3333
\fB\-\-all\fP=false
3434
[\-all] to select all the specified resources
3535

36+
.PP
37+
\fB\-\-cascade\fP=true
38+
If true, cascade the delete resources managed by this resource (e.g. Pods created by a ReplicationController). Default true.
39+
3640
.PP
3741
\fB\-f\fP, \fB\-\-filename\fP=[]
3842
Filename, directory, or URL to a file containing the resource to delete

pkg/kubectl/cmd/delete.go

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ func NewCmdDelete(f *cmdutil.Factory, out io.Writer) *cobra.Command {
7272
kubectl.AddJsonFilenameFlag(cmd, &filenames, usage)
7373
cmd.Flags().StringP("selector", "l", "", "Selector (label query) to filter on")
7474
cmd.Flags().Bool("all", false, "[-all] to select all the specified resources")
75+
cmd.Flags().Bool("cascade", true, "If true, cascade the delete resources managed by this resource (e.g. Pods created by a ReplicationController). Default true.")
7576
return cmd
7677
}
7778

@@ -95,20 +96,59 @@ func RunDelete(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []str
9596
return err
9697
}
9798

99+
// By default use a reaper to delete all related resources.
100+
if cmdutil.GetFlagBool(cmd, "cascade") {
101+
return ReapResult(r, f, out, cmdutil.GetFlagBool(cmd, "cascade"))
102+
}
103+
return DeleteResult(r, out)
104+
}
105+
106+
func ReapResult(r *resource.Result, f *cmdutil.Factory, out io.Writer, isDefaultDelete bool) error {
98107
found := 0
99-
err = r.IgnoreErrors(errors.IsNotFound).Visit(func(r *resource.Info) error {
108+
err := r.IgnoreErrors(errors.IsNotFound).Visit(func(info *resource.Info) error {
100109
found++
101-
if err := resource.NewHelper(r.Client, r.Mapping).Delete(r.Namespace, r.Name); err != nil {
110+
reaper, err := f.Reaper(info.Mapping)
111+
if err != nil {
112+
// If the error is "not found" and the user didn't explicitly ask for stop.
113+
if kubectl.IsNoSuchReaperError(err) && isDefaultDelete {
114+
return deleteResource(info, out)
115+
}
102116
return err
103117
}
104-
fmt.Fprintf(out, "%s/%s\n", r.Mapping.Resource, r.Name)
118+
if _, err := reaper.Stop(info.Namespace, info.Name); err != nil {
119+
return err
120+
}
121+
fmt.Fprintf(out, "%s/%s\n", info.Mapping.Resource, info.Name)
105122
return nil
106123
})
107124
if err != nil {
108125
return err
109126
}
110127
if found == 0 {
111-
fmt.Fprintf(cmd.Out(), "No resources found\n")
128+
fmt.Fprintf(out, "No resources found\n")
129+
}
130+
return nil
131+
}
132+
133+
func DeleteResult(r *resource.Result, out io.Writer) error {
134+
found := 0
135+
err := r.IgnoreErrors(errors.IsNotFound).Visit(func(info *resource.Info) error {
136+
found++
137+
return deleteResource(info, out)
138+
})
139+
if err != nil {
140+
return err
141+
}
142+
if found == 0 {
143+
fmt.Fprintf(out, "No resources found\n")
144+
}
145+
return nil
146+
}
147+
148+
func deleteResource(info *resource.Info, out io.Writer) error {
149+
if err := resource.NewHelper(info.Client, info.Mapping).Delete(info.Namespace, info.Name); err != nil {
150+
return err
112151
}
152+
fmt.Fprintf(out, "%s/%s\n", info.Mapping.Resource, info.Name)
113153
return nil
114154
}

pkg/kubectl/cmd/delete_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ func TestDeleteObjectByTuple(t *testing.T) {
5050

5151
cmd := NewCmdDelete(f, buf)
5252
cmd.Flags().Set("namespace", "test")
53+
cmd.Flags().Set("cascade", "false")
5354
cmd.Run(cmd, []string{"replicationcontrollers/redis-master-controller"})
5455

5556
if buf.String() != "replicationControllers/redis-master-controller\n" {
@@ -80,6 +81,7 @@ func TestDeleteNamedObject(t *testing.T) {
8081

8182
cmd := NewCmdDelete(f, buf)
8283
cmd.Flags().Set("namespace", "test")
84+
cmd.Flags().Set("cascade", "false")
8385
cmd.Run(cmd, []string{"replicationcontrollers", "redis-master-controller"})
8486

8587
if buf.String() != "replicationControllers/redis-master-controller\n" {
@@ -109,6 +111,7 @@ func TestDeleteObject(t *testing.T) {
109111

110112
cmd := NewCmdDelete(f, buf)
111113
cmd.Flags().Set("filename", "../../../examples/guestbook/redis-master-controller.json")
114+
cmd.Flags().Set("cascade", "false")
112115
cmd.Run(cmd, []string{})
113116

114117
// uses the name from the file, not the response
@@ -137,6 +140,7 @@ func TestDeleteObjectIgnoreNotFound(t *testing.T) {
137140

138141
cmd := NewCmdDelete(f, buf)
139142
cmd.Flags().Set("filename", "../../../examples/guestbook/redis-master-controller.json")
143+
cmd.Flags().Set("cascade", "false")
140144
cmd.Run(cmd, []string{})
141145

142146
if buf.String() != "" {
@@ -169,6 +173,7 @@ func TestDeleteMultipleObject(t *testing.T) {
169173
cmd := NewCmdDelete(f, buf)
170174
cmd.Flags().Set("filename", "../../../examples/guestbook/redis-master-controller.json")
171175
cmd.Flags().Set("filename", "../../../examples/guestbook/frontend-service.json")
176+
cmd.Flags().Set("cascade", "false")
172177
cmd.Run(cmd, []string{})
173178

174179
if buf.String() != "replicationcontrollers/redis-master\nservices/frontend\n" {
@@ -201,6 +206,7 @@ func TestDeleteMultipleObjectIgnoreMissing(t *testing.T) {
201206
cmd := NewCmdDelete(f, buf)
202207
cmd.Flags().Set("filename", "../../../examples/guestbook/redis-master-controller.json")
203208
cmd.Flags().Set("filename", "../../../examples/guestbook/frontend-service.json")
209+
cmd.Flags().Set("cascade", "false")
204210
cmd.Run(cmd, []string{})
205211

206212
if buf.String() != "services/frontend\n" {
@@ -232,6 +238,7 @@ func TestDeleteDirectory(t *testing.T) {
232238

233239
cmd := NewCmdDelete(f, buf)
234240
cmd.Flags().Set("filename", "../../../examples/guestbook")
241+
cmd.Flags().Set("cascade", "false")
235242
cmd.Run(cmd, []string{})
236243

237244
if buf.String() != "replicationcontrollers/frontend\nservices/frontend\nreplicationcontrollers/redis-master\nservices/redis-master\nreplicationcontrollers/redis-slave\nservices/redis-slave\n" {
@@ -273,6 +280,7 @@ func TestDeleteMultipleSelector(t *testing.T) {
273280

274281
cmd := NewCmdDelete(f, buf)
275282
cmd.Flags().Set("selector", "a=b")
283+
cmd.Flags().Set("cascade", "false")
276284
cmd.Run(cmd, []string{"pods,services"})
277285

278286
if buf.String() != "pods/foo\npods/bar\nservices/baz\n" {

pkg/kubectl/cmd/stop.go

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ limitations under the License.
1717
package cmd
1818

1919
import (
20-
"fmt"
2120
"io"
2221

2322
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl"
@@ -55,29 +54,7 @@ func NewCmdStop(f *cmdutil.Factory, out io.Writer) *cobra.Command {
5554
Long: stop_long,
5655
Example: stop_example,
5756
Run: func(cmd *cobra.Command, args []string) {
58-
cmdNamespace, err := f.DefaultNamespace()
59-
cmdutil.CheckErr(err)
60-
mapper, typer := f.Object()
61-
r := resource.NewBuilder(mapper, typer, f.ClientMapperForCommand()).
62-
ContinueOnError().
63-
NamespaceParam(cmdNamespace).RequireNamespace().
64-
ResourceTypeOrNameArgs(false, args...).
65-
FilenameParam(flags.Filenames...).
66-
SelectorParam(cmdutil.GetFlagString(cmd, "selector")).
67-
SelectAllParam(cmdutil.GetFlagBool(cmd, "all")).
68-
Flatten().
69-
Do()
70-
cmdutil.CheckErr(r.Err())
71-
72-
r.Visit(func(info *resource.Info) error {
73-
reaper, err := f.Reaper(info.Mapping)
74-
cmdutil.CheckErr(err)
75-
if _, err := reaper.Stop(info.Namespace, info.Name); err != nil {
76-
return err
77-
}
78-
fmt.Fprintf(out, "%s/%s\n", info.Mapping.Resource, info.Name)
79-
return nil
80-
})
57+
cmdutil.CheckErr(RunStop(f, cmd, args, flags.Filenames, out))
8158
},
8259
}
8360
usage := "Filename, directory, or URL to file of resource(s) to be stopped"
@@ -86,3 +63,24 @@ func NewCmdStop(f *cmdutil.Factory, out io.Writer) *cobra.Command {
8663
cmd.Flags().Bool("all", false, "[-all] to select all the specified resources")
8764
return cmd
8865
}
66+
67+
func RunStop(f *cmdutil.Factory, cmd *cobra.Command, args []string, filenames util.StringList, out io.Writer) error {
68+
cmdNamespace, err := f.DefaultNamespace()
69+
if err != nil {
70+
return err
71+
}
72+
mapper, typer := f.Object()
73+
r := resource.NewBuilder(mapper, typer, f.ClientMapperForCommand()).
74+
ContinueOnError().
75+
NamespaceParam(cmdNamespace).RequireNamespace().
76+
ResourceTypeOrNameArgs(false, args...).
77+
FilenameParam(filenames...).
78+
SelectorParam(cmdutil.GetFlagString(cmd, "selector")).
79+
SelectAllParam(cmdutil.GetFlagBool(cmd, "all")).
80+
Flatten().
81+
Do()
82+
if r.Err() != nil {
83+
return r.Err()
84+
}
85+
return ReapResult(r, f, out, false)
86+
}

0 commit comments

Comments
 (0)