From dde45fc6cab10d6ca3c903c51124b41389765b72 Mon Sep 17 00:00:00 2001 From: Charlie Moog Date: Fri, 5 Mar 2021 12:06:44 -0600 Subject: [PATCH 1/3] chore: provide resource pool id and namespace in env create --- coder-sdk/env.go | 36 ++++++++++++++++++------------------ internal/cmd/envs.go | 19 +++++++++++++++++-- internal/coderutil/env.go | 14 ++++++++++++++ 3 files changed, 49 insertions(+), 20 deletions(-) diff --git a/coder-sdk/env.go b/coder-sdk/env.go index 7743213c..385b5ceb 100644 --- a/coder-sdk/env.go +++ b/coder-sdk/env.go @@ -75,16 +75,17 @@ const ( // CreateEnvironmentRequest is used to configure a new environment. type CreateEnvironmentRequest struct { - Name string `json:"name"` - ImageID string `json:"image_id"` - OrgID string `json:"org_id"` - ImageTag string `json:"image_tag"` - CPUCores float32 `json:"cpu_cores"` - MemoryGB float32 `json:"memory_gb"` - DiskGB int `json:"disk_gb"` - GPUs int `json:"gpus"` - Services []string `json:"services"` - UseContainerVM bool `json:"use_container_vm"` + Name string `json:"name"` + ImageID string `json:"image_id"` + OrgID string `json:"org_id"` + ImageTag string `json:"image_tag"` + CPUCores float32 `json:"cpu_cores"` + MemoryGB float32 `json:"memory_gb"` + DiskGB int `json:"disk_gb"` + GPUs int `json:"gpus"` + UseContainerVM bool `json:"use_container_vm"` + ResourcePoolID string `json:"resource_pool_id"` + Namespace string `json:"namespace"` // Template comes from the parse template route on cemanager. // This field should never be manually populated @@ -189,14 +190,13 @@ func (c *DefaultClient) StopEnvironment(ctx context.Context, envID string) error // UpdateEnvironmentReq defines the update operation, only setting // nil-fields. type UpdateEnvironmentReq struct { - ImageID *string `json:"image_id"` - ImageTag *string `json:"image_tag"` - CPUCores *float32 `json:"cpu_cores"` - MemoryGB *float32 `json:"memory_gb"` - DiskGB *int `json:"disk_gb"` - GPUs *int `json:"gpus"` - Services *[]string `json:"services"` - CodeServerReleaseURL *string `json:"code_server_release_url"` + ImageID *string `json:"image_id"` + ImageTag *string `json:"image_tag"` + CPUCores *float32 `json:"cpu_cores"` + MemoryGB *float32 `json:"memory_gb"` + DiskGB *int `json:"disk_gb"` + GPUs *int `json:"gpus"` + CodeServerReleaseURL *string `json:"code_server_release_url"` } // RebuildEnvironment requests that the given envID is rebuilt with no changes to its specification. diff --git a/internal/cmd/envs.go b/internal/cmd/envs.go index 38ea29ca..e824aa65 100644 --- a/internal/cmd/envs.go +++ b/internal/cmd/envs.go @@ -11,6 +11,7 @@ import ( "os" "cdr.dev/coder-cli/coder-sdk" + "cdr.dev/coder-cli/internal/coderutil" "cdr.dev/coder-cli/internal/x/xcobra" "cdr.dev/coder-cli/pkg/clog" "cdr.dev/coder-cli/pkg/tablewriter" @@ -198,6 +199,11 @@ coder envs create my-new-powerful-env --cpu 12 --disk 100 --memory 16 --image ub return err } + provider, err := coderutil.DefaultWorkspaceProvider(ctx, client) + if err != nil { + return xerrors.Errorf("default workspace provider: %w", err) + } + // ExactArgs(1) ensures our name value can't panic on an out of bounds. createReq := &coder.CreateEnvironmentRequest{ Name: args[0], @@ -209,6 +215,8 @@ coder envs create my-new-powerful-env --cpu 12 --disk 100 --memory 16 --image ub DiskGB: disk, GPUs: gpus, UseContainerVM: useCVM, + ResourcePoolID: provider.ID, + Namespace: provider.DefaultNamespace, } // if any of these defaulted to their zero value we provision @@ -339,9 +347,16 @@ coder envs create-from-repo -f coder.yaml`, return xerrors.Errorf("parse environment template config: %w", err) } + provider, err := coderutil.DefaultWorkspaceProvider(ctx, client) + if err != nil { + return xerrors.Errorf("default workspace provider: %w", err) + } + env, err := client.CreateEnvironment(ctx, coder.CreateEnvironmentRequest{ - OrgID: userOrg.ID, - Template: tpl, + OrgID: userOrg.ID, + Template: tpl, + ResourcePoolID: provider.ID, + Namespace: provider.DefaultNamespace, }) if err != nil { return xerrors.Errorf("create environment: %w", err) diff --git a/internal/coderutil/env.go b/internal/coderutil/env.go index fff6072d..79421c60 100644 --- a/internal/coderutil/env.go +++ b/internal/coderutil/env.go @@ -58,3 +58,17 @@ func EnvsWithProvider(ctx context.Context, client coder.Client, envs []coder.Env } return pooledEnvs, nil } + +// DefaultWorkspaceProvider returns the default provider with with to create environments. +func DefaultWorkspaceProvider(ctx context.Context, c coder.Client) (*coder.WorkspaceProvider, error) { + provider, err := c.WorkspaceProviders(ctx) + if err != nil { + return nil, err + } + for _, p := range provider { + if p.Local { + return &p, nil + } + } + return nil, coder.ErrNotFound +} From 0f44fdae4d1cc97774e65a67112c9b4053805ff4 Mon Sep 17 00:00:00 2001 From: Charlie Moog Date: Fri, 5 Mar 2021 12:10:32 -0600 Subject: [PATCH 2/3] fixup! chore: provide resource pool id and namespace in env create --- internal/coderutil/env.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/coderutil/env.go b/internal/coderutil/env.go index 79421c60..aca70c4c 100644 --- a/internal/coderutil/env.go +++ b/internal/coderutil/env.go @@ -59,7 +59,7 @@ func EnvsWithProvider(ctx context.Context, client coder.Client, envs []coder.Env return pooledEnvs, nil } -// DefaultWorkspaceProvider returns the default provider with with to create environments. +// DefaultWorkspaceProvider returns the default provider with which to create environments. func DefaultWorkspaceProvider(ctx context.Context, c coder.Client) (*coder.WorkspaceProvider, error) { provider, err := c.WorkspaceProviders(ctx) if err != nil { From 05d1932faa4898768c3edc52f194ac4e1d7f6823 Mon Sep 17 00:00:00 2001 From: Charlie Moog Date: Fri, 5 Mar 2021 12:11:43 -0600 Subject: [PATCH 3/3] fixup! chore: provide resource pool id and namespace in env create --- coder-sdk/env.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/coder-sdk/env.go b/coder-sdk/env.go index 385b5ceb..050db088 100644 --- a/coder-sdk/env.go +++ b/coder-sdk/env.go @@ -190,13 +190,12 @@ func (c *DefaultClient) StopEnvironment(ctx context.Context, envID string) error // UpdateEnvironmentReq defines the update operation, only setting // nil-fields. type UpdateEnvironmentReq struct { - ImageID *string `json:"image_id"` - ImageTag *string `json:"image_tag"` - CPUCores *float32 `json:"cpu_cores"` - MemoryGB *float32 `json:"memory_gb"` - DiskGB *int `json:"disk_gb"` - GPUs *int `json:"gpus"` - CodeServerReleaseURL *string `json:"code_server_release_url"` + ImageID *string `json:"image_id"` + ImageTag *string `json:"image_tag"` + CPUCores *float32 `json:"cpu_cores"` + MemoryGB *float32 `json:"memory_gb"` + DiskGB *int `json:"disk_gb"` + GPUs *int `json:"gpus"` } // RebuildEnvironment requests that the given envID is rebuilt with no changes to its specification.