Co-authored-by: blink-so[bot] <211532188+blink-so[bot]@users.noreply.github.com> Co-authored-by: matifali <104543375+matifali@users.noreply.github.com> Co-authored-by: DevCats <christofer@coder.com> Co-authored-by: Atif Ali <atif@coder.com>
173 lines
5.0 KiB
HCL
173 lines
5.0 KiB
HCL
terraform {
|
|
required_providers {
|
|
coder = {
|
|
source = "coder/coder"
|
|
}
|
|
# Add your provider here (e.g., docker, aws, gcp, azure)
|
|
# docker = {
|
|
# source = "kreuzwerker/docker"
|
|
# }
|
|
}
|
|
}
|
|
|
|
locals {
|
|
username = data.coder_workspace_owner.me.name
|
|
}
|
|
|
|
# Add your variables here
|
|
# variable "example_var" {
|
|
# default = "default_value"
|
|
# description = "Description of the variable"
|
|
# type = string
|
|
# }
|
|
|
|
# Configure your provider here
|
|
# provider "docker" {
|
|
# host = var.docker_socket != "" ? var.docker_socket : null
|
|
# }
|
|
|
|
data "coder_provisioner" "me" {}
|
|
data "coder_workspace" "me" {}
|
|
data "coder_workspace_owner" "me" {}
|
|
|
|
resource "coder_agent" "main" {
|
|
arch = data.coder_provisioner.me.arch
|
|
os = "linux"
|
|
startup_script = <<-EOT
|
|
set -e
|
|
|
|
# Prepare user home with default files on first start.
|
|
if [ ! -f ~/.init_done ]; then
|
|
cp -rT /etc/skel ~
|
|
touch ~/.init_done
|
|
fi
|
|
|
|
# Add any commands that should be executed at workspace startup here
|
|
EOT
|
|
|
|
# These environment variables allow you to make Git commits right away after creating a
|
|
# workspace. Note that they take precedence over configuration defined in ~/.gitconfig!
|
|
# You can remove this block if you'd prefer to configure Git manually or using
|
|
# dotfiles. (see docs/dotfiles.md)
|
|
env = {
|
|
GIT_AUTHOR_NAME = coalesce(data.coder_workspace_owner.me.full_name, data.coder_workspace_owner.me.name)
|
|
GIT_AUTHOR_EMAIL = "${data.coder_workspace_owner.me.email}"
|
|
GIT_COMMITTER_NAME = coalesce(data.coder_workspace_owner.me.full_name, data.coder_workspace_owner.me.name)
|
|
GIT_COMMITTER_EMAIL = "${data.coder_workspace_owner.me.email}"
|
|
}
|
|
|
|
# The following metadata blocks are optional. They are used to display
|
|
# information about your workspace in the dashboard. You can remove them
|
|
# if you don't want to display any information.
|
|
# For basic templates, you can remove the "display_apps" block.
|
|
metadata {
|
|
display_name = "CPU Usage"
|
|
key = "0_cpu_usage"
|
|
script = "coder stat cpu"
|
|
interval = 10
|
|
timeout = 1
|
|
}
|
|
|
|
metadata {
|
|
display_name = "RAM Usage"
|
|
key = "1_ram_usage"
|
|
script = "coder stat mem"
|
|
interval = 10
|
|
timeout = 1
|
|
}
|
|
|
|
metadata {
|
|
display_name = "Home Disk"
|
|
key = "3_home_disk"
|
|
script = "coder stat disk --path $${HOME}"
|
|
interval = 60
|
|
timeout = 1
|
|
}
|
|
|
|
display_apps {
|
|
vscode = true
|
|
vscode_insiders = false
|
|
ssh_helper = false
|
|
port_forwarding_helper = true
|
|
web_terminal = true
|
|
}
|
|
}
|
|
|
|
# Add your resources here (e.g., docker container, VM, etc.)
|
|
# resource "docker_image" "main" {
|
|
# name = "codercom/enterprise-base:ubuntu"
|
|
# }
|
|
|
|
# resource "docker_container" "workspace" {
|
|
# count = data.coder_workspace.me.start_count
|
|
# image = docker_image.main.image_id
|
|
# # Uses lower() to avoid Docker restriction on container names.
|
|
# name = "coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.name)}"
|
|
# # Hostname makes the shell more user friendly: coder@my-workspace:~$
|
|
# hostname = data.coder_workspace.me.name
|
|
# # Use the docker gateway if the access URL is 127.0.0.1
|
|
# entrypoint = ["sh", "-c", replace(coder_agent.main.init_script, "/localhost|127\.0\.0\.1/", "host.docker.internal")]
|
|
# env = ["CODER_AGENT_TOKEN=${coder_agent.main.token}"]
|
|
# host {
|
|
# host = "host.docker.internal"
|
|
# ip = "host-gateway"
|
|
# }
|
|
# volumes {
|
|
# container_path = "/home/${local.username}"
|
|
# volume_name = docker_volume.home_volume[0].name
|
|
# read_only = false
|
|
# }
|
|
# # Add labels in Docker to keep track of orphan resources.
|
|
# labels {
|
|
# label = "coder.owner"
|
|
# value = data.coder_workspace_owner.me.name
|
|
# }
|
|
# labels {
|
|
# label = "coder.owner_id"
|
|
# value = data.coder_workspace_owner.me.id
|
|
# }
|
|
# labels {
|
|
# label = "coder.workspace_id"
|
|
# value = data.coder_workspace.me.id
|
|
# }
|
|
# labels {
|
|
# label = "coder.workspace_name"
|
|
# value = data.coder_workspace.me.name
|
|
# }
|
|
# }
|
|
|
|
# resource "docker_volume" "home_volume" {
|
|
# count = data.coder_workspace.me.start_count
|
|
# name = "coder-${data.coder_workspace_owner.me.name}-${data.coder_workspace.me.name}-home"
|
|
# # Protect the volume from being deleted due to changes in attributes.
|
|
# lifecycle {
|
|
# ignore_changes = all
|
|
# }
|
|
# # Add labels in Docker to keep track of orphan resources.
|
|
# labels {
|
|
# label = "coder.owner"
|
|
# value = data.coder_workspace_owner.me.name
|
|
# }
|
|
# labels {
|
|
# label = "coder.owner_id"
|
|
# value = data.coder_workspace_owner.me.id
|
|
# }
|
|
# labels {
|
|
# label = "coder.workspace_id"
|
|
# value = data.coder_workspace.me.id
|
|
# }
|
|
# labels {
|
|
# label = "coder.workspace_name"
|
|
# value = data.coder_workspace.me.name
|
|
# }
|
|
# }
|
|
|
|
resource "coder_metadata" "workspace_info" {
|
|
resource_id = coder_agent.main.id
|
|
|
|
item {
|
|
key = "TEMPLATE_NAME"
|
|
value = "TEMPLATE_NAME"
|
|
}
|
|
}
|