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

Commit4ecb68f

Browse files
committed
Add commands for workspace providers
1 parent82f5615 commit4ecb68f

File tree

6 files changed

+242
-98
lines changed

6 files changed

+242
-98
lines changed

‎coder-sdk/resourcepools.go

Lines changed: 0 additions & 65 deletions
This file was deleted.

‎coder-sdk/workspace_providers.go

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package coder
2+
3+
import (
4+
"context"
5+
"net/http"
6+
)
7+
8+
// WorkspaceProvider defines an entity capable of deploying and acting as an ingress for Coder environments.
9+
typeWorkspaceProviderstruct {
10+
IDstring`json:"id"`
11+
Namestring`json:"name"`
12+
StatusWorkspaceProviderStatus`json:"status"`
13+
Localbool`json:"local"`
14+
ClusterAddressstring`json:"cluster_address"`
15+
DefaultNamespacestring`json:"default_namespace"`
16+
StorageClassstring`json:"storage_class"`
17+
ClusterDomainSuffixstring`json:"cluster_domain_suffix"`
18+
EnvproxyAccessURLstring`json:"envproxy_access_url" validate:"required"`
19+
DevurlHoststring`json:"devurl_host"`
20+
SSHEnabledbool`json:"ssh_enabled"`
21+
NamespaceWhitelist []string`json:"namespace_whitelist"`
22+
OrgWhitelist []string`json:"org_whitelist"`
23+
}
24+
25+
// WorkspaceProviderStatus represents the configuration state of a workspace provider.
26+
typeWorkspaceProviderStatusstring
27+
28+
// Workspace Provider statuses.
29+
const (
30+
WorkspaceProviderPendingWorkspaceProviderStatus="pending"
31+
WorkspaceProviderReadyWorkspaceProviderStatus="ready"
32+
)
33+
34+
// WorkspaceProviderByID fetches a workspace provider entity by its unique ID.
35+
func (c*Client)WorkspaceProviderByID(ctx context.Context,idstring) (*WorkspaceProvider,error) {
36+
varwpWorkspaceProvider
37+
err:=c.requestBody(ctx,http.MethodGet,"/api/private/resource-pools/"+id,nil,&wp)
38+
iferr!=nil {
39+
returnnil,err
40+
}
41+
return&wp,nil
42+
}
43+
44+
// WorkspaceProviders fetches all workspace providers known to the Coder control plane.
45+
func (c*Client)WorkspaceProviders(ctx context.Context) ([]WorkspaceProvider,error) {
46+
varproviders []WorkspaceProvider
47+
err:=c.requestBody(ctx,http.MethodGet,"/api/private/resource-pools",nil,&providers)
48+
iferr!=nil {
49+
returnnil,err
50+
}
51+
returnproviders,nil
52+
}
53+
54+
// CreateWorkspaceProviderReq defines the request parameters for creating a new workspace provider entity.
55+
typeCreateWorkspaceProviderReqstruct {
56+
Namestring`json:"name"`
57+
}
58+
59+
// CreateWorkspaceProviderRes defines the response from creating a new workspace provider entity.
60+
typeCreateWorkspaceProviderResstruct {
61+
IDstring`json:"id"`
62+
Namestring`json:"name"`
63+
StatusWorkspaceProviderStatus`json:"status"`
64+
EnvproxyTokenstring`json:"envproxy_token"`
65+
}
66+
67+
// CreateWorkspaceProvider creates a new WorkspaceProvider entity.
68+
func (c*Client)CreateWorkspaceProvider(ctx context.Context,reqCreateWorkspaceProviderReq) (*CreateWorkspaceProviderRes,error) {
69+
varresCreateWorkspaceProviderRes
70+
err:=c.requestBody(ctx,http.MethodPost,"/api/private/resource-pools",req,&res)
71+
iferr!=nil {
72+
returnnil,err
73+
}
74+
return&res,nil
75+
}
76+
77+
// DeleteWorkspaceProviderByID deletes a workspace provider entity from the Coder control plane.
78+
func (c*Client)DeleteWorkspaceProviderByID(ctx context.Context,idstring)error {
79+
returnc.requestBody(ctx,http.MethodDelete,"/api/private/resource-pools/"+id,nil,nil)
80+
}

‎internal/cmd/cmd.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ func Make() *cobra.Command {
3737
resourceCmd(),
3838
completionCmd(),
3939
imgsCmd(),
40+
providersCmd(),
4041
genDocsCmd(app),
4142
)
4243
app.PersistentFlags().BoolVarP(&verbose,"verbose","v",false,"show verbose output")

‎internal/cmd/configssh.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -104,16 +104,16 @@ func configSSH(configpath *string, remove *bool) func(cmd *cobra.Command, _ []st
104104
returnxerrors.New("no environments found")
105105
}
106106

107-
envsWithPools,err:=coderutil.EnvsWithPool(ctx,client,envs)
107+
envsWithProviders,err:=coderutil.EnvsWithProvider(ctx,client,envs)
108108
iferr!=nil {
109-
returnxerrors.Errorf("resolve envpools: %w",err)
109+
returnxerrors.Errorf("resolve envworkspace providers: %w",err)
110110
}
111111

112-
if!sshAvailable(envsWithPools) {
112+
if!sshAvailable(envsWithProviders) {
113113
returnxerrors.New("SSH is disabled or not available for any environments in your Coder Enterprise deployment.")
114114
}
115115

116-
newConfig:=makeNewConfigs(user.Username,envsWithPools,privateKeyFilepath)
116+
newConfig:=makeNewConfigs(user.Username,envsWithProviders,privateKeyFilepath)
117117

118118
err=os.MkdirAll(filepath.Dir(*configpath),os.ModePerm)
119119
iferr!=nil {
@@ -157,9 +157,9 @@ func removeOldConfig(config string) (string, bool) {
157157
}
158158

159159
// sshAvailable returns true if SSH is available for at least one environment.
160-
funcsshAvailable(envs []coderutil.EnvWithPool)bool {
160+
funcsshAvailable(envs []coderutil.EnvWithWorkspaceProvider)bool {
161161
for_,env:=rangeenvs {
162-
ifenv.Pool.SSHEnabled {
162+
ifenv.WorkspaceProvider.SSHEnabled {
163163
returntrue
164164
}
165165
}
@@ -174,19 +174,19 @@ func writeSSHKey(ctx context.Context, client *coder.Client, privateKeyPath strin
174174
returnioutil.WriteFile(privateKeyPath, []byte(key.PrivateKey),0600)
175175
}
176176

177-
funcmakeNewConfigs(userNamestring,envs []coderutil.EnvWithPool,privateKeyFilepathstring)string {
177+
funcmakeNewConfigs(userNamestring,envs []coderutil.EnvWithWorkspaceProvider,privateKeyFilepathstring)string {
178178
newConfig:=fmt.Sprintf("\n%s\n%s\n\n",sshStartToken,sshStartMessage)
179179
for_,env:=rangeenvs {
180-
if!env.Pool.SSHEnabled {
181-
clog.LogWarn(fmt.Sprintf("SSH is not enabled forpool%q",env.Pool.Name),
180+
if!env.WorkspaceProvider.SSHEnabled {
181+
clog.LogWarn(fmt.Sprintf("SSH is not enabled forworkspace provider%q",env.WorkspaceProvider.Name),
182182
clog.BlankLine,
183-
clog.Tipf("ask an infrastructure administrator to enable SSH for thisresource pool"),
183+
clog.Tipf("ask an infrastructure administrator to enable SSH for thisworkspace provider"),
184184
)
185185
continue
186186
}
187-
u,err:=url.Parse(env.Pool.AccessURL)
187+
u,err:=url.Parse(env.WorkspaceProvider.EnvproxyAccessURL)
188188
iferr!=nil {
189-
clog.LogWarn("invalid access url",clog.Causef("malformed url: %q",env.Pool.AccessURL))
189+
clog.LogWarn("invalid access url",clog.Causef("malformed url: %q",env.WorkspaceProvider.EnvproxyAccessURL))
190190
continue
191191
}
192192
newConfig+=makeSSHConfig(u.Host,userName,env.Env.Name,privateKeyFilepath)

‎internal/cmd/providers.go

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package cmd
2+
3+
import (
4+
"cdr.dev/coder-cli/coder-sdk"
5+
"cdr.dev/coder-cli/internal/x/xcobra"
6+
"cdr.dev/coder-cli/pkg/clog"
7+
"cdr.dev/coder-cli/pkg/tablewriter"
8+
"fmt"
9+
"github.com/spf13/cobra"
10+
"golang.org/x/xerrors"
11+
)
12+
13+
funcprovidersCmd()*cobra.Command {
14+
cmd:=&cobra.Command{
15+
Use:"providers",
16+
Short:"Interact with Coder workspace providers",
17+
Long:"Perform operations on the Coder Workspace Providers for the platform.",
18+
}
19+
20+
cmd.AddCommand(
21+
createProviderCmd(),
22+
listProviderCmd(),
23+
deleteProviderCmd(),
24+
)
25+
returncmd
26+
}
27+
28+
funccreateProviderCmd()*cobra.Command {
29+
cmd:=&cobra.Command{
30+
Use:"create [workspace_provider_name]",
31+
Short:"create a new workspace provider.",
32+
Args:xcobra.ExactArgs(1),
33+
Long:"Create a new Coder workspace provider.",
34+
Example:`# create a new workspace provider in a pending state
35+
coder providers create my-new-workspace-provider`,
36+
RunE:func(cmd*cobra.Command,args []string)error {
37+
ctx:=cmd.Context()
38+
39+
client,err:=newClient(ctx)
40+
iferr!=nil {
41+
returnerr
42+
}
43+
44+
// ExactArgs(1) ensures our name value can't panic on an out of bounds.
45+
createReq:=&coder.CreateWorkspaceProviderReq{
46+
Name:args[0],
47+
}
48+
49+
wp,err:=client.CreateWorkspaceProvider(ctx,*createReq)
50+
iferr!=nil {
51+
returnxerrors.Errorf("create workspace provider: %w",err)
52+
}
53+
54+
err=tablewriter.WriteTable(1,func(iint)interface{} {
55+
returnwp
56+
})
57+
iferr!=nil {
58+
returnxerrors.Errorf("write table: %w",err)
59+
}
60+
returnnil
61+
},
62+
}
63+
returncmd
64+
}
65+
66+
funclistProviderCmd()*cobra.Command {
67+
cmd:=&cobra.Command{
68+
Use:"ls",
69+
Short:"list workspace providers.",
70+
Long:"List all Coder workspace providers.",
71+
Example:`# list workspace providers
72+
coder providers ls`,
73+
RunE:func(cmd*cobra.Command,args []string)error {
74+
ctx:=cmd.Context()
75+
76+
client,err:=newClient(ctx)
77+
iferr!=nil {
78+
returnerr
79+
}
80+
81+
wps,err:=client.WorkspaceProviders(ctx)
82+
iferr!=nil {
83+
returnxerrors.Errorf("list workspace providers: %w",err)
84+
}
85+
86+
err=tablewriter.WriteTable(len(wps),func(iint)interface{} {
87+
returnwps[i]
88+
})
89+
iferr!=nil {
90+
returnxerrors.Errorf("write table: %w",err)
91+
}
92+
returnnil
93+
},
94+
}
95+
returncmd
96+
}
97+
98+
funcdeleteProviderCmd()*cobra.Command {
99+
cmd:=&cobra.Command{
100+
Use:"rm [workspace_provider_id]",
101+
Short:"remove a workspace provider.",
102+
Args:xcobra.ExactArgs(1),
103+
Long:"Remove an existing Coder workspace provider.",
104+
Example:`# remove a new workspace provider by id
105+
coder providers rm my-workspace-provider-id`,
106+
RunE:func(cmd*cobra.Command,args []string)error {
107+
ctx:=cmd.Context()
108+
id:=args[0]
109+
client,err:=newClient(ctx)
110+
iferr!=nil {
111+
returnerr
112+
}
113+
114+
err=client.DeleteWorkspaceProviderByID(ctx,id)
115+
iferr!=nil {
116+
returnclog.Error(
117+
fmt.Sprintf(`failed to delete workspace provider "%s"`,id),
118+
clog.Causef(err.Error()),
119+
)
120+
}
121+
122+
clog.LogSuccess(fmt.Sprintf(`deleted workspace provider with id "%s"`,id))
123+
124+
returnnil
125+
},
126+
}
127+
returncmd
128+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp