Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Aug 30, 2024. It is now read-only.
/coder-v1-cliPublic archive

Commit17b16f9

Browse files
committed
Add --user flag to "secrets" and "envs"
1 parent56a76c4 commit17b16f9

File tree

14 files changed

+138
-94
lines changed

14 files changed

+138
-94
lines changed

‎cmd/coder/auth.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ import (
1111
)
1212

1313
// requireAuth exits the process with a nonzero exit code if the user is not authenticated to make requests
14-
funcrequireAuth()*entclient.Client {
15-
client,err:=newClient()
14+
funcrequireAuth(userstring)*entclient.Client {
15+
client,err:=newClient(user)
1616
iferr!=nil {
1717
flog.Fatal("%v",err)
1818
}
1919
returnclient
2020
}
2121

22-
funcnewClient() (*entclient.Client,error) {
22+
funcnewClient(userFlagstring) (*entclient.Client,error) {
2323
sessionToken,err:=config.Session.Read()
2424
iferr!=nil {
2525
returnnil,xerrors.Errorf("read session: %v (did you run coder login?)",err)
@@ -35,8 +35,19 @@ func newClient() (*entclient.Client, error) {
3535
returnnil,xerrors.Errorf("url misformatted: %v (try runing coder login)",err)
3636
}
3737

38-
return&entclient.Client{
38+
client:=&entclient.Client{
3939
BaseURL:u,
4040
Token:sessionToken,
41-
},nil
41+
UserID:entclient.Me,
42+
}
43+
44+
user,err:=client.UserByEmail(userFlag)
45+
iferr!=nil {
46+
returnnil,xerrors.Errorf("failed to find user (%v) by email: %v",userFlag,err)
47+
}
48+
49+
// perform all additional actions as this user
50+
client.UserID=user.ID
51+
52+
returnclient,nil
4253
}

‎cmd/coder/ceapi.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ outer:
2828

2929
// getEnvs returns all environments for the user.
3030
funcgetEnvs(client*entclient.Client) ([]entclient.Environment,error) {
31-
me,err:=client.Me()
31+
user,err:=client.TargetUser()
3232
iferr!=nil {
3333
returnnil,xerrors.Errorf("get self: %+v",err)
3434
}
@@ -38,12 +38,12 @@ func getEnvs(client *entclient.Client) ([]entclient.Environment, error) {
3838
returnnil,xerrors.Errorf("get orgs: %+v",err)
3939
}
4040

41-
orgs=userOrgs(me,orgs)
41+
orgs=userOrgs(user,orgs)
4242

4343
varallEnvs []entclient.Environment
4444

4545
for_,org:=rangeorgs {
46-
envs,err:=client.Envs(me,org)
46+
envs,err:=client.Envs(user,org)
4747
iferr!=nil {
4848
returnnil,xerrors.Errorf("get envs for %v: %+v",org.Name,err)
4949
}

‎cmd/coder/configssh.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,14 @@ func configSSH(filepath *string, remove *bool) func(cmd *cobra.Command, _ []stri
7676
returnnil
7777
}
7878

79-
entClient:=requireAuth()
79+
entClient:=requireAuth(entclient.Me)
8080

8181
sshAvailable:=isSSHAvailable(ctx)
8282
if!sshAvailable {
8383
returnxerrors.New("SSH is disabled or not available for your Coder Enterprise deployment.")
8484
}
8585

86-
me,err:=entClient.Me()
86+
user,err:=entClient.TargetUser()
8787
iferr!=nil {
8888
returnxerrors.Errorf("fetch username: %w",err)
8989
}
@@ -95,7 +95,7 @@ func configSSH(filepath *string, remove *bool) func(cmd *cobra.Command, _ []stri
9595
iflen(envs)<1 {
9696
returnxerrors.New("no environments found")
9797
}
98-
newConfig,err:=makeNewConfigs(me.Username,envs,startToken,startMessage,endToken)
98+
newConfig,err:=makeNewConfigs(user.Username,envs,startToken,startMessage,endToken)
9999
iferr!=nil {
100100
returnxerrors.Errorf("make new ssh configurations: %w",err)
101101
}

‎cmd/coder/envs.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,28 @@ import (
44
"encoding/json"
55
"os"
66

7+
"cdr.dev/coder-cli/internal/entclient"
78
"cdr.dev/coder-cli/internal/x/xtabwriter"
89
"github.com/spf13/cobra"
910
"golang.org/x/xerrors"
1011
)
1112

1213
funcmakeEnvsCommand()*cobra.Command {
1314
varoutputFmtstring
15+
varuserstring
1416
cmd:=&cobra.Command{
1517
Use:"envs",
1618
Short:"Interact with Coder environments",
1719
Long:"Perform operations on the Coder environments owned by the active user.",
1820
}
21+
cmd.PersistentFlags().StringVar(&user,"user",entclient.Me,"Specify the user whose resources to target")
1922

2023
lsCmd:=&cobra.Command{
2124
Use:"ls",
2225
Short:"list all environments owned by the active user",
2326
Long:"List all Coder environments owned by the active user.",
2427
RunE:func(cmd*cobra.Command,args []string)error {
25-
entClient:=requireAuth()
28+
entClient:=requireAuth(user)
2629
envs,err:=getEnvs(entClient)
2730
iferr!=nil {
2831
returnerr

‎cmd/coder/secrets.go

Lines changed: 67 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -15,37 +15,39 @@ import (
1515
)
1616

1717
funcmakeSecretsCmd()*cobra.Command {
18+
varuserstring
1819
cmd:=&cobra.Command{
1920
Use:"secrets",
2021
Short:"Interact with Coder Secrets",
2122
Long:"Interact with secrets objects owned by the active user.",
2223
}
24+
cmd.PersistentFlags().StringVar(&user,"user",entclient.Me,"Specify the user whose resources to target")
2325
cmd.AddCommand(
2426
&cobra.Command{
2527
Use:"ls",
2628
Short:"List all secrets owned by the active user",
27-
RunE:listSecrets,
29+
RunE:listSecrets(&user),
2830
},
29-
makeCreateSecret(),
31+
makeCreateSecret(&user),
3032
&cobra.Command{
3133
Use:"rm [...secret_name]",
3234
Short:"Remove one or more secrets by name",
3335
Args:cobra.MinimumNArgs(1),
34-
RunE:removeSecrets,
36+
RunE:makeRemoveSecrets(&user),
3537
Example:"coder secrets rm mysql-password mysql-user",
3638
},
3739
&cobra.Command{
3840
Use:"view [secret_name]",
3941
Short:"View a secret by name",
4042
Args:cobra.ExactArgs(1),
41-
RunE:viewSecret,
43+
RunE:makeViewSecret(&user),
4244
Example:"coder secrets view mysql-password",
4345
},
4446
)
4547
returncmd
4648
}
4749

48-
funcmakeCreateSecret()*cobra.Command {
50+
funcmakeCreateSecret(user*string)*cobra.Command {
4951
var (
5052
fromFilestring
5153
fromLiteralstring
@@ -77,7 +79,7 @@ coder secrets create aws-credentials --from-file ./credentials.json`,
7779
},
7880
RunE:func(cmd*cobra.Command,args []string)error {
7981
var (
80-
client=requireAuth()
82+
client=requireAuth(*user)
8183
name=args[0]
8284
valuestring
8385
errerror
@@ -127,71 +129,77 @@ coder secrets create aws-credentials --from-file ./credentials.json`,
127129
returncmd
128130
}
129131

130-
funclistSecrets(cmd*cobra.Command,_ []string)error {
131-
client:=requireAuth()
132+
funclistSecrets(user*string)func(cmd*cobra.Command,_ []string)error {
133+
returnfunc(cmd*cobra.Command,_ []string)error {
134+
client:=requireAuth(*user)
132135

133-
secrets,err:=client.Secrets()
134-
iferr!=nil {
135-
returnxerrors.Errorf("get secrets: %w",err)
136-
}
136+
secrets,err:=client.Secrets()
137+
iferr!=nil {
138+
returnxerrors.Errorf("get secrets: %w",err)
139+
}
137140

138-
iflen(secrets)<1 {
139-
flog.Info("No secrets found")
140-
returnnil
141-
}
141+
iflen(secrets)<1 {
142+
flog.Info("No secrets found")
143+
returnnil
144+
}
142145

143-
err=xtabwriter.WriteTable(len(secrets),func(iint)interface{} {
144-
s:=secrets[i]
145-
s.Value="******"// value is omitted from bulk responses
146-
returns
147-
})
148-
iferr!=nil {
149-
returnxerrors.Errorf("write table of secrets: %w",err)
146+
err=xtabwriter.WriteTable(len(secrets),func(iint)interface{} {
147+
s:=secrets[i]
148+
s.Value="******"// value is omitted from bulk responses
149+
returns
150+
})
151+
iferr!=nil {
152+
returnxerrors.Errorf("write table of secrets: %w",err)
153+
}
154+
returnnil
150155
}
151-
returnnil
152156
}
153157

154-
funcviewSecret(_*cobra.Command,args []string)error {
155-
var (
156-
client=requireAuth()
157-
name=args[0]
158-
)
159-
ifname=="" {
160-
returnxerrors.New("[name] is a required argument")
161-
}
158+
funcmakeViewSecret(user*string)func(cmd*cobra.Command,args []string)error {
159+
returnfunc(_*cobra.Command,args []string)error {
160+
var (
161+
client=requireAuth(*user)
162+
name=args[0]
163+
)
164+
ifname=="" {
165+
returnxerrors.New("[name] is a required argument")
166+
}
162167

163-
secret,err:=client.SecretByName(name)
164-
iferr!=nil {
165-
returnxerrors.Errorf("get secret by name: %w",err)
166-
}
168+
secret,err:=client.SecretByName(name)
169+
iferr!=nil {
170+
returnxerrors.Errorf("get secret by name: %w",err)
171+
}
167172

168-
_,err=fmt.Fprintln(os.Stdout,secret.Value)
169-
iferr!=nil {
170-
returnxerrors.Errorf("write secret value: %w",err)
173+
_,err=fmt.Fprintln(os.Stdout,secret.Value)
174+
iferr!=nil {
175+
returnxerrors.Errorf("write secret value: %w",err)
176+
}
177+
returnnil
171178
}
172-
returnnil
173179
}
174180

175-
funcremoveSecrets(_*cobra.Command,args []string)error {
176-
var (
177-
client=requireAuth()
178-
)
179-
iflen(args)<1 {
180-
returnxerrors.New("[...secret_name] is a required argument")
181-
}
181+
funcmakeRemoveSecrets(user*string)func(c*cobra.Command,args []string)error {
182+
returnfunc(_*cobra.Command,args []string)error {
183+
var (
184+
client=requireAuth(*user)
185+
)
186+
iflen(args)<1 {
187+
returnxerrors.New("[...secret_name] is a required argument")
188+
}
182189

183-
errorSeen:=false
184-
for_,n:=rangeargs {
185-
err:=client.DeleteSecretByName(n)
186-
iferr!=nil {
187-
flog.Error("failed to delete secret %q: %v",n,err)
188-
errorSeen=true
189-
}else {
190-
flog.Success("successfully deleted secret %q",n)
190+
errorSeen:=false
191+
for_,n:=rangeargs {
192+
err:=client.DeleteSecretByName(n)
193+
iferr!=nil {
194+
flog.Error("failed to delete secret %q: %v",n,err)
195+
errorSeen=true
196+
}else {
197+
flog.Success("successfully deleted secret %q",n)
198+
}
191199
}
200+
iferrorSeen {
201+
os.Exit(1)
202+
}
203+
returnnil
192204
}
193-
iferrorSeen {
194-
os.Exit(1)
195-
}
196-
returnnil
197205
}

‎cmd/coder/shell.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"time"
99

1010
"cdr.dev/coder-cli/internal/activity"
11+
"cdr.dev/coder-cli/internal/entclient"
1112
"cdr.dev/coder-cli/internal/x/xterminal"
1213
"cdr.dev/wsep"
1314
"github.com/spf13/cobra"
@@ -19,12 +20,12 @@ import (
1920
"go.coder.com/flog"
2021
)
2122

22-
funcgetEnvsForCompletion() []string {
23+
funcgetEnvsForCompletion(userstring) []string {
2324
// TODO(@cmoog): Enable this if speed issue can be resolved. Otherwise, all commands will take > 1 second.
2425
returnnil
2526

2627
varenvNames []string
27-
client,err:=newClient()
28+
client,err:=newClient(user)
2829
iferr!=nil {
2930
returnenvNames
3031
}
@@ -45,7 +46,7 @@ func makeShellCmd() *cobra.Command {
4546
Long:"Execute a remote command on the environment\\nIf no command is specified, the default shell is opened.",
4647
Args:cobra.MinimumNArgs(1),
4748
DisableFlagParsing:true,
48-
ValidArgs:getEnvsForCompletion(),
49+
ValidArgs:getEnvsForCompletion(entclient.Me),
4950
RunE:shell,
5051
Example:"coder sh backend-env",
5152
}
@@ -97,7 +98,7 @@ func sendResizeEvents(ctx context.Context, termfd uintptr, process wsep.Process)
9798

9899
funcrunCommand(ctx context.Context,envNamestring,commandstring,args []string)error {
99100
var (
100-
entClient=requireAuth()
101+
entClient=requireAuth(entclient.Me)
101102
)
102103
env,err:=findEnv(entClient,envName)
103104
iferr!=nil {

‎cmd/coder/sync.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"path/filepath"
99
"strings"
1010

11+
"cdr.dev/coder-cli/internal/entclient"
1112
"cdr.dev/coder-cli/internal/sync"
1213
"github.com/spf13/cobra"
1314
"golang.org/x/xerrors"
@@ -51,7 +52,7 @@ func makeRunSync(init *bool) func(cmd *cobra.Command, args []string) error {
5152
remote=args[1]
5253
)
5354

54-
entClient:=requireAuth()
55+
entClient:=requireAuth(entclient.Me)
5556

5657
info,err:=os.Stat(local)
5758
iferr!=nil {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp