2022-10-31 16:24:01 +00:00
|
|
|
terraform {
|
|
|
|
required_providers {
|
|
|
|
coder = {
|
|
|
|
source = "coder/coder"
|
|
|
|
version = "0.5.3"
|
|
|
|
}
|
|
|
|
docker = {
|
|
|
|
source = "kreuzwerker/docker"
|
|
|
|
version = "~> 2.20.2"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
data "coder_provisioner" "me" {
|
|
|
|
}
|
|
|
|
|
|
|
|
provider "docker" {
|
|
|
|
}
|
|
|
|
|
|
|
|
data "coder_workspace" "me" {
|
|
|
|
}
|
|
|
|
|
|
|
|
locals {
|
2022-11-08 12:15:58 +00:00
|
|
|
dcw_owner = replace(replace("${data.coder_workspace.me.owner}", "~", "~~"), "-", "~-")
|
|
|
|
dcw_name = replace(replace("${data.coder_workspace.me.name}", "~", "~~"), "-", "~-")
|
|
|
|
|
|
|
|
##workspace_name = "${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}"
|
|
|
|
workspace_name = "${local.dcw_owner}-${local.dcw_name}"
|
2022-10-31 16:24:01 +00:00
|
|
|
|
|
|
|
## this points to the workspace parent directory accessible from the docker host.
|
|
|
|
workspace_dir = "/home/gfs-data/coder/workspace/${local.workspace_name}"
|
|
|
|
|
|
|
|
## this indicates the view of workspace_dir from within the coder server container.
|
|
|
|
## the binding mount directory in coder.yml must match the leading directory in this item.
|
|
|
|
server_workspace_dir = "/workspace/${local.workspace_name}"
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "null_resource" "workspace" {
|
2022-11-08 12:15:58 +00:00
|
|
|
count = 1
|
2022-10-31 16:24:01 +00:00
|
|
|
|
|
|
|
triggers = {
|
|
|
|
dir = local.server_workspace_dir
|
|
|
|
}
|
|
|
|
|
|
|
|
provisioner "local-exec" {
|
|
|
|
command = "mkdir ${self.triggers.dir}"
|
|
|
|
}
|
|
|
|
|
|
|
|
provisioner "local-exec" {
|
|
|
|
when = destroy
|
|
|
|
command = "rm -rf ${self.triggers.dir}"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "coder_agent" "main" {
|
|
|
|
arch = data.coder_provisioner.me.arch
|
|
|
|
os = "linux"
|
|
|
|
startup_script = "code-server --auth none"
|
|
|
|
|
|
|
|
# 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 = "${data.coder_workspace.me.owner}"
|
|
|
|
GIT_COMMITTER_NAME = "${data.coder_workspace.me.owner}"
|
|
|
|
GIT_AUTHOR_EMAIL = "${data.coder_workspace.me.owner_email}"
|
|
|
|
GIT_COMMITTER_EMAIL = "${data.coder_workspace.me.owner_email}"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "coder_app" "code-server" {
|
|
|
|
agent_id = coder_agent.main.id
|
|
|
|
name = "code-server"
|
|
|
|
url = "http://localhost:8080/?folder=/home/coder"
|
|
|
|
icon = "/icon/code.svg"
|
|
|
|
subdomain = false
|
|
|
|
share = "owner"
|
|
|
|
|
|
|
|
healthcheck {
|
|
|
|
url = "http://localhost:8080/healthz"
|
|
|
|
interval = 3
|
|
|
|
threshold = 10
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
##resource "docker_volume" "home_volume" {
|
|
|
|
## name = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}-root"
|
|
|
|
##}
|
|
|
|
|
|
|
|
resource "docker_service" "workspace" {
|
|
|
|
##depends_on = [local_file.workspace]
|
|
|
|
depends_on = [null_resource.workspace]
|
|
|
|
|
2022-11-08 12:15:58 +00:00
|
|
|
count = data.coder_workspace.me.start_count
|
2022-10-31 16:24:01 +00:00
|
|
|
name = "coder-${data.coder_workspace.me.owner}-${lower(data.coder_workspace.me.name)}"
|
|
|
|
|
|
|
|
task_spec {
|
|
|
|
container_spec {
|
2022-11-08 12:15:58 +00:00
|
|
|
image = "codercom/code-server:4.8.3"
|
2022-10-31 16:24:01 +00:00
|
|
|
hostname = lower(data.coder_workspace.me.name)
|
|
|
|
command = ["sh"]
|
|
|
|
##args = ["-c", replace(coder_agent.main.init_script, "/localhost|127\\.0\\.0\\.1/", "host.docker.internal")]
|
|
|
|
args = ["-c", replace(coder_agent.main.init_script, "/localhost|127\\.0\\.0\\.1/", "coder-service-host") ]
|
|
|
|
|
|
|
|
env = {
|
|
|
|
CODER_AGENT_TOKEN = "${coder_agent.main.token}"
|
|
|
|
}
|
|
|
|
#hosts {
|
|
|
|
# host = "host.docker.internal"
|
|
|
|
# ip = "host-gateway"
|
|
|
|
#}
|
|
|
|
|
|
|
|
mounts {
|
|
|
|
target = "/home/coder"
|
|
|
|
source = local.workspace_dir
|
|
|
|
type = "bind"
|
|
|
|
read_only = false
|
|
|
|
}
|
|
|
|
|
|
|
|
##dir = "/home/coder"
|
|
|
|
##user = "root"
|
|
|
|
}
|
|
|
|
|
|
|
|
resources {
|
|
|
|
limits {
|
|
|
|
memory_bytes = 1000000000
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#placement {
|
|
|
|
# constraints = [
|
|
|
|
# "node.role == manager"
|
|
|
|
# ]
|
|
|
|
#}
|
|
|
|
|
|
|
|
force_update = 0
|
|
|
|
networks = ["coder-network"]
|
|
|
|
}
|
|
|
|
|
|
|
|
mode {
|
|
|
|
replicated {
|
|
|
|
replicas = 1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|