mirror of
https://github.com/coder/coder.git
synced 2025-07-21 01:28:49 +00:00
chore(examples/templates/digitalocean-linux): make template more friendly (#15938)
This commit is contained in:
@ -66,7 +66,7 @@
|
|||||||
"linux",
|
"linux",
|
||||||
"digitalocean"
|
"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 - 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 \"project_uuid\"`\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 the Coder Provisioner 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.\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",
|
"id": "docker",
|
||||||
|
@ -17,38 +17,36 @@ Provision DigitalOcean Droplets as [Coder workspaces](https://coder.com/docs/wor
|
|||||||
|
|
||||||
To deploy workspaces as DigitalOcean Droplets, you'll need:
|
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`
|
- DigitalOcean project ID (you can get your project information via the `doctl` CLI by running `doctl projects list`)
|
||||||
CLI by running `doctl projects list`)
|
|
||||||
|
|
||||||
- Remove the following sections from the `main.tf` file if you don't want to
|
- Remove the following sections from the `main.tf` file if you don't want to
|
||||||
associate your workspaces with a project:
|
associate your workspaces with a project:
|
||||||
|
|
||||||
- `variable "step2_do_project_id"`
|
- `variable "project_uuid"`
|
||||||
- `resource "digitalocean_project_resources" "project"`
|
- `resource "digitalocean_project_resources" "project"`
|
||||||
|
|
||||||
- **Optional:** DigitalOcean SSH key ID (obtain via the `doctl` CLI by running
|
- **Optional:** DigitalOcean SSH key ID (obtain via the `doctl` CLI by running
|
||||||
`doctl compute ssh-key list`)
|
`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
|
### Authentication
|
||||||
|
|
||||||
This template assumes that coderd is run in an environment that is authenticated
|
This template assumes that the Coder Provisioner is run in an environment that is authenticated with Digital Ocean.
|
||||||
with Digital Ocean. Obtain a [Digital Ocean Personal Access
|
|
||||||
Token](https://cloud.digitalocean.com/account/api/tokens) and set the
|
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.
|
||||||
environment variable `DIGITALOCEAN_TOKEN` to the access token before starting
|
For other ways to authenticate [consult the Terraform provider's docs](https://registry.terraform.io/providers/digitalocean/digitalocean/latest/docs).
|
||||||
coderd. For other ways to authenticate [consult the Terraform docs](https://registry.terraform.io/providers/digitalocean/digitalocean/latest/docs).
|
|
||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
This template provisions the following resources:
|
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`)
|
- 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).
|
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.
|
> This template is designed to be a starting point! Edit the Terraform to extend the template to support your use case.
|
||||||
|
@ -9,30 +9,29 @@ terraform {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
provider "coder" {
|
provider "coder" {}
|
||||||
}
|
|
||||||
|
|
||||||
variable "step1_do_project_id" {
|
variable "project_uuid" {
|
||||||
type = string
|
type = string
|
||||||
description = <<-EOF
|
description = <<-EOF
|
||||||
Enter project ID
|
DigitalOcean project ID
|
||||||
|
|
||||||
$ doctl projects list
|
$ doctl projects list
|
||||||
EOF
|
EOF
|
||||||
sensitive = true
|
sensitive = true
|
||||||
|
|
||||||
validation {
|
validation {
|
||||||
# make sure length of alphanumeric string is 36
|
# make sure length of alphanumeric string is 36 (UUIDv4 size)
|
||||||
condition = length(var.step1_do_project_id) == 36
|
condition = length(var.project_uuid) == 36
|
||||||
error_message = "Invalid Digital Ocean Project ID."
|
error_message = "Invalid Digital Ocean Project ID."
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "step2_do_admin_ssh_key" {
|
variable "ssh_key_id" {
|
||||||
type = number
|
type = number
|
||||||
description = <<-EOF
|
description = <<-EOF
|
||||||
Enter admin SSH key ID (some Droplet images require an SSH key to be set):
|
DigitalOcean SSH key ID (some Droplet images require an SSH key to be set):
|
||||||
|
|
||||||
Can be set to "0" for no key.
|
Can be set to "0" for no key.
|
||||||
|
|
||||||
@ -41,9 +40,10 @@ variable "step2_do_admin_ssh_key" {
|
|||||||
$ doctl compute ssh-key list
|
$ doctl compute ssh-key list
|
||||||
EOF
|
EOF
|
||||||
sensitive = true
|
sensitive = true
|
||||||
|
default = 0
|
||||||
|
|
||||||
validation {
|
validation {
|
||||||
condition = var.step2_do_admin_ssh_key >= 0
|
condition = var.ssh_key_id >= 0
|
||||||
error_message = "Invalid Digital Ocean SSH key ID, a number is required."
|
error_message = "Invalid Digital Ocean SSH key ID, a number is required."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -291,11 +291,11 @@ resource "digitalocean_droplet" "workspace" {
|
|||||||
coder_agent_token = coder_agent.main.token
|
coder_agent_token = coder_agent.main.token
|
||||||
})
|
})
|
||||||
# Required to provision Fedora.
|
# Required to provision Fedora.
|
||||||
ssh_keys = var.step2_do_admin_ssh_key > 0 ? [var.step2_do_admin_ssh_key] : []
|
ssh_keys = var.ssh_key_id > 0 ? [var.ssh_key_id] : []
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "digitalocean_project_resources" "project" {
|
resource "digitalocean_project_resources" "project" {
|
||||||
project = var.step1_do_project_id
|
project = var.project_uuid
|
||||||
# Workaround for terraform plan when using count.
|
# Workaround for terraform plan when using count.
|
||||||
resources = length(digitalocean_droplet.workspace) > 0 ? [
|
resources = length(digitalocean_droplet.workspace) > 0 ? [
|
||||||
digitalocean_volume.home_volume.urn,
|
digitalocean_volume.home_volume.urn,
|
||||||
|
Reference in New Issue
Block a user