From b5b5c37d03296abbaf4a65434da9bf43ce0fef46 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Tue, 2 Apr 2024 10:11:24 -0500 Subject: [PATCH] docs: describe mutually exclusive create workspace template fields (#12834) * docs: describe mutually exclusive create workspace template fields Ideally we could do this in the OpenAPI spec, but there is no first class "mutually exclusive" feature in OpenAPI. So in lieu of something more complex, or changing our struct/validation, a description comment should suffice. * chore: Add description to code sample as well --- coderd/apidoc/docs.go | 2 ++ coderd/apidoc/swagger.json | 2 ++ coderd/workspaces.go | 4 ++++ codersdk/organizations.go | 3 +++ docs/api/schemas.md | 2 ++ docs/api/workspaces.md | 5 +++++ 6 files changed, 18 insertions(+) diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go index a082996d32..7bfd521b09 100644 --- a/coderd/apidoc/docs.go +++ b/coderd/apidoc/docs.go @@ -2211,6 +2211,7 @@ const docTemplate = `{ "CoderSessionToken": [] } ], + "description": "Create a new workspace using a template. The request must\nspecify either the Template ID or the Template Version ID,\nnot both. If the Template ID is specified, the active version\nof the template will be used.", "consumes": [ "application/json" ], @@ -9045,6 +9046,7 @@ const docTemplate = `{ } }, "codersdk.CreateWorkspaceRequest": { + "description": "CreateWorkspaceRequest provides options for creating a new workspace. Only one of TemplateID or TemplateVersionID can be specified, not both. If TemplateID is specified, the active version of the template will be used.", "type": "object", "required": [ "name" diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json index a559938463..c4dabcacaf 100644 --- a/coderd/apidoc/swagger.json +++ b/coderd/apidoc/swagger.json @@ -1932,6 +1932,7 @@ "CoderSessionToken": [] } ], + "description": "Create a new workspace using a template. The request must\nspecify either the Template ID or the Template Version ID,\nnot both. If the Template ID is specified, the active version\nof the template will be used.", "consumes": ["application/json"], "produces": ["application/json"], "tags": ["Workspaces"], @@ -8052,6 +8053,7 @@ } }, "codersdk.CreateWorkspaceRequest": { + "description": "CreateWorkspaceRequest provides options for creating a new workspace. Only one of TemplateID or TemplateVersionID can be specified, not both. If TemplateID is specified, the active version of the template will be used.", "type": "object", "required": ["name"], "properties": { diff --git a/coderd/workspaces.go b/coderd/workspaces.go index f29d44d6d7..d3456fab00 100644 --- a/coderd/workspaces.go +++ b/coderd/workspaces.go @@ -332,6 +332,10 @@ func (api *API) workspaceByOwnerAndName(rw http.ResponseWriter, r *http.Request) // Create a new workspace for the currently authenticated user. // // @Summary Create user workspace by organization +// @Description Create a new workspace using a template. The request must +// @Description specify either the Template ID or the Template Version ID, +// @Description not both. If the Template ID is specified, the active version +// @Description of the template will be used. // @ID create-user-workspace-by-organization // @Security CoderSessionToken // @Accept json diff --git a/codersdk/organizations.go b/codersdk/organizations.go index a6a1b927ca..cb353dff27 100644 --- a/codersdk/organizations.go +++ b/codersdk/organizations.go @@ -138,6 +138,9 @@ type CreateTemplateRequest struct { // CreateWorkspaceRequest provides options for creating a new workspace. // Either TemplateID or TemplateVersionID must be specified. They cannot both be present. +// @Description CreateWorkspaceRequest provides options for creating a new workspace. +// @Description Only one of TemplateID or TemplateVersionID can be specified, not both. +// @Description If TemplateID is specified, the active version of the template will be used. type CreateWorkspaceRequest struct { // TemplateID specifies which template should be used for creating the workspace. TemplateID uuid.UUID `json:"template_id,omitempty" validate:"required_without=TemplateVersionID,excluded_with=TemplateVersionID" format:"uuid"` diff --git a/docs/api/schemas.md b/docs/api/schemas.md index f46e02a636..f0b5646fea 100644 --- a/docs/api/schemas.md +++ b/docs/api/schemas.md @@ -1646,6 +1646,8 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in } ``` +CreateWorkspaceRequest provides options for creating a new workspace. Only one of TemplateID or TemplateVersionID can be specified, not both. If TemplateID is specified, the active version of the template will be used. + ### Properties | Name | Type | Required | Restrictions | Description | diff --git a/docs/api/workspaces.md b/docs/api/workspaces.md index c16dd970a5..886f8401f7 100644 --- a/docs/api/workspaces.md +++ b/docs/api/workspaces.md @@ -14,6 +14,11 @@ curl -X POST http://coder-server:8080/api/v2/organizations/{organization}/member `POST /organizations/{organization}/members/{user}/workspaces` +Create a new workspace using a template. The request must +specify either the Template ID or the Template Version ID, +not both. If the Template ID is specified, the active version +of the template will be used. + > Body parameter ```json