From 6ce8cd97929ae6cbc4cab3bd97c234ea6147b0b5 Mon Sep 17 00:00:00 2001 From: Garrett Delfosse Date: Thu, 26 Sep 2024 16:02:57 +0000 Subject: [PATCH 1/8] fix: improve provisioner key cli usability --- codersdk/provisionerdaemons.go | 10 +++---- docs/manifest.json | 24 ++++++++-------- docs/reference/cli/README.md | 2 +- docs/reference/cli/provisioner.md | 22 +++++++++++++++ docs/reference/cli/provisioner_keys.md | 23 +++++++++++++++ ...s_create.md => provisioner_keys_create.md} | 4 +-- ...s_delete.md => provisioner_keys_delete.md} | 4 +-- ..._keys_list.md => provisioner_keys_list.md} | 4 +-- ...isionerd_start.md => provisioner_start.md} | 13 +++++++-- docs/reference/cli/provisionerd.md | 22 --------------- docs/reference/cli/provisionerd_keys.md | 23 --------------- enterprise/cli/provisionerdaemons.go | 14 ++++++++-- enterprise/cli/provisionerdaemonstart.go | 1 - enterprise/cli/provisionerkeys.go | 28 +++++++++++++++++-- enterprise/cli/root.go | 1 + 15 files changed, 119 insertions(+), 76 deletions(-) create mode 100644 docs/reference/cli/provisioner.md create mode 100644 docs/reference/cli/provisioner_keys.md rename docs/reference/cli/{provisionerd_keys_create.md => provisioner_keys_create.md} (90%) rename docs/reference/cli/{provisionerd_keys_delete.md => provisioner_keys_delete.md} (87%) rename docs/reference/cli/{provisionerd_keys_list.md => provisioner_keys_list.md} (86%) rename docs/reference/cli/{provisionerd_start.md => provisioner_start.md} (93%) delete mode 100644 docs/reference/cli/provisionerd.md delete mode 100644 docs/reference/cli/provisionerd_keys.md diff --git a/codersdk/provisionerdaemons.go b/codersdk/provisionerdaemons.go index 77d5cba8c8ff0..794f10421dc6c 100644 --- a/codersdk/provisionerdaemons.go +++ b/codersdk/provisionerdaemons.go @@ -275,11 +275,11 @@ func (c *Client) ServeProvisionerDaemon(ctx context.Context, req ServeProvisione } type ProvisionerKey struct { - ID uuid.UUID `json:"id" table:"-" format:"uuid"` - CreatedAt time.Time `json:"created_at" table:"created at" format:"date-time"` - OrganizationID uuid.UUID `json:"organization" table:"organization id" format:"uuid"` - Name string `json:"name" table:"name,default_sort"` - Tags map[string]string `json:"tags" table:"tags"` + ID uuid.UUID `json:"id" format:"uuid"` + CreatedAt time.Time `json:"created_at" format:"date-time"` + OrganizationID uuid.UUID `json:"organization" format:"uuid"` + Name string `json:"name"` + Tags map[string]string `json:"tags"` // HashedSecret - never include the access token in the API response } diff --git a/docs/manifest.json b/docs/manifest.json index e6663816af052..29205a6474681 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -916,34 +916,34 @@ "path": "reference/cli/port-forward.md" }, { - "title": "provisionerd", + "title": "provisioner", "description": "Manage provisioner daemons", - "path": "reference/cli/provisionerd.md" + "path": "reference/cli/provisioner.md" }, { - "title": "provisionerd keys", + "title": "provisioner keys", "description": "Manage provisioner keys", - "path": "reference/cli/provisionerd_keys.md" + "path": "reference/cli/provisioner_keys.md" }, { - "title": "provisionerd keys create", + "title": "provisioner keys create", "description": "Create a new provisioner key", - "path": "reference/cli/provisionerd_keys_create.md" + "path": "reference/cli/provisioner_keys_create.md" }, { - "title": "provisionerd keys delete", + "title": "provisioner keys delete", "description": "Delete a provisioner key", - "path": "reference/cli/provisionerd_keys_delete.md" + "path": "reference/cli/provisioner_keys_delete.md" }, { - "title": "provisionerd keys list", + "title": "provisioner keys list", "description": "List provisioner keys in an organization", - "path": "reference/cli/provisionerd_keys_list.md" + "path": "reference/cli/provisioner_keys_list.md" }, { - "title": "provisionerd start", + "title": "provisioner start", "description": "Run a provisioner daemon", - "path": "reference/cli/provisionerd_start.md" + "path": "reference/cli/provisioner_start.md" }, { "title": "publickey", diff --git a/docs/reference/cli/README.md b/docs/reference/cli/README.md index b5384d7c2e00f..525cb8ac7d183 100644 --- a/docs/reference/cli/README.md +++ b/docs/reference/cli/README.md @@ -66,7 +66,7 @@ Coder — A tool for provisioning self-hosted development environments with Terr | [features](./features.md) | List Enterprise features | | [licenses](./licenses.md) | Add, delete, and list licenses | | [groups](./groups.md) | Manage groups | -| [provisionerd](./provisionerd.md) | Manage provisioner daemons | +| [provisioner](./provisioner.md) | Manage provisioner daemons | ## Options diff --git a/docs/reference/cli/provisioner.md b/docs/reference/cli/provisioner.md new file mode 100644 index 0000000000000..54cc28a84bea4 --- /dev/null +++ b/docs/reference/cli/provisioner.md @@ -0,0 +1,22 @@ + + +# provisioner + +Manage provisioner daemons + +Aliases: + +- provisioners + +## Usage + +```console +coder provisioner +``` + +## Subcommands + +| Name | Purpose | +| -------------------------------------------- | ------------------------ | +| [start](./provisioner_start.md) | Run a provisioner daemon | +| [keys](./provisioner_keys.md) | Manage provisioner keys | diff --git a/docs/reference/cli/provisioner_keys.md b/docs/reference/cli/provisioner_keys.md new file mode 100644 index 0000000000000..014af6f117c3a --- /dev/null +++ b/docs/reference/cli/provisioner_keys.md @@ -0,0 +1,23 @@ + + +# provisioner keys + +Manage provisioner keys + +Aliases: + +- key + +## Usage + +```console +coder provisioner keys +``` + +## Subcommands + +| Name | Purpose | +| --------------------------------------------------- | ---------------------------------------- | +| [create](./provisioner_keys_create.md) | Create a new provisioner key | +| [list](./provisioner_keys_list.md) | List provisioner keys in an organization | +| [delete](./provisioner_keys_delete.md) | Delete a provisioner key | diff --git a/docs/reference/cli/provisionerd_keys_create.md b/docs/reference/cli/provisioner_keys_create.md similarity index 90% rename from docs/reference/cli/provisionerd_keys_create.md rename to docs/reference/cli/provisioner_keys_create.md index 7839d700abdb9..da6479d15bfc9 100644 --- a/docs/reference/cli/provisionerd_keys_create.md +++ b/docs/reference/cli/provisioner_keys_create.md @@ -1,13 +1,13 @@ -# provisionerd keys create +# provisioner keys create Create a new provisioner key ## Usage ```console -coder provisionerd keys create [flags] +coder provisioner keys create [flags] ``` ## Options diff --git a/docs/reference/cli/provisionerd_keys_delete.md b/docs/reference/cli/provisioner_keys_delete.md similarity index 87% rename from docs/reference/cli/provisionerd_keys_delete.md rename to docs/reference/cli/provisioner_keys_delete.md index 7921975ff6a9c..56e32e57d048b 100644 --- a/docs/reference/cli/provisionerd_keys_delete.md +++ b/docs/reference/cli/provisioner_keys_delete.md @@ -1,6 +1,6 @@ -# provisionerd keys delete +# provisioner keys delete Delete a provisioner key @@ -11,7 +11,7 @@ Aliases: ## Usage ```console -coder provisionerd keys delete [flags] +coder provisioner keys delete [flags] ``` ## Options diff --git a/docs/reference/cli/provisionerd_keys_list.md b/docs/reference/cli/provisioner_keys_list.md similarity index 86% rename from docs/reference/cli/provisionerd_keys_list.md rename to docs/reference/cli/provisioner_keys_list.md index ace729d4b31d2..366db05fa490f 100644 --- a/docs/reference/cli/provisionerd_keys_list.md +++ b/docs/reference/cli/provisioner_keys_list.md @@ -1,6 +1,6 @@ -# provisionerd keys list +# provisioner keys list List provisioner keys in an organization @@ -11,7 +11,7 @@ Aliases: ## Usage ```console -coder provisionerd keys list [flags] +coder provisioner keys list [flags] ``` ## Options diff --git a/docs/reference/cli/provisionerd_start.md b/docs/reference/cli/provisioner_start.md similarity index 93% rename from docs/reference/cli/provisionerd_start.md rename to docs/reference/cli/provisioner_start.md index c3ccccbd0e1a1..65254d18c0149 100644 --- a/docs/reference/cli/provisionerd_start.md +++ b/docs/reference/cli/provisioner_start.md @@ -1,13 +1,13 @@ -# provisionerd start +# provisioner start Run a provisioner daemon ## Usage ```console -coder provisionerd start [flags] +coder provisioner start [flags] ``` ## Options @@ -60,6 +60,15 @@ Deprecated and ignored. Pre-shared key to authenticate with Coder server. +### --key + +| | | +| ----------- | ------------------------------------------ | +| Type | string | +| Environment | $CODER_PROVISIONER_DAEMON_KEY | + +Provisioner key to authenticate with Coder server. + ### --name | | | diff --git a/docs/reference/cli/provisionerd.md b/docs/reference/cli/provisionerd.md deleted file mode 100644 index 9d9e0daaa4bd4..0000000000000 --- a/docs/reference/cli/provisionerd.md +++ /dev/null @@ -1,22 +0,0 @@ - - -# provisionerd - -Manage provisioner daemons - -Aliases: - -- provisioner - -## Usage - -```console -coder provisionerd -``` - -## Subcommands - -| Name | Purpose | -| --------------------------------------------- | ------------------------ | -| [start](./provisionerd_start.md) | Run a provisioner daemon | -| [keys](./provisionerd_keys.md) | Manage provisioner keys | diff --git a/docs/reference/cli/provisionerd_keys.md b/docs/reference/cli/provisionerd_keys.md deleted file mode 100644 index 670e89afdbf78..0000000000000 --- a/docs/reference/cli/provisionerd_keys.md +++ /dev/null @@ -1,23 +0,0 @@ - - -# provisionerd keys - -Manage provisioner keys - -Aliases: - -- key - -## Usage - -```console -coder provisionerd keys -``` - -## Subcommands - -| Name | Purpose | -| ---------------------------------------------------- | ---------------------------------------- | -| [create](./provisionerd_keys_create.md) | Create a new provisioner key | -| [list](./provisionerd_keys_list.md) | List provisioner keys in an organization | -| [delete](./provisionerd_keys_delete.md) | Delete a provisioner key | diff --git a/enterprise/cli/provisionerdaemons.go b/enterprise/cli/provisionerdaemons.go index a10d1cc261660..8f6d189826e4e 100644 --- a/enterprise/cli/provisionerdaemons.go +++ b/enterprise/cli/provisionerdaemons.go @@ -4,12 +4,12 @@ import "github.com/coder/serpent" func (r *RootCmd) provisionerDaemons() *serpent.Command { cmd := &serpent.Command{ - Use: "provisionerd", + Use: "provisioner", Short: "Manage provisioner daemons", Handler: func(inv *serpent.Invocation) error { return inv.Command.HelpHandler(inv) }, - Aliases: []string{"provisioner"}, + Aliases: []string{"provisioners"}, Children: []*serpent.Command{ r.provisionerDaemonStart(), r.provisionerKeys(), @@ -18,3 +18,13 @@ func (r *RootCmd) provisionerDaemons() *serpent.Command { return cmd } + +// The provisionerd command group is deprecated and hidden but kept around +// for backwards compatibility. +func (r *RootCmd) provisionerd() *serpent.Command { + cmd := r.provisionerDaemons() + cmd.Use = "provisionerd" + cmd.Hidden = true + + return cmd +} diff --git a/enterprise/cli/provisionerdaemonstart.go b/enterprise/cli/provisionerdaemonstart.go index e47f1567e18e3..be7a11b6e363b 100644 --- a/enterprise/cli/provisionerdaemonstart.go +++ b/enterprise/cli/provisionerdaemonstart.go @@ -270,7 +270,6 @@ func (r *RootCmd) provisionerDaemonStart() *serpent.Command { Env: "CODER_PROVISIONER_DAEMON_KEY", Description: "Provisioner key to authenticate with Coder server.", Value: serpent.StringOf(&provisionerKey), - Hidden: true, } cmd.Options = serpent.OptionSet{ { diff --git a/enterprise/cli/provisionerkeys.go b/enterprise/cli/provisionerkeys.go index 9e43766b13f99..68557d2dfd9ff 100644 --- a/enterprise/cli/provisionerkeys.go +++ b/enterprise/cli/provisionerkeys.go @@ -3,6 +3,7 @@ package cli import ( "fmt" "strings" + "time" "golang.org/x/xerrors" @@ -95,7 +96,7 @@ func (r *RootCmd) provisionerKeysList() *serpent.Command { var ( orgContext = agpl.NewOrganizationContext() formatter = cliui.NewOutputFormatter( - cliui.TableFormat([]codersdk.ProvisionerKey{}, nil), + cliui.TableFormat([]provisionerKeyListItem{}, nil), cliui.JSONFormat(), ) ) @@ -127,7 +128,7 @@ func (r *RootCmd) provisionerKeysList() *serpent.Command { return nil } - out, err := formatter.Format(inv.Context(), keys) + out, err := formatter.Format(inv.Context(), provisionerKeyList(keys)) if err != nil { return xerrors.Errorf("display provisioner keys: %w", err) } @@ -144,6 +145,29 @@ func (r *RootCmd) provisionerKeysList() *serpent.Command { return cmd } +type provisionerKeyListItem struct { + Name string `json:"name" table:"name,default_sort"` + CreatedAt time.Time `json:"created_at" table:"created at" format:"date-time"` + Tags string `json:"tags" table:"tags"` +} + +func provisionerKeyList(items []codersdk.ProvisionerKey) []provisionerKeyListItem { + var out []provisionerKeyListItem + for _, item := range items { + tags := []string{} + for k, v := range item.Tags { + tags = append(tags, fmt.Sprintf("%s=%s", k, v)) + } + out = append(out, provisionerKeyListItem{ + Name: item.Name, + CreatedAt: item.CreatedAt, + Tags: strings.Join(tags, ", "), + }) + } + + return out +} + func (r *RootCmd) provisionerKeysDelete() *serpent.Command { orgContext := agpl.NewOrganizationContext() diff --git a/enterprise/cli/root.go b/enterprise/cli/root.go index 74615ff0e9d2e..1af40ff1b2622 100644 --- a/enterprise/cli/root.go +++ b/enterprise/cli/root.go @@ -17,6 +17,7 @@ func (r *RootCmd) enterpriseOnly() []*serpent.Command { r.licenses(), r.groups(), r.provisionerDaemons(), + r.provisionerd(), } } From 23e90de65d691ff28d2bdbc66962df74785fc561 Mon Sep 17 00:00:00 2001 From: Garrett Delfosse Date: Thu, 26 Sep 2024 16:06:32 +0000 Subject: [PATCH 2/8] fix --- enterprise/cli/provisionerdaemons.go | 15 +++++++++++---- enterprise/cli/provisionerkeys.go | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/enterprise/cli/provisionerdaemons.go b/enterprise/cli/provisionerdaemons.go index 8f6d189826e4e..1a9ac531f71d7 100644 --- a/enterprise/cli/provisionerdaemons.go +++ b/enterprise/cli/provisionerdaemons.go @@ -20,11 +20,18 @@ func (r *RootCmd) provisionerDaemons() *serpent.Command { } // The provisionerd command group is deprecated and hidden but kept around -// for backwards compatibility. +// for backwards compatibility with the start command. func (r *RootCmd) provisionerd() *serpent.Command { - cmd := r.provisionerDaemons() - cmd.Use = "provisionerd" - cmd.Hidden = true + cmd := &serpent.Command{ + Use: "provisionerd", + Short: "Manage provisioner daemons", + Handler: func(inv *serpent.Invocation) error { + return inv.Command.HelpHandler(inv) + }, + Children: []*serpent.Command{ + r.provisionerDaemonStart(), + }, + } return cmd } diff --git a/enterprise/cli/provisionerkeys.go b/enterprise/cli/provisionerkeys.go index 68557d2dfd9ff..0154e0858bcaf 100644 --- a/enterprise/cli/provisionerkeys.go +++ b/enterprise/cli/provisionerkeys.go @@ -146,8 +146,8 @@ func (r *RootCmd) provisionerKeysList() *serpent.Command { } type provisionerKeyListItem struct { - Name string `json:"name" table:"name,default_sort"` CreatedAt time.Time `json:"created_at" table:"created at" format:"date-time"` + Name string `json:"name" table:"name,default_sort"` Tags string `json:"tags" table:"tags"` } From 86f681077038dc25d2a48a6c65df6d75a4e787c5 Mon Sep 17 00:00:00 2001 From: Garrett Delfosse Date: Thu, 26 Sep 2024 16:08:56 +0000 Subject: [PATCH 3/8] fix --- enterprise/cli/provisionerdaemons.go | 1 + 1 file changed, 1 insertion(+) diff --git a/enterprise/cli/provisionerdaemons.go b/enterprise/cli/provisionerdaemons.go index 1a9ac531f71d7..8d39723a269e3 100644 --- a/enterprise/cli/provisionerdaemons.go +++ b/enterprise/cli/provisionerdaemons.go @@ -31,6 +31,7 @@ func (r *RootCmd) provisionerd() *serpent.Command { Children: []*serpent.Command{ r.provisionerDaemonStart(), }, + Hidden: true, } return cmd From 9f5653a0035c910e664adcc4ae2a949d4d2df15d Mon Sep 17 00:00:00 2001 From: Garrett Delfosse Date: Fri, 27 Sep 2024 14:43:48 +0000 Subject: [PATCH 4/8] tests: --- codersdk/provisionerdaemons.go | 21 ++++++++++++++----- enterprise/cli/provisionerkeys.go | 28 ++------------------------ enterprise/cli/provisionerkeys_test.go | 5 ++--- enterprise/coderd/provisionerkeys.go | 2 +- 4 files changed, 21 insertions(+), 35 deletions(-) diff --git a/codersdk/provisionerdaemons.go b/codersdk/provisionerdaemons.go index 794f10421dc6c..8fa314fd7849d 100644 --- a/codersdk/provisionerdaemons.go +++ b/codersdk/provisionerdaemons.go @@ -7,6 +7,7 @@ import ( "io" "net/http" "net/http/cookiejar" + "strings" "time" "github.com/google/uuid" @@ -274,12 +275,22 @@ func (c *Client) ServeProvisionerDaemon(ctx context.Context, req ServeProvisione return proto.NewDRPCProvisionerDaemonClient(drpc.MultiplexedConn(session)), nil } +type ProvisionerKeyTags map[string]string + +func (p ProvisionerKeyTags) String() string { + tags := []string{} + for key, value := range p { + tags = append(tags, fmt.Sprintf("%s=%s", key, value)) + } + return strings.Join(tags, " ") +} + type ProvisionerKey struct { - ID uuid.UUID `json:"id" format:"uuid"` - CreatedAt time.Time `json:"created_at" format:"date-time"` - OrganizationID uuid.UUID `json:"organization" format:"uuid"` - Name string `json:"name"` - Tags map[string]string `json:"tags"` + ID uuid.UUID `json:"id" table:"-" format:"uuid"` + CreatedAt time.Time `json:"created_at" table:"created at" format:"date-time"` + OrganizationID uuid.UUID `json:"organization" table:"-" format:"uuid"` + Name string `json:"name" table:"name,default_sort"` + Tags ProvisionerKeyTags `json:"tags" table:"tags"` // HashedSecret - never include the access token in the API response } diff --git a/enterprise/cli/provisionerkeys.go b/enterprise/cli/provisionerkeys.go index 0154e0858bcaf..99d8bd8acf9ab 100644 --- a/enterprise/cli/provisionerkeys.go +++ b/enterprise/cli/provisionerkeys.go @@ -3,7 +3,6 @@ package cli import ( "fmt" "strings" - "time" "golang.org/x/xerrors" @@ -96,7 +95,7 @@ func (r *RootCmd) provisionerKeysList() *serpent.Command { var ( orgContext = agpl.NewOrganizationContext() formatter = cliui.NewOutputFormatter( - cliui.TableFormat([]provisionerKeyListItem{}, nil), + cliui.TableFormat([]codersdk.ProvisionerKey{}, []string{"created at", "name", "tags"}), cliui.JSONFormat(), ) ) @@ -128,7 +127,7 @@ func (r *RootCmd) provisionerKeysList() *serpent.Command { return nil } - out, err := formatter.Format(inv.Context(), provisionerKeyList(keys)) + out, err := formatter.Format(inv.Context(), keys) if err != nil { return xerrors.Errorf("display provisioner keys: %w", err) } @@ -145,29 +144,6 @@ func (r *RootCmd) provisionerKeysList() *serpent.Command { return cmd } -type provisionerKeyListItem struct { - CreatedAt time.Time `json:"created_at" table:"created at" format:"date-time"` - Name string `json:"name" table:"name,default_sort"` - Tags string `json:"tags" table:"tags"` -} - -func provisionerKeyList(items []codersdk.ProvisionerKey) []provisionerKeyListItem { - var out []provisionerKeyListItem - for _, item := range items { - tags := []string{} - for k, v := range item.Tags { - tags = append(tags, fmt.Sprintf("%s=%s", k, v)) - } - out = append(out, provisionerKeyListItem{ - Name: item.Name, - CreatedAt: item.CreatedAt, - Tags: strings.Join(tags, ", "), - }) - } - - return out -} - func (r *RootCmd) provisionerKeysDelete() *serpent.Command { orgContext := agpl.NewOrganizationContext() diff --git a/enterprise/cli/provisionerkeys_test.go b/enterprise/cli/provisionerkeys_test.go index 47df45ed98596..10de80d3caf1d 100644 --- a/enterprise/cli/provisionerkeys_test.go +++ b/enterprise/cli/provisionerkeys_test.go @@ -41,7 +41,7 @@ func TestProvisionerKeys(t *testing.T) { ctx := testutil.Context(t, testutil.WaitMedium) inv, conf := newCLI( t, - "provisioner", "keys", "create", name, "--tag", "foo=bar", + "provisioner", "keys", "create", name, "--tag", "foo=bar", "--tag", "my=way", ) pty := ptytest.New(t) @@ -73,11 +73,10 @@ func TestProvisionerKeys(t *testing.T) { line = pty.ReadLine(ctx) require.Contains(t, line, "NAME") require.Contains(t, line, "CREATED AT") - require.Contains(t, line, "ORGANIZATION ID") require.Contains(t, line, "TAGS") line = pty.ReadLine(ctx) require.Contains(t, line, strings.ToLower(name)) - require.Contains(t, line, "map[foo:bar]") + require.Contains(t, line, "foo=bar my=way") inv, conf = newCLI( t, diff --git a/enterprise/coderd/provisionerkeys.go b/enterprise/coderd/provisionerkeys.go index 993b56c3e6304..ea89538965afa 100644 --- a/enterprise/coderd/provisionerkeys.go +++ b/enterprise/coderd/provisionerkeys.go @@ -204,7 +204,7 @@ func convertProvisionerKeys(dbKeys []database.ProvisionerKey) []codersdk.Provisi CreatedAt: dbKey.CreatedAt, OrganizationID: dbKey.OrganizationID, Name: dbKey.Name, - Tags: dbKey.Tags, + Tags: codersdk.ProvisionerKeyTags(dbKey.Tags), // HashedSecret - never include the access token in the API response }) } From f3d9279528b78cb83e72dd93538e1336afa74003 Mon Sep 17 00:00:00 2001 From: Garrett Delfosse Date: Fri, 27 Sep 2024 14:45:36 +0000 Subject: [PATCH 5/8] gen --- coderd/apidoc/docs.go | 11 +++--- coderd/apidoc/swagger.json | 11 +++--- docs/reference/api/enterprise.md | 62 ++++++++++++++++---------------- docs/reference/api/schemas.md | 30 +++++++++++----- site/src/api/typesGenerated.ts | 5 ++- 5 files changed, 71 insertions(+), 48 deletions(-) diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go index ebf9bf8ae075d..454e3c65faf3a 100644 --- a/coderd/apidoc/docs.go +++ b/coderd/apidoc/docs.go @@ -11857,10 +11857,7 @@ const docTemplate = `{ "format": "uuid" }, "tags": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/definitions/codersdk.ProvisionerKeyTags" } } }, @@ -11878,6 +11875,12 @@ const docTemplate = `{ } } }, + "codersdk.ProvisionerKeyTags": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "codersdk.ProvisionerLogLevel": { "type": "string", "enum": [ diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json index 3a162713ed489..a2758becbdafb 100644 --- a/coderd/apidoc/swagger.json +++ b/coderd/apidoc/swagger.json @@ -10707,10 +10707,7 @@ "format": "uuid" }, "tags": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/definitions/codersdk.ProvisionerKeyTags" } } }, @@ -10728,6 +10725,12 @@ } } }, + "codersdk.ProvisionerKeyTags": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "codersdk.ProvisionerLogLevel": { "type": "string", "enum": ["debug"], diff --git a/docs/reference/api/enterprise.md b/docs/reference/api/enterprise.md index 32dab3dc43ac5..96256b30aeed6 100644 --- a/docs/reference/api/enterprise.md +++ b/docs/reference/api/enterprise.md @@ -1609,15 +1609,15 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi Status Code **200** -| Name | Type | Required | Restrictions | Description | -| ------------------- | ----------------- | -------- | ------------ | ----------- | -| `[array item]` | array | false | | | -| `» created_at` | string(date-time) | false | | | -| `» id` | string(uuid) | false | | | -| `» name` | string | false | | | -| `» organization` | string(uuid) | false | | | -| `» tags` | object | false | | | -| `»» [any property]` | string | false | | | +| Name | Type | Required | Restrictions | Description | +| ------------------- | -------------------------------------------------------------------- | -------- | ------------ | ----------- | +| `[array item]` | array | false | | | +| `» created_at` | string(date-time) | false | | | +| `» id` | string(uuid) | false | | | +| `» name` | string | false | | | +| `» organization` | string(uuid) | false | | | +| `» tags` | [codersdk.ProvisionerKeyTags](schemas.md#codersdkprovisionerkeytags) | false | | | +| `»» [any property]` | string | false | | | To perform this operation, you must be authenticated. [Learn more](authentication.md). @@ -1725,28 +1725,28 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi Status Code **200** -| Name | Type | Required | Restrictions | Description | -| -------------------- | ------------------------------------------------------------ | -------- | ------------ | ----------- | -| `[array item]` | array | false | | | -| `» daemons` | array | false | | | -| `»» api_version` | string | false | | | -| `»» created_at` | string(date-time) | false | | | -| `»» id` | string(uuid) | false | | | -| `»» key_id` | string(uuid) | false | | | -| `»» last_seen_at` | string(date-time) | false | | | -| `»» name` | string | false | | | -| `»» organization_id` | string(uuid) | false | | | -| `»» provisioners` | array | false | | | -| `»» tags` | object | false | | | -| `»»» [any property]` | string | false | | | -| `»» version` | string | false | | | -| `» key` | [codersdk.ProvisionerKey](schemas.md#codersdkprovisionerkey) | false | | | -| `»» created_at` | string(date-time) | false | | | -| `»» id` | string(uuid) | false | | | -| `»» name` | string | false | | | -| `»» organization` | string(uuid) | false | | | -| `»» tags` | object | false | | | -| `»»» [any property]` | string | false | | | +| Name | Type | Required | Restrictions | Description | +| -------------------- | -------------------------------------------------------------------- | -------- | ------------ | ----------- | +| `[array item]` | array | false | | | +| `» daemons` | array | false | | | +| `»» api_version` | string | false | | | +| `»» created_at` | string(date-time) | false | | | +| `»» id` | string(uuid) | false | | | +| `»» key_id` | string(uuid) | false | | | +| `»» last_seen_at` | string(date-time) | false | | | +| `»» name` | string | false | | | +| `»» organization_id` | string(uuid) | false | | | +| `»» provisioners` | array | false | | | +| `»» tags` | object | false | | | +| `»»» [any property]` | string | false | | | +| `»» version` | string | false | | | +| `» key` | [codersdk.ProvisionerKey](schemas.md#codersdkprovisionerkey) | false | | | +| `»» created_at` | string(date-time) | false | | | +| `»» id` | string(uuid) | false | | | +| `»» name` | string | false | | | +| `»» organization` | string(uuid) | false | | | +| `»» tags` | [codersdk.ProvisionerKeyTags](schemas.md#codersdkprovisionerkeytags) | false | | | +| `»»» [any property]` | string | false | | | To perform this operation, you must be authenticated. [Learn more](authentication.md). diff --git a/docs/reference/api/schemas.md b/docs/reference/api/schemas.md index c8f58d591170b..890e7ba56044f 100644 --- a/docs/reference/api/schemas.md +++ b/docs/reference/api/schemas.md @@ -4176,14 +4176,13 @@ CreateWorkspaceRequest provides options for creating a new workspace. Only one o ### Properties -| Name | Type | Required | Restrictions | Description | -| ------------------ | ------ | -------- | ------------ | ----------- | -| `created_at` | string | false | | | -| `id` | string | false | | | -| `name` | string | false | | | -| `organization` | string | false | | | -| `tags` | object | false | | | -| » `[any property]` | string | false | | | +| Name | Type | Required | Restrictions | Description | +| -------------- | ---------------------------------------------------------- | -------- | ------------ | ----------- | +| `created_at` | string | false | | | +| `id` | string | false | | | +| `name` | string | false | | | +| `organization` | string | false | | | +| `tags` | [codersdk.ProvisionerKeyTags](#codersdkprovisionerkeytags) | false | | | ## codersdk.ProvisionerKeyDaemons @@ -4226,6 +4225,21 @@ CreateWorkspaceRequest provides options for creating a new workspace. Only one o | `daemons` | array of [codersdk.ProvisionerDaemon](#codersdkprovisionerdaemon) | false | | | | `key` | [codersdk.ProvisionerKey](#codersdkprovisionerkey) | false | | | +## codersdk.ProvisionerKeyTags + +```json +{ + "property1": "string", + "property2": "string" +} +``` + +### Properties + +| Name | Type | Required | Restrictions | Description | +| ---------------- | ------ | -------- | ------------ | ----------- | +| `[any property]` | string | false | | | + ## codersdk.ProvisionerLogLevel ```json diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 35f393e567f1e..1a988dc23c5f6 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -1060,7 +1060,7 @@ export interface ProvisionerKey { readonly created_at: string; readonly organization: string; readonly name: string; - readonly tags: Record; + readonly tags: ProvisionerKeyTags; } // From codersdk/provisionerdaemons.go @@ -1069,6 +1069,9 @@ export interface ProvisionerKeyDaemons { readonly daemons: Readonly>; } +// From codersdk/provisionerdaemons.go +export type ProvisionerKeyTags = Record + // From codersdk/workspaces.go export interface ProvisionerTiming { readonly job_id: string; From b00820d438a84d3db20a4999789e645edbc62f20 Mon Sep 17 00:00:00 2001 From: Garrett Delfosse Date: Fri, 27 Sep 2024 14:50:53 +0000 Subject: [PATCH 6/8] fix doc links --- docs/admin/provisioners.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/admin/provisioners.md b/docs/admin/provisioners.md index 83e77f6837760..acbf12f55f54e 100644 --- a/docs/admin/provisioners.md +++ b/docs/admin/provisioners.md @@ -26,7 +26,7 @@ For example, running 30 provisioner containers will allow 30 users to start workspaces at the same time. Provisioners are started with the -[coder provisionerd start](../reference/cli/provisionerd_start.md) command. +[coder provisionerd start](../reference/cli/provisioner_start.md) command. ## Authentication @@ -49,7 +49,7 @@ the [Helm example](#example-running-an-external-provisioner-with-helm) below. Provisioners can broadly be categorized by scope: `organization` or `user`. The scope of a provisioner can be specified with -[`-tag=scope=`](../reference/cli/provisionerd_start.md#t---tag) when +[`-tag=scope=`](../reference/cli/provisioner_start.md#t---tag) when starting the provisioner daemon. Only users with at least the [Template Admin](../admin/users.md#roles) role or higher may create organization-scoped provisioner daemons. @@ -59,7 +59,7 @@ There are two exceptions: - [Built-in provisioners](../reference/cli/server.md#provisioner-daemons) are always organization-scoped. - External provisioners started using a - [pre-shared key (PSK)](../reference/cli/provisionerd_start.md#psk) are always + [pre-shared key (PSK)](../reference/cli/provisioner_start.md#psk) are always organization-scoped. ### Organization-Scoped Provisioners From 908f4f89fb04422655571bcc97636d43f6c70eca Mon Sep 17 00:00:00 2001 From: Garrett Delfosse Date: Fri, 27 Sep 2024 15:04:05 +0000 Subject: [PATCH 7/8] golden --- enterprise/cli/testdata/coder_--help.golden | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/enterprise/cli/testdata/coder_--help.golden b/enterprise/cli/testdata/coder_--help.golden index e575451922a5b..9b3584a3e48b2 100644 --- a/enterprise/cli/testdata/coder_--help.golden +++ b/enterprise/cli/testdata/coder_--help.golden @@ -17,7 +17,7 @@ SUBCOMMANDS: features List Enterprise features groups Manage groups licenses Add, delete, and list licenses - provisionerd Manage provisioner daemons + provisioner Manage provisioner daemons server Start a Coder server GLOBAL OPTIONS: From 8d09d1a48e215c0cb412f1b1a365d7e999c9a920 Mon Sep 17 00:00:00 2001 From: Garrett Delfosse Date: Fri, 27 Sep 2024 15:11:28 +0000 Subject: [PATCH 8/8] gen golden --- .../testdata/coder_provisioner_--help.golden | 15 +++++ .../coder_provisioner_keys_--help.golden | 16 +++++ ...oder_provisioner_keys_create_--help.golden | 16 +++++ ...oder_provisioner_keys_delete_--help.golden | 18 ++++++ .../coder_provisioner_keys_list_--help.golden | 15 +++++ .../coder_provisioner_start_--help.golden | 58 +++++++++++++++++++ 6 files changed, 138 insertions(+) create mode 100644 enterprise/cli/testdata/coder_provisioner_--help.golden create mode 100644 enterprise/cli/testdata/coder_provisioner_keys_--help.golden create mode 100644 enterprise/cli/testdata/coder_provisioner_keys_create_--help.golden create mode 100644 enterprise/cli/testdata/coder_provisioner_keys_delete_--help.golden create mode 100644 enterprise/cli/testdata/coder_provisioner_keys_list_--help.golden create mode 100644 enterprise/cli/testdata/coder_provisioner_start_--help.golden diff --git a/enterprise/cli/testdata/coder_provisioner_--help.golden b/enterprise/cli/testdata/coder_provisioner_--help.golden new file mode 100644 index 0000000000000..e6cd69feeceac --- /dev/null +++ b/enterprise/cli/testdata/coder_provisioner_--help.golden @@ -0,0 +1,15 @@ +coder v0.0.0-devel + +USAGE: + coder provisioner + + Manage provisioner daemons + + Aliases: provisioners + +SUBCOMMANDS: + keys Manage provisioner keys + start Run a provisioner daemon + +——— +Run `coder --help` for a list of global options. diff --git a/enterprise/cli/testdata/coder_provisioner_keys_--help.golden b/enterprise/cli/testdata/coder_provisioner_keys_--help.golden new file mode 100644 index 0000000000000..4a0b43adaaaf3 --- /dev/null +++ b/enterprise/cli/testdata/coder_provisioner_keys_--help.golden @@ -0,0 +1,16 @@ +coder v0.0.0-devel + +USAGE: + coder provisioner keys + + Manage provisioner keys + + Aliases: key + +SUBCOMMANDS: + create Create a new provisioner key + delete Delete a provisioner key + list List provisioner keys in an organization + +——— +Run `coder --help` for a list of global options. diff --git a/enterprise/cli/testdata/coder_provisioner_keys_create_--help.golden b/enterprise/cli/testdata/coder_provisioner_keys_create_--help.golden new file mode 100644 index 0000000000000..077464331eb12 --- /dev/null +++ b/enterprise/cli/testdata/coder_provisioner_keys_create_--help.golden @@ -0,0 +1,16 @@ +coder v0.0.0-devel + +USAGE: + coder provisioner keys create [flags] + + Create a new provisioner key + +OPTIONS: + -O, --org string, $CODER_ORGANIZATION + Select which organization (uuid or name) to use. + + -t, --tag string-array, $CODER_PROVISIONERD_TAGS + Tags to filter provisioner jobs by. + +——— +Run `coder --help` for a list of global options. diff --git a/enterprise/cli/testdata/coder_provisioner_keys_delete_--help.golden b/enterprise/cli/testdata/coder_provisioner_keys_delete_--help.golden new file mode 100644 index 0000000000000..a8aea08c75187 --- /dev/null +++ b/enterprise/cli/testdata/coder_provisioner_keys_delete_--help.golden @@ -0,0 +1,18 @@ +coder v0.0.0-devel + +USAGE: + coder provisioner keys delete [flags] + + Delete a provisioner key + + Aliases: rm + +OPTIONS: + -O, --org string, $CODER_ORGANIZATION + Select which organization (uuid or name) to use. + + -y, --yes bool + Bypass prompts. + +——— +Run `coder --help` for a list of global options. diff --git a/enterprise/cli/testdata/coder_provisioner_keys_list_--help.golden b/enterprise/cli/testdata/coder_provisioner_keys_list_--help.golden new file mode 100644 index 0000000000000..59bddf9f71991 --- /dev/null +++ b/enterprise/cli/testdata/coder_provisioner_keys_list_--help.golden @@ -0,0 +1,15 @@ +coder v0.0.0-devel + +USAGE: + coder provisioner keys list [flags] + + List provisioner keys in an organization + + Aliases: ls + +OPTIONS: + -O, --org string, $CODER_ORGANIZATION + Select which organization (uuid or name) to use. + +——— +Run `coder --help` for a list of global options. diff --git a/enterprise/cli/testdata/coder_provisioner_start_--help.golden b/enterprise/cli/testdata/coder_provisioner_start_--help.golden new file mode 100644 index 0000000000000..439a2d68ba038 --- /dev/null +++ b/enterprise/cli/testdata/coder_provisioner_start_--help.golden @@ -0,0 +1,58 @@ +coder v0.0.0-devel + +USAGE: + coder provisioner start [flags] + + Run a provisioner daemon + +OPTIONS: + -O, --org string, $CODER_ORGANIZATION + Select which organization (uuid or name) to use. + + -c, --cache-dir string, $CODER_CACHE_DIRECTORY (default: [cache dir]) + Directory to store cached data. + + --key string, $CODER_PROVISIONER_DAEMON_KEY + Provisioner key to authenticate with Coder server. + + --log-filter string-array, $CODER_PROVISIONER_DAEMON_LOG_FILTER + Filter debug logs by matching against a given regex. Use .* to match + all debug logs. + + --log-human string, $CODER_PROVISIONER_DAEMON_LOGGING_HUMAN (default: /dev/stderr) + Output human-readable logs to a given file. + + --log-json string, $CODER_PROVISIONER_DAEMON_LOGGING_JSON + Output JSON logs to a given file. + + --log-stackdriver string, $CODER_PROVISIONER_DAEMON_LOGGING_STACKDRIVER + Output Stackdriver compatible logs to a given file. + + --name string, $CODER_PROVISIONER_DAEMON_NAME + Name of this provisioner daemon. Defaults to the current hostname + without FQDN. + + --poll-interval duration, $CODER_PROVISIONERD_POLL_INTERVAL (default: 1s) + Deprecated and ignored. + + --poll-jitter duration, $CODER_PROVISIONERD_POLL_JITTER (default: 100ms) + Deprecated and ignored. + + --prometheus-address string, $CODER_PROMETHEUS_ADDRESS (default: 127.0.0.1:2112) + The bind address to serve prometheus metrics. + + --prometheus-enable bool, $CODER_PROMETHEUS_ENABLE (default: false) + Serve prometheus metrics on the address defined by prometheus address. + + --psk string, $CODER_PROVISIONER_DAEMON_PSK + Pre-shared key to authenticate with Coder server. + DEPRECATED: Use --key instead. + + -t, --tag string-array, $CODER_PROVISIONERD_TAGS + Tags to filter provisioner jobs by. + + --verbose bool, $CODER_PROVISIONER_DAEMON_VERBOSE (default: false) + Output debug-level logs. + +——— +Run `coder --help` for a list of global options.