Skip to content

chore(examples/templates/digitalocean-linux): make template more friendly #15938

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Dec 24, 2024
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/examples.gen.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
"linux",
"digitalocean"
],
"markdown": "\n# Remote Development on DigitalOcean Droplets\n\nProvision DigitalOcean Droplets as [Coder workspaces](https://coder.com/docs/workspaces) with this example template.\n\n\u003c!-- TODO: Add screenshot --\u003e\n\n## Prerequisites\n\nTo deploy workspaces as DigitalOcean Droplets, you'll need:\n\n- DigitalOcean [personal access token (PAT)](https://docs.digitalocean.com/reference/api/create-personal-access-token/)\n\n- DigitalOcean project ID (you can get your project information via the `doctl`\n CLI by running `doctl projects list`)\n\n- Remove the following sections from the `main.tf` file if you don't want to\n associate your workspaces with a project:\n\n - `variable \"step2_do_project_id\"`\n - `resource \"digitalocean_project_resources\" \"project\"`\n\n- **Optional:** DigitalOcean SSH key ID (obtain via the `doctl` CLI by running\n `doctl compute ssh-key list`)\n\n- Note that this is only required for Fedora images to work.\n\n### Authentication\n\nThis template assumes that coderd is run in an environment that is authenticated\nwith Digital Ocean. Obtain a [Digital Ocean Personal Access\nToken](https://cloud.digitalocean.com/account/api/tokens) and set the\nenvironment variable `DIGITALOCEAN_TOKEN` to the access token before starting\ncoderd. For other ways to authenticate [consult the Terraform docs](https://registry.terraform.io/providers/digitalocean/digitalocean/latest/docs).\n\n## Architecture\n\nThis template provisions the following resources:\n\n- Azure VM (ephemeral, deleted on stop)\n- Managed disk (persistent, mounted to `/home/coder`)\n\nThis means, when the workspace restarts, any tools or files outside of the home directory are not persisted. To pre-bake tools into the workspace (e.g. `python3`), modify the VM image, or use a [startup script](https://registry.terraform.io/providers/coder/coder/latest/docs/resources/script).\n\n\u003e **Note**\n\u003e This template is designed to be a starting point! Edit the Terraform to extend the template to support your use case.\n"
"markdown": "\n# Remote Development on DigitalOcean Droplets\n\nProvision DigitalOcean Droplets as [Coder workspaces](https://coder.com/docs/workspaces) with this example template.\n\n\u003c!-- TODO: Add screenshot --\u003e\n\n## Prerequisites\n\nTo deploy workspaces as DigitalOcean Droplets, you'll need:\n\n- DigitalOcean [personal access token (PAT)](https://docs.digitalocean.com/reference/api/create-personal-access-token)\n\n- DigitalOcean project ID (you can get your project information via the `doctl` CLI by running `doctl projects list`)\n\n\t- Remove the following sections from the `main.tf` file if you don't want to\n\t\tassociate your workspaces with a project:\n\n\t\t- `variable \"do_project_id\"`\n\t\t- `resource \"digitalocean_project_resources\" \"project\"`\n\n- **Optional:** DigitalOcean SSH key ID (obtain via the `doctl` CLI by running\n `doctl compute ssh-key list`)\n\n\t- Note that this is only required for Fedora images to work.\n\n### Authentication\n\nThis template assumes that `coderd` is run in an environment that is authenticated with Digital Ocean.\n\nObtain a [Digital Ocean Personal Access Token](https://cloud.digitalocean.com/account/api/tokens) and set the `DIGITALOCEAN_TOKEN` environment variable to the access token before starting `coderd`.\nFor other ways to authenticate [consult the Terraform provider's docs](https://registry.terraform.io/providers/digitalocean/digitalocean/latest/docs).\n\n## Architecture\n\nThis template provisions the following resources:\n\n- DigitalOcean VM (ephemeral, deleted on stop)\n- Managed disk (persistent, mounted to `/home/coder`)\n\nThis means, when the workspace restarts, any tools or files outside of the home directory are not persisted. To pre-bake tools into the workspace (e.g. `python3`), modify the VM image, or use a [startup script](https://registry.terraform.io/providers/coder/coder/latest/docs/resources/script).\n\n\u003e [!NOTE]\n\u003e This template is designed to be a starting point! Edit the Terraform to extend the template to support your use case.\n"
},
{
"id": "docker",
Expand Down
28 changes: 13 additions & 15 deletions examples/templates/digitalocean-linux/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,38 +17,36 @@ Provision DigitalOcean Droplets as [Coder workspaces](https://coder.com/docs/wor

To deploy workspaces as DigitalOcean Droplets, you'll need:

- DigitalOcean [personal access token (PAT)](https://docs.digitalocean.com/reference/api/create-personal-access-token/)
- DigitalOcean [personal access token (PAT)](https://docs.digitalocean.com/reference/api/create-personal-access-token)

- DigitalOcean project ID (you can get your project information via the `doctl`
CLI by running `doctl projects list`)
- DigitalOcean project ID (you can get your project information via the `doctl` CLI by running `doctl projects list`)

- Remove the following sections from the `main.tf` file if you don't want to
associate your workspaces with a project:
- Remove the following sections from the `main.tf` file if you don't want to
associate your workspaces with a project:

- `variable "step2_do_project_id"`
- `resource "digitalocean_project_resources" "project"`
- `variable "do_project_id"`
- `resource "digitalocean_project_resources" "project"`

- **Optional:** DigitalOcean SSH key ID (obtain via the `doctl` CLI by running
`doctl compute ssh-key list`)

- Note that this is only required for Fedora images to work.
- Note that this is only required for Fedora images to work.

### Authentication

This template assumes that coderd is run in an environment that is authenticated
with Digital Ocean. Obtain a [Digital Ocean Personal Access
Token](https://cloud.digitalocean.com/account/api/tokens) and set the
environment variable `DIGITALOCEAN_TOKEN` to the access token before starting
coderd. For other ways to authenticate [consult the Terraform docs](https://registry.terraform.io/providers/digitalocean/digitalocean/latest/docs).
This template assumes that `coderd` is run in an environment that is authenticated with Digital Ocean.

Obtain a [Digital Ocean Personal Access Token](https://cloud.digitalocean.com/account/api/tokens) and set the `DIGITALOCEAN_TOKEN` environment variable to the access token before starting `coderd`.
For other ways to authenticate [consult the Terraform provider's docs](https://registry.terraform.io/providers/digitalocean/digitalocean/latest/docs).

## Architecture

This template provisions the following resources:

- Azure VM (ephemeral, deleted on stop)
- DigitalOcean VM (ephemeral, deleted on stop)
- Managed disk (persistent, mounted to `/home/coder`)

This means, when the workspace restarts, any tools or files outside of the home directory are not persisted. To pre-bake tools into the workspace (e.g. `python3`), modify the VM image, or use a [startup script](https://registry.terraform.io/providers/coder/coder/latest/docs/resources/script).

> **Note**
> [!NOTE]
> This template is designed to be a starting point! Edit the Terraform to extend the template to support your use case.
20 changes: 10 additions & 10 deletions examples/templates/digitalocean-linux/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,26 @@ terraform {
}
}

provider "coder" {
}
provider "coder" {}

variable "step1_do_project_id" {
variable "do_project_id" {
type = string
description = <<-EOF
Enter project ID
DigitalOcean project ID

$ doctl projects list
EOF
sensitive = true

validation {
# make sure length of alphanumeric string is 36
condition = length(var.step1_do_project_id) == 36
# make sure length of alphanumeric string is 36 (UUIDv4 size)
condition = length(var.do_project_id) == 36
error_message = "Invalid Digital Ocean Project ID."
}

}

variable "step2_do_admin_ssh_key" {
variable "do_admin_ssh_key" {
type = number
description = <<-EOF
Enter admin SSH key ID (some Droplet images require an SSH key to be set):
Expand All @@ -41,9 +40,10 @@ variable "step2_do_admin_ssh_key" {
$ doctl compute ssh-key list
EOF
sensitive = true
default = 0

validation {
condition = var.step2_do_admin_ssh_key >= 0
condition = var.do_admin_ssh_key >= 0
error_message = "Invalid Digital Ocean SSH key ID, a number is required."
}
}
Expand Down Expand Up @@ -291,11 +291,11 @@ resource "digitalocean_droplet" "workspace" {
coder_agent_token = coder_agent.main.token
})
# Required to provision Fedora.
ssh_keys = var.step2_do_admin_ssh_key > 0 ? [var.step2_do_admin_ssh_key] : []
ssh_keys = var.do_admin_ssh_key > 0 ? [var.do_admin_ssh_key] : []
}

resource "digitalocean_project_resources" "project" {
project = var.step1_do_project_id
project = var.do_project_id
# Workaround for terraform plan when using count.
resources = length(digitalocean_droplet.workspace) > 0 ? [
digitalocean_volume.home_volume.urn,
Expand Down
Loading