diff --git a/cli/testdata/coder_provisioner_jobs_list_--help.golden b/cli/testdata/coder_provisioner_jobs_list_--help.golden
index 585e918c23e7b..bd29b7560ea6a 100644
--- a/cli/testdata/coder_provisioner_jobs_list_--help.golden
+++ b/cli/testdata/coder_provisioner_jobs_list_--help.golden
@@ -11,7 +11,7 @@ OPTIONS:
-O, --org string, $CODER_ORGANIZATION
Select which organization (uuid or name) to use.
- -c, --column [id|created at|started at|completed at|canceled at|error|error code|status|worker id|file id|tags|queue position|queue size|organization id|template version id|workspace build id|type|available workers|organization|queue] (default: created at,id,organization,status,type,queue,tags)
+ -c, --column [id|created at|started at|completed at|canceled at|error|error code|status|worker id|file id|tags|queue position|queue size|organization id|template version id|workspace build id|type|available workers|template version name|template id|template name|template display name|workspace id|workspace name|organization|queue] (default: created at,id,organization,status,type,queue,tags)
Columns to display in table output.
-l, --limit int, $CODER_PROVISIONER_JOB_LIST_LIMIT (default: 50)
diff --git a/cli/testdata/coder_provisioner_jobs_list_--output_json.golden b/cli/testdata/coder_provisioner_jobs_list_--output_json.golden
index a19683573bba2..9e1f56ba7bf17 100644
--- a/cli/testdata/coder_provisioner_jobs_list_--output_json.golden
+++ b/cli/testdata/coder_provisioner_jobs_list_--output_json.golden
@@ -18,6 +18,12 @@
"template_version_id": "============[version ID]============"
},
"type": "template_version_import",
+ "metadata": {
+ "template_version_name": "===========[version name]===========",
+ "template_id": "===========[template ID]============",
+ "template_name": "test-template",
+ "template_display_name": ""
+ },
"organization_name": "Coder"
},
{
@@ -39,6 +45,14 @@
"workspace_build_id": "========[workspace build ID]========"
},
"type": "workspace_build",
+ "metadata": {
+ "template_version_name": "===========[version name]===========",
+ "template_id": "===========[template ID]============",
+ "template_name": "test-template",
+ "template_display_name": "",
+ "workspace_id": "===========[workspace ID]===========",
+ "workspace_name": "test-workspace"
+ },
"organization_name": "Coder"
}
]
diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go
index 3d4ae52e993db..98c694ab4175d 100644
--- a/coderd/apidoc/docs.go
+++ b/coderd/apidoc/docs.go
@@ -13125,6 +13125,9 @@ const docTemplate = `{
"input": {
"$ref": "#/definitions/codersdk.ProvisionerJobInput"
},
+ "metadata": {
+ "$ref": "#/definitions/codersdk.ProvisionerJobMetadata"
+ },
"organization_id": {
"type": "string",
"format": "uuid"
@@ -13220,6 +13223,31 @@ const docTemplate = `{
}
}
},
+ "codersdk.ProvisionerJobMetadata": {
+ "type": "object",
+ "properties": {
+ "template_display_name": {
+ "type": "string"
+ },
+ "template_id": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "template_name": {
+ "type": "string"
+ },
+ "template_version_name": {
+ "type": "string"
+ },
+ "workspace_id": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "workspace_name": {
+ "type": "string"
+ }
+ }
+ },
"codersdk.ProvisionerJobStatus": {
"type": "string",
"enum": [
diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json
index c431f8eca5a50..afe36a8389899 100644
--- a/coderd/apidoc/swagger.json
+++ b/coderd/apidoc/swagger.json
@@ -11852,6 +11852,9 @@
"input": {
"$ref": "#/definitions/codersdk.ProvisionerJobInput"
},
+ "metadata": {
+ "$ref": "#/definitions/codersdk.ProvisionerJobMetadata"
+ },
"organization_id": {
"type": "string",
"format": "uuid"
@@ -11941,6 +11944,31 @@
}
}
},
+ "codersdk.ProvisionerJobMetadata": {
+ "type": "object",
+ "properties": {
+ "template_display_name": {
+ "type": "string"
+ },
+ "template_id": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "template_name": {
+ "type": "string"
+ },
+ "template_version_name": {
+ "type": "string"
+ },
+ "workspace_id": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "workspace_name": {
+ "type": "string"
+ }
+ }
+ },
"codersdk.ProvisionerJobStatus": {
"type": "string",
"enum": [
diff --git a/coderd/database/dbmem/dbmem.go b/coderd/database/dbmem/dbmem.go
index 6df49904d5cff..007362eab6196 100644
--- a/coderd/database/dbmem/dbmem.go
+++ b/coderd/database/dbmem/dbmem.go
@@ -4117,6 +4117,45 @@ func (q *FakeQuerier) GetProvisionerJobsByOrganizationAndStatusWithQueuePosition
QueuePosition: rowQP.QueuePosition,
QueueSize: rowQP.QueueSize,
}
+
+ // Start add metadata.
+ var input codersdk.ProvisionerJobInput
+ err := json.Unmarshal([]byte(job.Input), &input)
+ if err != nil {
+ return nil, err
+ }
+ templateVersionID := input.TemplateVersionID
+ if input.WorkspaceBuildID != nil {
+ workspaceBuild, err := q.getWorkspaceBuildByIDNoLock(ctx, *input.WorkspaceBuildID)
+ if err != nil {
+ return nil, err
+ }
+ workspace, err := q.getWorkspaceByIDNoLock(ctx, workspaceBuild.WorkspaceID)
+ if err != nil {
+ return nil, err
+ }
+ row.WorkspaceID = uuid.NullUUID{UUID: workspace.ID, Valid: true}
+ row.WorkspaceName = workspace.Name
+ if templateVersionID == nil {
+ templateVersionID = &workspaceBuild.TemplateVersionID
+ }
+ }
+ if templateVersionID != nil {
+ templateVersion, err := q.getTemplateVersionByIDNoLock(ctx, *templateVersionID)
+ if err != nil {
+ return nil, err
+ }
+ row.TemplateVersionName = templateVersion.Name
+ template, err := q.getTemplateByIDNoLock(ctx, templateVersion.TemplateID.UUID)
+ if err != nil {
+ return nil, err
+ }
+ row.TemplateID = uuid.NullUUID{UUID: template.ID, Valid: true}
+ row.TemplateName = template.Name
+ row.TemplateDisplayName = template.DisplayName
+ }
+ // End add metadata.
+
if row.QueuePosition > 0 {
var availableWorkers []database.ProvisionerDaemon
for _, daemon := range q.provisionerDaemons {
diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go
index 68e73a594e6fd..7778be9d777aa 100644
--- a/coderd/database/queries.sql.go
+++ b/coderd/database/queries.sql.go
@@ -6265,13 +6265,29 @@ SELECT
AND pj.organization_id = pd.organization_id
AND pj.provisioner = ANY(pd.provisioners)
AND provisioner_tagset_contains(pd.tags, pj.tags)
- ) AS available_workers
+ ) AS available_workers,
+ -- Include template and workspace information.
+ COALESCE(tv.name, '') AS template_version_name,
+ t.id AS template_id,
+ COALESCE(t.name, '') AS template_name,
+ COALESCE(t.display_name, '') AS template_display_name,
+ w.id AS workspace_id,
+ COALESCE(w.name, '') AS workspace_name
FROM
provisioner_jobs pj
LEFT JOIN
queue_position qp ON qp.id = pj.id
LEFT JOIN
queue_size qs ON TRUE
+LEFT JOIN
+ workspace_builds wb ON wb.id = CASE WHEN pj.input ? 'workspace_build_id' THEN (pj.input->>'workspace_build_id')::uuid END
+LEFT JOIN
+ workspaces w ON wb.workspace_id = w.id
+LEFT JOIN
+ -- We should always have a template version, either explicitly or implicitly via workspace build.
+ template_versions tv ON tv.id = CASE WHEN pj.input ? 'template_version_id' THEN (pj.input->>'template_version_id')::uuid ELSE wb.template_version_id END
+LEFT JOIN
+ templates t ON tv.template_id = t.id
WHERE
($1::uuid IS NULL OR pj.organization_id = $1)
AND (COALESCE(array_length($2::uuid[], 1), 0) = 0 OR pj.id = ANY($2::uuid[]))
@@ -6279,7 +6295,13 @@ WHERE
GROUP BY
pj.id,
qp.queue_position,
- qs.count
+ qs.count,
+ tv.name,
+ t.id,
+ t.name,
+ t.display_name,
+ w.id,
+ w.name
ORDER BY
pj.created_at DESC
LIMIT
@@ -6294,10 +6316,16 @@ type GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisionerPar
}
type GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisionerRow struct {
- ProvisionerJob ProvisionerJob `db:"provisioner_job" json:"provisioner_job"`
- QueuePosition int64 `db:"queue_position" json:"queue_position"`
- QueueSize int64 `db:"queue_size" json:"queue_size"`
- AvailableWorkers []uuid.UUID `db:"available_workers" json:"available_workers"`
+ ProvisionerJob ProvisionerJob `db:"provisioner_job" json:"provisioner_job"`
+ QueuePosition int64 `db:"queue_position" json:"queue_position"`
+ QueueSize int64 `db:"queue_size" json:"queue_size"`
+ AvailableWorkers []uuid.UUID `db:"available_workers" json:"available_workers"`
+ TemplateVersionName string `db:"template_version_name" json:"template_version_name"`
+ TemplateID uuid.NullUUID `db:"template_id" json:"template_id"`
+ TemplateName string `db:"template_name" json:"template_name"`
+ TemplateDisplayName string `db:"template_display_name" json:"template_display_name"`
+ WorkspaceID uuid.NullUUID `db:"workspace_id" json:"workspace_id"`
+ WorkspaceName string `db:"workspace_name" json:"workspace_name"`
}
func (q *sqlQuerier) GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisioner(ctx context.Context, arg GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisionerParams) ([]GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisionerRow, error) {
@@ -6337,6 +6365,12 @@ func (q *sqlQuerier) GetProvisionerJobsByOrganizationAndStatusWithQueuePositionA
&i.QueuePosition,
&i.QueueSize,
pq.Array(&i.AvailableWorkers),
+ &i.TemplateVersionName,
+ &i.TemplateID,
+ &i.TemplateName,
+ &i.TemplateDisplayName,
+ &i.WorkspaceID,
+ &i.WorkspaceName,
); err != nil {
return nil, err
}
diff --git a/coderd/database/queries/provisionerjobs.sql b/coderd/database/queries/provisionerjobs.sql
index e7078dcfbff15..bac03f1b4253e 100644
--- a/coderd/database/queries/provisionerjobs.sql
+++ b/coderd/database/queries/provisionerjobs.sql
@@ -130,13 +130,29 @@ SELECT
AND pj.organization_id = pd.organization_id
AND pj.provisioner = ANY(pd.provisioners)
AND provisioner_tagset_contains(pd.tags, pj.tags)
- ) AS available_workers
+ ) AS available_workers,
+ -- Include template and workspace information.
+ COALESCE(tv.name, '') AS template_version_name,
+ t.id AS template_id,
+ COALESCE(t.name, '') AS template_name,
+ COALESCE(t.display_name, '') AS template_display_name,
+ w.id AS workspace_id,
+ COALESCE(w.name, '') AS workspace_name
FROM
provisioner_jobs pj
LEFT JOIN
queue_position qp ON qp.id = pj.id
LEFT JOIN
queue_size qs ON TRUE
+LEFT JOIN
+ workspace_builds wb ON wb.id = CASE WHEN pj.input ? 'workspace_build_id' THEN (pj.input->>'workspace_build_id')::uuid END
+LEFT JOIN
+ workspaces w ON wb.workspace_id = w.id
+LEFT JOIN
+ -- We should always have a template version, either explicitly or implicitly via workspace build.
+ template_versions tv ON tv.id = CASE WHEN pj.input ? 'template_version_id' THEN (pj.input->>'template_version_id')::uuid ELSE wb.template_version_id END
+LEFT JOIN
+ templates t ON tv.template_id = t.id
WHERE
(sqlc.narg('organization_id')::uuid IS NULL OR pj.organization_id = @organization_id)
AND (COALESCE(array_length(@ids::uuid[], 1), 0) = 0 OR pj.id = ANY(@ids::uuid[]))
@@ -144,7 +160,13 @@ WHERE
GROUP BY
pj.id,
qp.queue_position,
- qs.count
+ qs.count,
+ tv.name,
+ t.id,
+ t.name,
+ t.display_name,
+ w.id,
+ w.name
ORDER BY
pj.created_at DESC
LIMIT
diff --git a/coderd/provisionerjobs.go b/coderd/provisionerjobs.go
index 647274d9c29f7..b8eccdb9c4d3c 100644
--- a/coderd/provisionerjobs.go
+++ b/coderd/provisionerjobs.go
@@ -388,6 +388,16 @@ func convertProvisionerJobWithQueuePosition(pj database.GetProvisionerJobsByOrga
QueueSize: pj.QueueSize,
})
job.AvailableWorkers = pj.AvailableWorkers
+ job.Metadata = &codersdk.ProvisionerJobMetadata{
+ TemplateVersionName: pj.TemplateVersionName,
+ TemplateID: pj.TemplateID.UUID,
+ TemplateName: pj.TemplateName,
+ TemplateDisplayName: pj.TemplateDisplayName,
+ WorkspaceName: pj.WorkspaceName,
+ }
+ if pj.WorkspaceID.Valid {
+ job.Metadata.WorkspaceID = &pj.WorkspaceID.UUID
+ }
return job
}
diff --git a/coderd/provisionerjobs_test.go b/coderd/provisionerjobs_test.go
index 098e118327c40..ba5f31e6894a3 100644
--- a/coderd/provisionerjobs_test.go
+++ b/coderd/provisionerjobs_test.go
@@ -8,6 +8,7 @@ import (
"time"
"github.com/google/uuid"
+ "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/coder/coder/v2/coderd/coderdtest"
@@ -72,13 +73,45 @@ func TestProvisionerJobs(t *testing.T) {
t.Run("Single", func(t *testing.T) {
t.Parallel()
- t.Run("OK", func(t *testing.T) {
+ t.Run("Workspace", func(t *testing.T) {
t.Parallel()
- ctx := testutil.Context(t, testutil.WaitMedium)
- // Note this calls the single job endpoint.
- job2, err := templateAdminClient.OrganizationProvisionerJob(ctx, owner.OrganizationID, job.ID)
- require.NoError(t, err)
- require.Equal(t, job.ID, job2.ID)
+ t.Run("OK", func(t *testing.T) {
+ t.Parallel()
+ ctx := testutil.Context(t, testutil.WaitMedium)
+ // Note this calls the single job endpoint.
+ job2, err := templateAdminClient.OrganizationProvisionerJob(ctx, owner.OrganizationID, job.ID)
+ require.NoError(t, err)
+ require.Equal(t, job.ID, job2.ID)
+
+ // Verify that job metadata is correct.
+ assert.Equal(t, job2.Metadata, &codersdk.ProvisionerJobMetadata{
+ TemplateVersionName: version.Name,
+ TemplateID: template.ID,
+ TemplateName: template.Name,
+ TemplateDisplayName: template.DisplayName,
+ WorkspaceID: &w.ID,
+ WorkspaceName: w.Name,
+ })
+ })
+ })
+ t.Run("Template Import", func(t *testing.T) {
+ t.Parallel()
+ t.Run("OK", func(t *testing.T) {
+ t.Parallel()
+ ctx := testutil.Context(t, testutil.WaitMedium)
+ // Note this calls the single job endpoint.
+ job2, err := templateAdminClient.OrganizationProvisionerJob(ctx, owner.OrganizationID, version.Job.ID)
+ require.NoError(t, err)
+ require.Equal(t, version.Job.ID, job2.ID)
+
+ // Verify that job metadata is correct.
+ assert.Equal(t, job2.Metadata, &codersdk.ProvisionerJobMetadata{
+ TemplateVersionName: version.Name,
+ TemplateID: template.ID,
+ TemplateName: template.Name,
+ TemplateDisplayName: template.DisplayName,
+ })
+ })
})
t.Run("Missing", func(t *testing.T) {
t.Parallel()
diff --git a/codersdk/provisionerdaemons.go b/codersdk/provisionerdaemons.go
index 98c3252dc859a..5a93ba9fcaae4 100644
--- a/codersdk/provisionerdaemons.go
+++ b/codersdk/provisionerdaemons.go
@@ -131,6 +131,16 @@ type ProvisionerJobInput struct {
Error string `json:"error,omitempty" table:"-"`
}
+// ProvisionerJobMetadata contains metadata for the job.
+type ProvisionerJobMetadata struct {
+ TemplateVersionName string `json:"template_version_name" table:"template version name"`
+ TemplateID uuid.UUID `json:"template_id" format:"uuid" table:"template id"`
+ TemplateName string `json:"template_name" table:"template name"`
+ TemplateDisplayName string `json:"template_display_name" table:"template display name"`
+ WorkspaceID *uuid.UUID `json:"workspace_id,omitempty" format:"uuid" table:"workspace id"`
+ WorkspaceName string `json:"workspace_name,omitempty" table:"workspace name"`
+}
+
// ProvisionerJobType represents the type of job.
type ProvisionerJobType string
@@ -155,23 +165,24 @@ func JobIsMissingParameterErrorCode(code JobErrorCode) bool {
// ProvisionerJob describes the job executed by the provisioning daemon.
type ProvisionerJob struct {
- ID uuid.UUID `json:"id" format:"uuid" table:"id"`
- CreatedAt time.Time `json:"created_at" format:"date-time" table:"created at"`
- StartedAt *time.Time `json:"started_at,omitempty" format:"date-time" table:"started at"`
- CompletedAt *time.Time `json:"completed_at,omitempty" format:"date-time" table:"completed at"`
- CanceledAt *time.Time `json:"canceled_at,omitempty" format:"date-time" table:"canceled at"`
- Error string `json:"error,omitempty" table:"error"`
- ErrorCode JobErrorCode `json:"error_code,omitempty" enums:"REQUIRED_TEMPLATE_VARIABLES" table:"error code"`
- Status ProvisionerJobStatus `json:"status" enums:"pending,running,succeeded,canceling,canceled,failed" table:"status"`
- WorkerID *uuid.UUID `json:"worker_id,omitempty" format:"uuid" table:"worker id"`
- FileID uuid.UUID `json:"file_id" format:"uuid" table:"file id"`
- Tags map[string]string `json:"tags" table:"tags"`
- QueuePosition int `json:"queue_position" table:"queue position"`
- QueueSize int `json:"queue_size" table:"queue size"`
- OrganizationID uuid.UUID `json:"organization_id" format:"uuid" table:"organization id"`
- Input ProvisionerJobInput `json:"input" table:"input,recursive_inline"`
- Type ProvisionerJobType `json:"type" table:"type"`
- AvailableWorkers []uuid.UUID `json:"available_workers,omitempty" format:"uuid" table:"available workers"`
+ ID uuid.UUID `json:"id" format:"uuid" table:"id"`
+ CreatedAt time.Time `json:"created_at" format:"date-time" table:"created at"`
+ StartedAt *time.Time `json:"started_at,omitempty" format:"date-time" table:"started at"`
+ CompletedAt *time.Time `json:"completed_at,omitempty" format:"date-time" table:"completed at"`
+ CanceledAt *time.Time `json:"canceled_at,omitempty" format:"date-time" table:"canceled at"`
+ Error string `json:"error,omitempty" table:"error"`
+ ErrorCode JobErrorCode `json:"error_code,omitempty" enums:"REQUIRED_TEMPLATE_VARIABLES" table:"error code"`
+ Status ProvisionerJobStatus `json:"status" enums:"pending,running,succeeded,canceling,canceled,failed" table:"status"`
+ WorkerID *uuid.UUID `json:"worker_id,omitempty" format:"uuid" table:"worker id"`
+ FileID uuid.UUID `json:"file_id" format:"uuid" table:"file id"`
+ Tags map[string]string `json:"tags" table:"tags"`
+ QueuePosition int `json:"queue_position" table:"queue position"`
+ QueueSize int `json:"queue_size" table:"queue size"`
+ OrganizationID uuid.UUID `json:"organization_id" format:"uuid" table:"organization id"`
+ Input ProvisionerJobInput `json:"input" table:"input,recursive_inline"`
+ Type ProvisionerJobType `json:"type" table:"type"`
+ AvailableWorkers []uuid.UUID `json:"available_workers,omitempty" format:"uuid" table:"available workers"`
+ Metadata *ProvisionerJobMetadata `json:"metadata,omitempty" table:"metadata,recursive_inline"`
}
// ProvisionerJobLog represents the provisioner log entry annotated with source and level.
diff --git a/docs/reference/api/builds.md b/docs/reference/api/builds.md
index 8c17b95a4b7a4..73fd35bb4f270 100644
--- a/docs/reference/api/builds.md
+++ b/docs/reference/api/builds.md
@@ -50,6 +50,14 @@ curl -X GET http://coder-server:8080/api/v2/users/{user}/workspace/{workspacenam
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -255,6 +263,14 @@ curl -X GET http://coder-server:8080/api/v2/workspacebuilds/{workspacebuild} \
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -902,6 +918,14 @@ curl -X GET http://coder-server:8080/api/v2/workspacebuilds/{workspacebuild}/sta
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -1180,6 +1204,14 @@ curl -X GET http://coder-server:8080/api/v2/workspaces/{workspace}/builds \
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -1363,6 +1395,13 @@ Status Code **200**
| `»»» error` | string | false | | |
| `»»» template_version_id` | string(uuid) | false | | |
| `»»» workspace_build_id` | string(uuid) | false | | |
+| `»» metadata` | [codersdk.ProvisionerJobMetadata](schemas.md#codersdkprovisionerjobmetadata) | false | | |
+| `»»» template_display_name` | string | false | | |
+| `»»» template_id` | string(uuid) | false | | |
+| `»»» template_name` | string | false | | |
+| `»»» template_version_name` | string | false | | |
+| `»»» workspace_id` | string(uuid) | false | | |
+| `»»» workspace_name` | string | false | | |
| `»» organization_id` | string(uuid) | false | | |
| `»» queue_position` | integer | false | | |
| `»» queue_size` | integer | false | | |
@@ -1605,6 +1644,14 @@ curl -X POST http://coder-server:8080/api/v2/workspaces/{workspace}/builds \
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
diff --git a/docs/reference/api/organizations.md b/docs/reference/api/organizations.md
index 32789743afc38..52442b6258559 100644
--- a/docs/reference/api/organizations.md
+++ b/docs/reference/api/organizations.md
@@ -405,6 +405,14 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -430,30 +438,37 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi
Status Code **200**
-| Name | Type | Required | Restrictions | Description |
-|--------------------------|--------------------------------------------------------------------------|----------|--------------|-------------|
-| `[array item]` | array | false | | |
-| `» available_workers` | array | false | | |
-| `» canceled_at` | string(date-time) | false | | |
-| `» completed_at` | string(date-time) | false | | |
-| `» created_at` | string(date-time) | false | | |
-| `» error` | string | false | | |
-| `» error_code` | [codersdk.JobErrorCode](schemas.md#codersdkjoberrorcode) | false | | |
-| `» file_id` | string(uuid) | false | | |
-| `» id` | string(uuid) | false | | |
-| `» input` | [codersdk.ProvisionerJobInput](schemas.md#codersdkprovisionerjobinput) | false | | |
-| `»» error` | string | false | | |
-| `»» template_version_id` | string(uuid) | false | | |
-| `»» workspace_build_id` | string(uuid) | false | | |
-| `» organization_id` | string(uuid) | false | | |
-| `» queue_position` | integer | false | | |
-| `» queue_size` | integer | false | | |
-| `» started_at` | string(date-time) | false | | |
-| `» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | |
-| `» tags` | object | false | | |
-| `»» [any property]` | string | false | | |
-| `» type` | [codersdk.ProvisionerJobType](schemas.md#codersdkprovisionerjobtype) | false | | |
-| `» worker_id` | string(uuid) | false | | |
+| Name | Type | Required | Restrictions | Description |
+|----------------------------|------------------------------------------------------------------------------|----------|--------------|-------------|
+| `[array item]` | array | false | | |
+| `» available_workers` | array | false | | |
+| `» canceled_at` | string(date-time) | false | | |
+| `» completed_at` | string(date-time) | false | | |
+| `» created_at` | string(date-time) | false | | |
+| `» error` | string | false | | |
+| `» error_code` | [codersdk.JobErrorCode](schemas.md#codersdkjoberrorcode) | false | | |
+| `» file_id` | string(uuid) | false | | |
+| `» id` | string(uuid) | false | | |
+| `» input` | [codersdk.ProvisionerJobInput](schemas.md#codersdkprovisionerjobinput) | false | | |
+| `»» error` | string | false | | |
+| `»» template_version_id` | string(uuid) | false | | |
+| `»» workspace_build_id` | string(uuid) | false | | |
+| `» metadata` | [codersdk.ProvisionerJobMetadata](schemas.md#codersdkprovisionerjobmetadata) | false | | |
+| `»» template_display_name` | string | false | | |
+| `»» template_id` | string(uuid) | false | | |
+| `»» template_name` | string | false | | |
+| `»» template_version_name` | string | false | | |
+| `»» workspace_id` | string(uuid) | false | | |
+| `»» workspace_name` | string | false | | |
+| `» organization_id` | string(uuid) | false | | |
+| `» queue_position` | integer | false | | |
+| `» queue_size` | integer | false | | |
+| `» started_at` | string(date-time) | false | | |
+| `» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | |
+| `» tags` | object | false | | |
+| `»» [any property]` | string | false | | |
+| `» type` | [codersdk.ProvisionerJobType](schemas.md#codersdkprovisionerjobtype) | false | | |
+| `» worker_id` | string(uuid) | false | | |
#### Enumerated Values
@@ -513,6 +528,14 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
diff --git a/docs/reference/api/schemas.md b/docs/reference/api/schemas.md
index 1af6ac7285d04..082b3f3a1f19f 100644
--- a/docs/reference/api/schemas.md
+++ b/docs/reference/api/schemas.md
@@ -4602,6 +4602,14 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -4618,26 +4626,27 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith
### Properties
-| Name | Type | Required | Restrictions | Description |
-|---------------------|----------------------------------------------------------------|----------|--------------|-------------|
-| `available_workers` | array of string | false | | |
-| `canceled_at` | string | false | | |
-| `completed_at` | string | false | | |
-| `created_at` | string | false | | |
-| `error` | string | false | | |
-| `error_code` | [codersdk.JobErrorCode](#codersdkjoberrorcode) | false | | |
-| `file_id` | string | false | | |
-| `id` | string | false | | |
-| `input` | [codersdk.ProvisionerJobInput](#codersdkprovisionerjobinput) | false | | |
-| `organization_id` | string | false | | |
-| `queue_position` | integer | false | | |
-| `queue_size` | integer | false | | |
-| `started_at` | string | false | | |
-| `status` | [codersdk.ProvisionerJobStatus](#codersdkprovisionerjobstatus) | false | | |
-| `tags` | object | false | | |
-| » `[any property]` | string | false | | |
-| `type` | [codersdk.ProvisionerJobType](#codersdkprovisionerjobtype) | false | | |
-| `worker_id` | string | false | | |
+| Name | Type | Required | Restrictions | Description |
+|---------------------|--------------------------------------------------------------------|----------|--------------|-------------|
+| `available_workers` | array of string | false | | |
+| `canceled_at` | string | false | | |
+| `completed_at` | string | false | | |
+| `created_at` | string | false | | |
+| `error` | string | false | | |
+| `error_code` | [codersdk.JobErrorCode](#codersdkjoberrorcode) | false | | |
+| `file_id` | string | false | | |
+| `id` | string | false | | |
+| `input` | [codersdk.ProvisionerJobInput](#codersdkprovisionerjobinput) | false | | |
+| `metadata` | [codersdk.ProvisionerJobMetadata](#codersdkprovisionerjobmetadata) | false | | |
+| `organization_id` | string | false | | |
+| `queue_position` | integer | false | | |
+| `queue_size` | integer | false | | |
+| `started_at` | string | false | | |
+| `status` | [codersdk.ProvisionerJobStatus](#codersdkprovisionerjobstatus) | false | | |
+| `tags` | object | false | | |
+| » `[any property]` | string | false | | |
+| `type` | [codersdk.ProvisionerJobType](#codersdkprovisionerjobtype) | false | | |
+| `worker_id` | string | false | | |
#### Enumerated Values
@@ -4703,6 +4712,30 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith
| `log_level` | `warn` |
| `log_level` | `error` |
+## codersdk.ProvisionerJobMetadata
+
+```json
+{
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+}
+```
+
+### Properties
+
+| Name | Type | Required | Restrictions | Description |
+|-------------------------|--------|----------|--------------|-------------|
+| `template_display_name` | string | false | | |
+| `template_id` | string | false | | |
+| `template_name` | string | false | | |
+| `template_version_name` | string | false | | |
+| `workspace_id` | string | false | | |
+| `workspace_name` | string | false | | |
+
## codersdk.ProvisionerJobStatus
```json
@@ -6101,6 +6134,14 @@ Restarts will only happen on weekdays in this list on weeks which line up with W
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -7166,6 +7207,14 @@ If the schedule is empty, the user will be updated to use the default schedule.|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -7908,6 +7957,14 @@ If the schedule is empty, the user will be updated to use the default schedule.|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -8572,6 +8629,14 @@ If the schedule is empty, the user will be updated to use the default schedule.|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
diff --git a/docs/reference/api/templates.md b/docs/reference/api/templates.md
index 6378c5f233fb8..49a4b3b45c196 100644
--- a/docs/reference/api/templates.md
+++ b/docs/reference/api/templates.md
@@ -462,6 +462,14 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/templat
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -550,6 +558,14 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/templat
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -662,6 +678,14 @@ curl -X POST http://coder-server:8080/api/v2/organizations/{organization}/templa
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -1202,6 +1226,14 @@ curl -X GET http://coder-server:8080/api/v2/templates/{template}/versions \
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -1242,49 +1274,56 @@ curl -X GET http://coder-server:8080/api/v2/templates/{template}/versions \
Status Code **200**
-| Name | Type | Required | Restrictions | Description |
-|---------------------------|--------------------------------------------------------------------------|----------|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `[array item]` | array | false | | |
-| `» archived` | boolean | false | | |
-| `» created_at` | string(date-time) | false | | |
-| `» created_by` | [codersdk.MinimalUser](schemas.md#codersdkminimaluser) | false | | |
-| `»» avatar_url` | string(uri) | false | | |
-| `»» id` | string(uuid) | true | | |
-| `»» username` | string | true | | |
-| `» id` | string(uuid) | false | | |
-| `» job` | [codersdk.ProvisionerJob](schemas.md#codersdkprovisionerjob) | false | | |
-| `»» available_workers` | array | false | | |
-| `»» canceled_at` | string(date-time) | false | | |
-| `»» completed_at` | string(date-time) | false | | |
-| `»» created_at` | string(date-time) | false | | |
-| `»» error` | string | false | | |
-| `»» error_code` | [codersdk.JobErrorCode](schemas.md#codersdkjoberrorcode) | false | | |
-| `»» file_id` | string(uuid) | false | | |
-| `»» id` | string(uuid) | false | | |
-| `»» input` | [codersdk.ProvisionerJobInput](schemas.md#codersdkprovisionerjobinput) | false | | |
-| `»»» error` | string | false | | |
-| `»»» template_version_id` | string(uuid) | false | | |
-| `»»» workspace_build_id` | string(uuid) | false | | |
-| `»» organization_id` | string(uuid) | false | | |
-| `»» queue_position` | integer | false | | |
-| `»» queue_size` | integer | false | | |
-| `»» started_at` | string(date-time) | false | | |
-| `»» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | |
-| `»» tags` | object | false | | |
-| `»»» [any property]` | string | false | | |
-| `»» type` | [codersdk.ProvisionerJobType](schemas.md#codersdkprovisionerjobtype) | false | | |
-| `»» worker_id` | string(uuid) | false | | |
-| `» matched_provisioners` | [codersdk.MatchedProvisioners](schemas.md#codersdkmatchedprovisioners) | false | | |
-| `»» available` | integer | false | | Available is the number of provisioner daemons that are available to take jobs. This may be less than the count if some provisioners are busy or have been stopped. |
-| `»» count` | integer | false | | Count is the number of provisioner daemons that matched the given tags. If the count is 0, it means no provisioner daemons matched the requested tags. |
-| `»» most_recently_seen` | string(date-time) | false | | Most recently seen is the most recently seen time of the set of matched provisioners. If no provisioners matched, this field will be null. |
-| `» message` | string | false | | |
-| `» name` | string | false | | |
-| `» organization_id` | string(uuid) | false | | |
-| `» readme` | string | false | | |
-| `» template_id` | string(uuid) | false | | |
-| `» updated_at` | string(date-time) | false | | |
-| `» warnings` | array | false | | |
+| Name | Type | Required | Restrictions | Description |
+|-----------------------------|------------------------------------------------------------------------------|----------|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `[array item]` | array | false | | |
+| `» archived` | boolean | false | | |
+| `» created_at` | string(date-time) | false | | |
+| `» created_by` | [codersdk.MinimalUser](schemas.md#codersdkminimaluser) | false | | |
+| `»» avatar_url` | string(uri) | false | | |
+| `»» id` | string(uuid) | true | | |
+| `»» username` | string | true | | |
+| `» id` | string(uuid) | false | | |
+| `» job` | [codersdk.ProvisionerJob](schemas.md#codersdkprovisionerjob) | false | | |
+| `»» available_workers` | array | false | | |
+| `»» canceled_at` | string(date-time) | false | | |
+| `»» completed_at` | string(date-time) | false | | |
+| `»» created_at` | string(date-time) | false | | |
+| `»» error` | string | false | | |
+| `»» error_code` | [codersdk.JobErrorCode](schemas.md#codersdkjoberrorcode) | false | | |
+| `»» file_id` | string(uuid) | false | | |
+| `»» id` | string(uuid) | false | | |
+| `»» input` | [codersdk.ProvisionerJobInput](schemas.md#codersdkprovisionerjobinput) | false | | |
+| `»»» error` | string | false | | |
+| `»»» template_version_id` | string(uuid) | false | | |
+| `»»» workspace_build_id` | string(uuid) | false | | |
+| `»» metadata` | [codersdk.ProvisionerJobMetadata](schemas.md#codersdkprovisionerjobmetadata) | false | | |
+| `»»» template_display_name` | string | false | | |
+| `»»» template_id` | string(uuid) | false | | |
+| `»»» template_name` | string | false | | |
+| `»»» template_version_name` | string | false | | |
+| `»»» workspace_id` | string(uuid) | false | | |
+| `»»» workspace_name` | string | false | | |
+| `»» organization_id` | string(uuid) | false | | |
+| `»» queue_position` | integer | false | | |
+| `»» queue_size` | integer | false | | |
+| `»» started_at` | string(date-time) | false | | |
+| `»» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | |
+| `»» tags` | object | false | | |
+| `»»» [any property]` | string | false | | |
+| `»» type` | [codersdk.ProvisionerJobType](schemas.md#codersdkprovisionerjobtype) | false | | |
+| `»» worker_id` | string(uuid) | false | | |
+| `» matched_provisioners` | [codersdk.MatchedProvisioners](schemas.md#codersdkmatchedprovisioners) | false | | |
+| `»» available` | integer | false | | Available is the number of provisioner daemons that are available to take jobs. This may be less than the count if some provisioners are busy or have been stopped. |
+| `»» count` | integer | false | | Count is the number of provisioner daemons that matched the given tags. If the count is 0, it means no provisioner daemons matched the requested tags. |
+| `»» most_recently_seen` | string(date-time) | false | | Most recently seen is the most recently seen time of the set of matched provisioners. If no provisioners matched, this field will be null. |
+| `» message` | string | false | | |
+| `» name` | string | false | | |
+| `» organization_id` | string(uuid) | false | | |
+| `» readme` | string | false | | |
+| `» template_id` | string(uuid) | false | | |
+| `» updated_at` | string(date-time) | false | | |
+| `» warnings` | array | false | | |
#### Enumerated Values
@@ -1462,6 +1501,14 @@ curl -X GET http://coder-server:8080/api/v2/templates/{template}/versions/{templ
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -1502,49 +1549,56 @@ curl -X GET http://coder-server:8080/api/v2/templates/{template}/versions/{templ
Status Code **200**
-| Name | Type | Required | Restrictions | Description |
-|---------------------------|--------------------------------------------------------------------------|----------|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `[array item]` | array | false | | |
-| `» archived` | boolean | false | | |
-| `» created_at` | string(date-time) | false | | |
-| `» created_by` | [codersdk.MinimalUser](schemas.md#codersdkminimaluser) | false | | |
-| `»» avatar_url` | string(uri) | false | | |
-| `»» id` | string(uuid) | true | | |
-| `»» username` | string | true | | |
-| `» id` | string(uuid) | false | | |
-| `» job` | [codersdk.ProvisionerJob](schemas.md#codersdkprovisionerjob) | false | | |
-| `»» available_workers` | array | false | | |
-| `»» canceled_at` | string(date-time) | false | | |
-| `»» completed_at` | string(date-time) | false | | |
-| `»» created_at` | string(date-time) | false | | |
-| `»» error` | string | false | | |
-| `»» error_code` | [codersdk.JobErrorCode](schemas.md#codersdkjoberrorcode) | false | | |
-| `»» file_id` | string(uuid) | false | | |
-| `»» id` | string(uuid) | false | | |
-| `»» input` | [codersdk.ProvisionerJobInput](schemas.md#codersdkprovisionerjobinput) | false | | |
-| `»»» error` | string | false | | |
-| `»»» template_version_id` | string(uuid) | false | | |
-| `»»» workspace_build_id` | string(uuid) | false | | |
-| `»» organization_id` | string(uuid) | false | | |
-| `»» queue_position` | integer | false | | |
-| `»» queue_size` | integer | false | | |
-| `»» started_at` | string(date-time) | false | | |
-| `»» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | |
-| `»» tags` | object | false | | |
-| `»»» [any property]` | string | false | | |
-| `»» type` | [codersdk.ProvisionerJobType](schemas.md#codersdkprovisionerjobtype) | false | | |
-| `»» worker_id` | string(uuid) | false | | |
-| `» matched_provisioners` | [codersdk.MatchedProvisioners](schemas.md#codersdkmatchedprovisioners) | false | | |
-| `»» available` | integer | false | | Available is the number of provisioner daemons that are available to take jobs. This may be less than the count if some provisioners are busy or have been stopped. |
-| `»» count` | integer | false | | Count is the number of provisioner daemons that matched the given tags. If the count is 0, it means no provisioner daemons matched the requested tags. |
-| `»» most_recently_seen` | string(date-time) | false | | Most recently seen is the most recently seen time of the set of matched provisioners. If no provisioners matched, this field will be null. |
-| `» message` | string | false | | |
-| `» name` | string | false | | |
-| `» organization_id` | string(uuid) | false | | |
-| `» readme` | string | false | | |
-| `» template_id` | string(uuid) | false | | |
-| `» updated_at` | string(date-time) | false | | |
-| `» warnings` | array | false | | |
+| Name | Type | Required | Restrictions | Description |
+|-----------------------------|------------------------------------------------------------------------------|----------|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `[array item]` | array | false | | |
+| `» archived` | boolean | false | | |
+| `» created_at` | string(date-time) | false | | |
+| `» created_by` | [codersdk.MinimalUser](schemas.md#codersdkminimaluser) | false | | |
+| `»» avatar_url` | string(uri) | false | | |
+| `»» id` | string(uuid) | true | | |
+| `»» username` | string | true | | |
+| `» id` | string(uuid) | false | | |
+| `» job` | [codersdk.ProvisionerJob](schemas.md#codersdkprovisionerjob) | false | | |
+| `»» available_workers` | array | false | | |
+| `»» canceled_at` | string(date-time) | false | | |
+| `»» completed_at` | string(date-time) | false | | |
+| `»» created_at` | string(date-time) | false | | |
+| `»» error` | string | false | | |
+| `»» error_code` | [codersdk.JobErrorCode](schemas.md#codersdkjoberrorcode) | false | | |
+| `»» file_id` | string(uuid) | false | | |
+| `»» id` | string(uuid) | false | | |
+| `»» input` | [codersdk.ProvisionerJobInput](schemas.md#codersdkprovisionerjobinput) | false | | |
+| `»»» error` | string | false | | |
+| `»»» template_version_id` | string(uuid) | false | | |
+| `»»» workspace_build_id` | string(uuid) | false | | |
+| `»» metadata` | [codersdk.ProvisionerJobMetadata](schemas.md#codersdkprovisionerjobmetadata) | false | | |
+| `»»» template_display_name` | string | false | | |
+| `»»» template_id` | string(uuid) | false | | |
+| `»»» template_name` | string | false | | |
+| `»»» template_version_name` | string | false | | |
+| `»»» workspace_id` | string(uuid) | false | | |
+| `»»» workspace_name` | string | false | | |
+| `»» organization_id` | string(uuid) | false | | |
+| `»» queue_position` | integer | false | | |
+| `»» queue_size` | integer | false | | |
+| `»» started_at` | string(date-time) | false | | |
+| `»» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | |
+| `»» tags` | object | false | | |
+| `»»» [any property]` | string | false | | |
+| `»» type` | [codersdk.ProvisionerJobType](schemas.md#codersdkprovisionerjobtype) | false | | |
+| `»» worker_id` | string(uuid) | false | | |
+| `» matched_provisioners` | [codersdk.MatchedProvisioners](schemas.md#codersdkmatchedprovisioners) | false | | |
+| `»» available` | integer | false | | Available is the number of provisioner daemons that are available to take jobs. This may be less than the count if some provisioners are busy or have been stopped. |
+| `»» count` | integer | false | | Count is the number of provisioner daemons that matched the given tags. If the count is 0, it means no provisioner daemons matched the requested tags. |
+| `»» most_recently_seen` | string(date-time) | false | | Most recently seen is the most recently seen time of the set of matched provisioners. If no provisioners matched, this field will be null. |
+| `» message` | string | false | | |
+| `» name` | string | false | | |
+| `» organization_id` | string(uuid) | false | | |
+| `» readme` | string | false | | |
+| `» template_id` | string(uuid) | false | | |
+| `» updated_at` | string(date-time) | false | | |
+| `» warnings` | array | false | | |
#### Enumerated Values
@@ -1612,6 +1666,14 @@ curl -X GET http://coder-server:8080/api/v2/templateversions/{templateversion} \
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -1709,6 +1771,14 @@ curl -X PATCH http://coder-server:8080/api/v2/templateversions/{templateversion}
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -1896,6 +1966,14 @@ curl -X POST http://coder-server:8080/api/v2/templateversions/{templateversion}/
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -1959,6 +2037,14 @@ curl -X GET http://coder-server:8080/api/v2/templateversions/{templateversion}/d
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
diff --git a/docs/reference/api/workspaces.md b/docs/reference/api/workspaces.md
index e39e553927bf0..680dec178bf4e 100644
--- a/docs/reference/api/workspaces.md
+++ b/docs/reference/api/workspaces.md
@@ -91,6 +91,14 @@ of the template will be used.
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -332,6 +340,14 @@ curl -X GET http://coder-server:8080/api/v2/users/{user}/workspace/{workspacenam
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -597,6 +613,14 @@ of the template will be used.
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -841,6 +865,14 @@ curl -X GET http://coder-server:8080/api/v2/workspaces \
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -1079,6 +1111,14 @@ curl -X GET http://coder-server:8080/api/v2/workspaces/{workspace} \
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
@@ -1436,6 +1476,14 @@ curl -X PUT http://coder-server:8080/api/v2/workspaces/{workspace}/dormant \
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
},
+ "metadata": {
+ "template_display_name": "string",
+ "template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
+ "template_name": "string",
+ "template_version_name": "string",
+ "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
+ "workspace_name": "string"
+ },
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
"queue_position": 0,
"queue_size": 0,
diff --git a/docs/reference/cli/provisioner_jobs_list.md b/docs/reference/cli/provisioner_jobs_list.md
index 03e187b1c6720..ed16448459d7b 100644
--- a/docs/reference/cli/provisioner_jobs_list.md
+++ b/docs/reference/cli/provisioner_jobs_list.md
@@ -45,10 +45,10 @@ Select which organization (uuid or name) to use.
### -c, --column
-| | |
-|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Type | [id\|created at\|started at\|completed at\|canceled at\|error\|error code\|status\|worker id\|file id\|tags\|queue position\|queue size\|organization id\|template version id\|workspace build id\|type\|available workers\|organization\|queue]
|
-| Default | created at,id,organization,status,type,queue,tags
|
+| | |
+|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Type | [id\|created at\|started at\|completed at\|canceled at\|error\|error code\|status\|worker id\|file id\|tags\|queue position\|queue size\|organization id\|template version id\|workspace build id\|type\|available workers\|template version name\|template id\|template name\|template display name\|workspace id\|workspace name\|organization\|queue]
|
+| Default | created at,id,organization,status,type,queue,tags
|
Columns to display in table output.
diff --git a/enterprise/cli/testdata/coder_provisioner_jobs_list_--help.golden b/enterprise/cli/testdata/coder_provisioner_jobs_list_--help.golden
index 585e918c23e7b..bd29b7560ea6a 100644
--- a/enterprise/cli/testdata/coder_provisioner_jobs_list_--help.golden
+++ b/enterprise/cli/testdata/coder_provisioner_jobs_list_--help.golden
@@ -11,7 +11,7 @@ OPTIONS:
-O, --org string, $CODER_ORGANIZATION
Select which organization (uuid or name) to use.
- -c, --column [id|created at|started at|completed at|canceled at|error|error code|status|worker id|file id|tags|queue position|queue size|organization id|template version id|workspace build id|type|available workers|organization|queue] (default: created at,id,organization,status,type,queue,tags)
+ -c, --column [id|created at|started at|completed at|canceled at|error|error code|status|worker id|file id|tags|queue position|queue size|organization id|template version id|workspace build id|type|available workers|template version name|template id|template name|template display name|workspace id|workspace name|organization|queue] (default: created at,id,organization,status,type,queue,tags)
Columns to display in table output.
-l, --limit int, $CODER_PROVISIONER_JOB_LIST_LIMIT (default: 50)
diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts
index 58375a98370a0..2e7732c525c42 100644
--- a/site/src/api/typesGenerated.ts
+++ b/site/src/api/typesGenerated.ts
@@ -1638,6 +1638,7 @@ export interface ProvisionerJob {
readonly input: ProvisionerJobInput;
readonly type: ProvisionerJobType;
readonly available_workers?: readonly string[];
+ readonly metadata?: ProvisionerJobMetadata;
}
// From codersdk/provisionerdaemons.go
@@ -1657,6 +1658,16 @@ export interface ProvisionerJobLog {
readonly output: string;
}
+// From codersdk/provisionerdaemons.go
+export interface ProvisionerJobMetadata {
+ readonly template_version_name: string;
+ readonly template_id: string;
+ readonly template_name: string;
+ readonly template_display_name: string;
+ readonly workspace_id?: string;
+ readonly workspace_name?: string;
+}
+
// From codersdk/provisionerdaemons.go
export type ProvisionerJobStatus =
| "canceled"