Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make delete actually stop resources by default. #7210

Merged
merged 1 commit into from
Apr 28, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions contrib/completions/bash/kubectl
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,7 @@ _kubectl_delete()
flags_completion=()

flags+=("--all")
flags+=("--cascade")
flags+=("--filename=")
flags_with_completion+=("--filename")
flags_completion+=("_filedir '@(json|yaml|yml)'")
Expand Down
2 changes: 1 addition & 1 deletion docs/kubectl.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,4 +66,4 @@ kubectl
* [kubectl update](kubectl_update.md) - Update a resource by filename or stdin.
* [kubectl version](kubectl_version.md) - Print the client and server version information.

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.529528989 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.18016485 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_api-versions.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,4 @@ kubectl api-versions
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.529124749 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.179420324 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_cluster-info.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,4 @@ kubectl cluster-info
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.528967691 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.179075262 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_config.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,4 @@ kubectl config SUBCOMMAND
* [kubectl config use-context](kubectl_config_use-context.md) - Sets the current-context in a kubeconfig file
* [kubectl config view](kubectl_config_view.md) - displays Merged kubeconfig settings or a specified kubeconfig file.

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.528802509 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.178743093 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_config_set-cluster.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,4 @@ $ kubectl config set-cluster e2e --insecure-skip-tls-verify=true
### SEE ALSO
* [kubectl config](kubectl_config.md) - config modifies kubeconfig files

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.527769365 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.176632377 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_config_set-context.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,4 @@ $ kubectl config set-context gce --user=cluster-admin
### SEE ALSO
* [kubectl config](kubectl_config.md) - config modifies kubeconfig files

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.528131768 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.177351504 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_config_set-credentials.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,4 @@ $ kubectl set-credentials cluster-admin --client-certificate=~/.kube/admin.crt -
### SEE ALSO
* [kubectl config](kubectl_config.md) - config modifies kubeconfig files

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.527942873 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.176997115 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_config_set.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,4 @@ kubectl config set PROPERTY_NAME PROPERTY_VALUE
### SEE ALSO
* [kubectl config](kubectl_config.md) - config modifies kubeconfig files

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.528303344 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.177697607 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_config_unset.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,4 @@ kubectl config unset PROPERTY_NAME
### SEE ALSO
* [kubectl config](kubectl_config.md) - config modifies kubeconfig files

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.528464868 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.178014311 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_config_use-context.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,4 @@ kubectl config use-context CONTEXT_NAME
### SEE ALSO
* [kubectl config](kubectl_config.md) - config modifies kubeconfig files

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.528626589 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.178387488 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_config_view.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,4 @@ $ kubectl config view -o template --template='{{range .users}}{{ if eq .name "e2
### SEE ALSO
* [kubectl config](kubectl_config.md) - config modifies kubeconfig files

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.527582988 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.176300117 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_create.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,4 @@ $ cat pod.json | kubectl create -f -
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.52422236 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.169347287 +0000 UTC
3 changes: 2 additions & 1 deletion docs/kubectl_delete.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ $ kubectl delete pods --all

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

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.524590507 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.170113984 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_describe.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,4 @@ $ kubectl describe pods/nginx
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.524047164 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.168905946 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_exec.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,4 @@ $ kubectl exec -p 123456-7890 -c ruby-container -i -t -- bash -il
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.52551618 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.173193785 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_expose.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,4 @@ $ kubectl expose streamer --port=4100 --protocol=udp --service-name=video-stream
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.527149074 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.175492324 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_get.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,4 +85,4 @@ $ kubectl get rc/web service/frontend pods/web-pod-13je7
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.523839103 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.168465048 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_label.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,4 @@ $ kubectl label pods foo bar-
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.527386643 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.175924183 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_log.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,4 @@ $ kubectl log -f 123456-7890 ruby-container
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.524938744 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.170843937 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_namespace.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,4 @@ kubectl namespace [namespace]
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.524751287 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.170473143 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_port-forward.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,4 @@ $ kubectl port-forward -p mypod 0:5000
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.525691097 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.173592919 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_proxy.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,4 @@ $ kubectl proxy --api-prefix=k8s-api
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.525864716 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.173961813 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_resize.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,4 @@ $ kubectl resize --current-replicas=2 --replicas=3 replicationcontrollers foo
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.52532658 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.171613369 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_rolling-update.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,4 +83,4 @@ $ kubectl rolling-update frontend --image=image:v2
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:44:36.84341428 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 21:28:37.951011185 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_run-container.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,4 @@ $ kubectl run-container nginx --image=nginx --overrides='{ "apiVersion": "v1beta
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.526080215 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.174507457 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_stop.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,4 @@ $ kubectl stop -f path/to/resources
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.526923863 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.174999749 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_update.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,4 @@ $ kubectl update pods my-pod --patch='{ "apiVersion": "v1beta1", "desiredState":
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.52440746 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.16972972 +0000 UTC
2 changes: 1 addition & 1 deletion docs/kubectl_version.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,4 @@ kubectl version
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-04-27 22:01:46.529297188 +0000 UTC
###### Auto generated by spf13/cobra at 2015-04-28 03:34:57.179736961 +0000 UTC
4 changes: 4 additions & 0 deletions docs/man/man1/kubectl-delete.1
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ will be lost along with the rest of the resource.
\fB\-\-all\fP=false
[\-all] to select all the specified resources

.PP
\fB\-\-cascade\fP=true
If true, cascade the delete resources managed by this resource (e.g. Pods created by a ReplicationController). Default true.

.PP
\fB\-f\fP, \fB\-\-filename\fP=[]
Filename, directory, or URL to a file containing the resource to delete
Expand Down
48 changes: 44 additions & 4 deletions pkg/kubectl/cmd/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ func NewCmdDelete(f *cmdutil.Factory, out io.Writer) *cobra.Command {
kubectl.AddJsonFilenameFlag(cmd, &filenames, usage)
cmd.Flags().StringP("selector", "l", "", "Selector (label query) to filter on")
cmd.Flags().Bool("all", false, "[-all] to select all the specified resources")
cmd.Flags().Bool("cascade", true, "If true, cascade the delete resources managed by this resource (e.g. Pods created by a ReplicationController). Default true.")
return cmd
}

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

// By default use a reaper to delete all related resources.
if cmdutil.GetFlagBool(cmd, "cascade") {
return ReapResult(r, f, out, cmdutil.GetFlagBool(cmd, "cascade"))
}
return DeleteResult(r, out)
}

func ReapResult(r *resource.Result, f *cmdutil.Factory, out io.Writer, isDefaultDelete bool) error {
found := 0
err = r.IgnoreErrors(errors.IsNotFound).Visit(func(r *resource.Info) error {
err := r.IgnoreErrors(errors.IsNotFound).Visit(func(info *resource.Info) error {
found++
if err := resource.NewHelper(r.Client, r.Mapping).Delete(r.Namespace, r.Name); err != nil {
reaper, err := f.Reaper(info.Mapping)
if err != nil {
// If the error is "not found" and the user didn't explicitly ask for stop.
if kubectl.IsNoSuchReaperError(err) && isDefaultDelete {
return deleteResource(info, out)
}
return err
}
fmt.Fprintf(out, "%s/%s\n", r.Mapping.Resource, r.Name)
if _, err := reaper.Stop(info.Namespace, info.Name); err != nil {
return err
}
fmt.Fprintf(out, "%s/%s\n", info.Mapping.Resource, info.Name)
return nil
})
if err != nil {
return err
}
if found == 0 {
fmt.Fprintf(cmd.Out(), "No resources found\n")
fmt.Fprintf(out, "No resources found\n")
}
return nil
}

func DeleteResult(r *resource.Result, out io.Writer) error {
found := 0
err := r.IgnoreErrors(errors.IsNotFound).Visit(func(info *resource.Info) error {
found++
return deleteResource(info, out)
})
if err != nil {
return err
}
if found == 0 {
fmt.Fprintf(out, "No resources found\n")
}
return nil
}

func deleteResource(info *resource.Info, out io.Writer) error {
if err := resource.NewHelper(info.Client, info.Mapping).Delete(info.Namespace, info.Name); err != nil {
return err
}
fmt.Fprintf(out, "%s/%s\n", info.Mapping.Resource, info.Name)
return nil
}
8 changes: 8 additions & 0 deletions pkg/kubectl/cmd/delete_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ func TestDeleteObjectByTuple(t *testing.T) {

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

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

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

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

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

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

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

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

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

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

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

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

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

if buf.String() != "pods/foo\npods/bar\nservices/baz\n" {
Expand Down
46 changes: 22 additions & 24 deletions pkg/kubectl/cmd/stop.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ limitations under the License.
package cmd

import (
"fmt"
"io"

"github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl"
Expand Down Expand Up @@ -55,29 +54,7 @@ func NewCmdStop(f *cmdutil.Factory, out io.Writer) *cobra.Command {
Long: stop_long,
Example: stop_example,
Run: func(cmd *cobra.Command, args []string) {
cmdNamespace, err := f.DefaultNamespace()
cmdutil.CheckErr(err)
mapper, typer := f.Object()
r := resource.NewBuilder(mapper, typer, f.ClientMapperForCommand()).
ContinueOnError().
NamespaceParam(cmdNamespace).RequireNamespace().
ResourceTypeOrNameArgs(false, args...).
FilenameParam(flags.Filenames...).
SelectorParam(cmdutil.GetFlagString(cmd, "selector")).
SelectAllParam(cmdutil.GetFlagBool(cmd, "all")).
Flatten().
Do()
cmdutil.CheckErr(r.Err())

r.Visit(func(info *resource.Info) error {
reaper, err := f.Reaper(info.Mapping)
cmdutil.CheckErr(err)
if _, err := reaper.Stop(info.Namespace, info.Name); err != nil {
return err
}
fmt.Fprintf(out, "%s/%s\n", info.Mapping.Resource, info.Name)
return nil
})
cmdutil.CheckErr(RunStop(f, cmd, args, flags.Filenames, out))
},
}
usage := "Filename, directory, or URL to file of resource(s) to be stopped"
Expand All @@ -86,3 +63,24 @@ func NewCmdStop(f *cmdutil.Factory, out io.Writer) *cobra.Command {
cmd.Flags().Bool("all", false, "[-all] to select all the specified resources")
return cmd
}

func RunStop(f *cmdutil.Factory, cmd *cobra.Command, args []string, filenames util.StringList, out io.Writer) error {
cmdNamespace, err := f.DefaultNamespace()
if err != nil {
return err
}
mapper, typer := f.Object()
r := resource.NewBuilder(mapper, typer, f.ClientMapperForCommand()).
ContinueOnError().
NamespaceParam(cmdNamespace).RequireNamespace().
ResourceTypeOrNameArgs(false, args...).
FilenameParam(filenames...).
SelectorParam(cmdutil.GetFlagString(cmd, "selector")).
SelectAllParam(cmdutil.GetFlagBool(cmd, "all")).
Flatten().
Do()
if r.Err() != nil {
return r.Err()
}
return ReapResult(r, f, out, false)
}