terraform { required_providers { coder = { source = "coder/coder" } docker = { source = "kreuzwerker/docker" } } } locals { username = data.coder_workspace_owner.me.name image_name = "coder-nodejs-base:latest" } variable "docker_socket" { default = "" description = "(Optional) Docker socket URI" type = string } provider "docker" { # Defaulting to null if the variable is an empty string lets us have an optional variable without having to set our own default host = var.docker_socket != "" ? var.docker_socket : null } data "coder_provisioner" "me" {} data "coder_workspace" "me" {} data "coder_workspace_owner" "me" {} resource "null_resource" "docker_build" { triggers = { always_run = "${timestamp()}" dockerfile_hash = filemd5("${path.module}/Dockerfile") } provisioner "local-exec" { command = "docker build -t ${local.image_name} -f ${path.module}/Dockerfile ." working_dir = path.module } } 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 ~ # 创建 .ssh 目录并设置权限 mkdir -p ~/.ssh chmod 700 ~/.ssh # 生成 SSH 密钥对,不设置密码 ssh-keygen -t ed25519 -f ~/.ssh/git -N "" -C "${data.coder_workspace_owner.me.email}" # 创建 SSH 配置文件 cat > ~/.ssh/config <