Thanks to visit codestin.com
Credit goes to github.com

Skip to content
This repository was archived by the owner on Aug 30, 2024. It is now read-only.

Commit 489be87

Browse files
committed
Add commands for workspace providers
1 parent 82f5615 commit 489be87

File tree

12 files changed

+377
-99
lines changed

12 files changed

+377
-99
lines changed

.golangci.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ linters:
3939
- structcheck
4040
- stylecheck
4141
- typecheck
42-
- noctx
4342
- nolintlint
4443
- rowserrcheck
4544
- scopelint

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+
type WorkspaceProvider struct {
10+
ID string `json:"id"`
11+
Name string `json:"name"`
12+
Status WorkspaceProviderStatus `json:"status"`
13+
Local bool `json:"local"`
14+
ClusterAddress string `json:"cluster_address"`
15+
DefaultNamespace string `json:"default_namespace"`
16+
StorageClass string `json:"storage_class"`
17+
ClusterDomainSuffix string `json:"cluster_domain_suffix"`
18+
EnvproxyAccessURL string `json:"envproxy_access_url" validate:"required"`
19+
DevurlHost string `json:"devurl_host"`
20+
SSHEnabled bool `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+
type WorkspaceProviderStatus string
27+
28+
// Workspace Provider statuses.
29+
const (
30+
WorkspaceProviderPending WorkspaceProviderStatus = "pending"
31+
WorkspaceProviderReady WorkspaceProviderStatus = "ready"
32+
)
33+
34+
// WorkspaceProviderByID fetches a workspace provider entity by its unique ID.
35+
func (c *Client) WorkspaceProviderByID(ctx context.Context, id string) (*WorkspaceProvider, error) {
36+
var wp WorkspaceProvider
37+
err := c.requestBody(ctx, http.MethodGet, "/api/private/resource-pools/"+id, nil, &wp)
38+
if err != nil {
39+
return nil, 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+
var providers []WorkspaceProvider
47+
err := c.requestBody(ctx, http.MethodGet, "/api/private/resource-pools", nil, &providers)
48+
if err != nil {
49+
return nil, err
50+
}
51+
return providers, nil
52+
}
53+
54+
// CreateWorkspaceProviderReq defines the request parameters for creating a new workspace provider entity.
55+
type CreateWorkspaceProviderReq struct {
56+
Name string `json:"name"`
57+
}
58+
59+
// CreateWorkspaceProviderRes defines the response from creating a new workspace provider entity.
60+
type CreateWorkspaceProviderRes struct {
61+
ID string `json:"id"`
62+
Name string `json:"name"`
63+
Status WorkspaceProviderStatus `json:"status"`
64+
EnvproxyToken string `json:"envproxy_token"`
65+
}
66+
67+
// CreateWorkspaceProvider creates a new WorkspaceProvider entity.
68+
func (c *Client) CreateWorkspaceProvider(ctx context.Context, req CreateWorkspaceProviderReq) (*CreateWorkspaceProviderRes, error) {
69+
var res CreateWorkspaceProviderRes
70+
err := c.requestBody(ctx, http.MethodPost, "/api/private/resource-pools", req, &res)
71+
if err != nil {
72+
return nil, 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, id string) error {
79+
return c.requestBody(ctx, http.MethodDelete, "/api/private/resource-pools/"+id, nil, nil)
80+
}

docs/coder.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ coder provides a CLI for working with an existing Coder Enterprise installation
1717
* [coder images](coder_images.md) - Manage Coder images
1818
* [coder login](coder_login.md) - Authenticate this client for future operations
1919
* [coder logout](coder_logout.md) - Remove local authentication credentials if any exist
20+
* [coder providers](coder_providers.md) - Interact with Coder workspace providers
2021
* [coder sh](coder_sh.md) - Open a shell and execute commands in a Coder environment
2122
* [coder sync](coder_sync.md) - Establish a one way directory sync to a Coder environment
2223
* [coder tokens](coder_tokens.md) - manage Coder API tokens for the active user

docs/coder_providers.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
## coder providers
2+
3+
Interact with Coder workspace providers
4+
5+
### Synopsis
6+
7+
Perform operations on the Coder Workspace Providers for the platform.
8+
9+
### Options
10+
11+
```
12+
-h, --help help for providers
13+
```
14+
15+
### Options inherited from parent commands
16+
17+
```
18+
-v, --verbose show verbose output
19+
```
20+
21+
### SEE ALSO
22+
23+
* [coder](coder.md) - coder provides a CLI for working with an existing Coder Enterprise installation
24+
* [coder providers create](coder_providers_create.md) - create a new workspace provider.
25+
* [coder providers ls](coder_providers_ls.md) - list workspace providers.
26+
* [coder providers rm](coder_providers_rm.md) - remove a workspace provider.
27+

docs/coder_providers_create.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
## coder providers create
2+
3+
create a new workspace provider.
4+
5+
### Synopsis
6+
7+
Create a new Coder workspace provider.
8+
9+
```
10+
coder providers create [workspace_provider_name] [flags]
11+
```
12+
13+
### Examples
14+
15+
```
16+
# create a new workspace provider in a pending state
17+
coder providers create my-new-workspace-provider
18+
```
19+
20+
### Options
21+
22+
```
23+
-h, --help help for create
24+
```
25+
26+
### Options inherited from parent commands
27+
28+
```
29+
-v, --verbose show verbose output
30+
```
31+
32+
### SEE ALSO
33+
34+
* [coder providers](coder_providers.md) - Interact with Coder workspace providers
35+

docs/coder_providers_ls.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
## coder providers ls
2+
3+
list workspace providers.
4+
5+
### Synopsis
6+
7+
List all Coder workspace providers.
8+
9+
```
10+
coder providers ls [flags]
11+
```
12+
13+
### Examples
14+
15+
```
16+
# list workspace providers
17+
coder providers ls
18+
```
19+
20+
### Options
21+
22+
```
23+
-h, --help help for ls
24+
```
25+
26+
### Options inherited from parent commands
27+
28+
```
29+
-v, --verbose show verbose output
30+
```
31+
32+
### SEE ALSO
33+
34+
* [coder providers](coder_providers.md) - Interact with Coder workspace providers
35+

docs/coder_providers_rm.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
## coder providers rm
2+
3+
remove a workspace provider.
4+
5+
### Synopsis
6+
7+
Remove an existing Coder workspace provider.
8+
9+
```
10+
coder providers rm [workspace_provider_id] [flags]
11+
```
12+
13+
### Examples
14+
15+
```
16+
# remove a new workspace provider by id
17+
coder providers rm my-workspace-provider-id
18+
```
19+
20+
### Options
21+
22+
```
23+
-h, --help help for rm
24+
```
25+
26+
### Options inherited from parent commands
27+
28+
```
29+
-v, --verbose show verbose output
30+
```
31+
32+
### SEE ALSO
33+
34+
* [coder providers](coder_providers.md) - Interact with Coder workspace providers
35+

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
return xerrors.New("no environments found")
105105
}
106106

107-
envsWithPools, err := coderutil.EnvsWithPool(ctx, client, envs)
107+
envsWithProviders, err := coderutil.EnvsWithProvider(ctx, client, envs)
108108
if err != nil {
109-
return xerrors.Errorf("resolve env pools: %w", err)
109+
return xerrors.Errorf("resolve env workspace providers: %w", err)
110110
}
111111

112-
if !sshAvailable(envsWithPools) {
112+
if !sshAvailable(envsWithProviders) {
113113
return xerrors.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
if err != 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-
func sshAvailable(envs []coderutil.EnvWithPool) bool {
160+
func sshAvailable(envs []coderutil.EnvWithWorkspaceProvider) bool {
161161
for _, env := range envs {
162-
if env.Pool.SSHEnabled {
162+
if env.WorkspaceProvider.SSHEnabled {
163163
return true
164164
}
165165
}
@@ -174,19 +174,19 @@ func writeSSHKey(ctx context.Context, client *coder.Client, privateKeyPath strin
174174
return ioutil.WriteFile(privateKeyPath, []byte(key.PrivateKey), 0600)
175175
}
176176

177-
func makeNewConfigs(userName string, envs []coderutil.EnvWithPool, privateKeyFilepath string) string {
177+
func makeNewConfigs(userName string, envs []coderutil.EnvWithWorkspaceProvider, privateKeyFilepath string) string {
178178
newConfig := fmt.Sprintf("\n%s\n%s\n\n", sshStartToken, sshStartMessage)
179179
for _, env := range envs {
180-
if !env.Pool.SSHEnabled {
181-
clog.LogWarn(fmt.Sprintf("SSH is not enabled for pool %q", env.Pool.Name),
180+
if !env.WorkspaceProvider.SSHEnabled {
181+
clog.LogWarn(fmt.Sprintf("SSH is not enabled for workspace provider %q", env.WorkspaceProvider.Name),
182182
clog.BlankLine,
183-
clog.Tipf("ask an infrastructure administrator to enable SSH for this resource pool"),
183+
clog.Tipf("ask an infrastructure administrator to enable SSH for this workspace provider"),
184184
)
185185
continue
186186
}
187-
u, err := url.Parse(env.Pool.AccessURL)
187+
u, err := url.Parse(env.WorkspaceProvider.EnvproxyAccessURL)
188188
if err != 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)

0 commit comments

Comments
 (0)