@@ -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 ("stopenvironment : %w" ,err )
106
+ if err = egroup . Wait ( );err != nil {
107
+ return xerrors .Errorf ("some stopoperations failed : %w" ,err )
89
108
}
90
- flog .Success ("Successfully stopped environment %q" ,envName )
91
109
return nil
92
110
},
93
111
}