@@ -7,12 +7,13 @@ import (
7
7
"cdr.dev/coder-cli/coder-sdk"
8
8
"cdr.dev/coder-cli/internal/x/xtabwriter"
9
9
"github.com/spf13/cobra"
10
+ "golang.org/x/sync/errgroup"
10
11
"golang.org/x/xerrors"
11
12
12
13
"go.coder.com/flog"
13
14
)
14
15
15
- func makeEnvsCommand () * cobra.Command {
16
+ func envsCommand () * cobra.Command {
16
17
var outputFmt string
17
18
var user string
18
19
cmd := & cobra.Command {
@@ -68,26 +69,43 @@ func makeEnvsCommand() *cobra.Command {
68
69
69
70
func stopEnvCommand (user * string ) * cobra.Command {
70
71
return & cobra.Command {
71
- Use : "stop [environment_name]" ,
72
- Short : "stop a Coder environment by name" ,
73
- Long : "Stop a Coder environment by name" ,
74
- Args : cobra .ExactArgs (1 ),
72
+ Use : "stop [...environment_names]" ,
73
+ Short : "stop Coder environments by name" ,
74
+ Long : "Stop Coder environments by name" ,
75
+ Example : `coder envs stop front-end-env
76
+ coder envs stop front-end-env backend-env
77
+
78
+ # to stop all of your environments:
79
+ coder envs ls -o json | jq -c '.[].name' | xargs coder envs stop
80
+ ` ,
81
+ Args : cobra .MinimumNArgs (1 ),
75
82
RunE : func (cmd * cobra.Command , args []string ) error {
76
83
client , err := newClient ()
77
84
if err != nil {
78
85
return xerrors .Errorf ("new client: %w" , err )
79
86
}
80
87
81
- envName := args [0 ]
82
- env , err := findEnv (cmd .Context (), client , envName , * user )
83
- if err != nil {
84
- return xerrors .Errorf ("find environment by name: %w" , err )
88
+ var egroup errgroup.Group
89
+ for _ , envName := range args {
90
+ envName := envName
91
+ egroup .Go (func () error {
92
+ env , err := findEnv (cmd .Context (), client , envName , * user )
93
+ if err != nil {
94
+ return xerrors .Errorf ("find environment by name: %w" , err )
95
+ }
96
+
97
+ if err = client .StopEnvironment (cmd .Context (), env .ID ); err != nil {
98
+ flog .Error ("failed to stop environment \" %s\" : %v" , env .Name , err )
99
+ return xerrors .Errorf ("stop environment: %w" , err )
100
+ }
101
+ flog .Success ("Successfully stopped environment %q" , envName )
102
+ return nil
103
+ })
85
104
}
86
105
87
- if err = client . StopEnvironment ( cmd . Context (), env . ID ); err != nil {
88
- return xerrors .Errorf ("stop environment : %w" , err )
106
+ if err = egroup . Wait ( ); err != nil {
107
+ return xerrors .Errorf ("some stop operations failed : %w" , err )
89
108
}
90
- flog .Success ("Successfully stopped environment %q" , envName )
91
109
return nil
92
110
},
93
111
}
0 commit comments