143 lines
3.9 KiB
HCL
143 lines
3.9 KiB
HCL
terraform {
|
||
required_providers {
|
||
coder = {
|
||
source = "coder/coder"
|
||
}
|
||
}
|
||
}
|
||
|
||
locals {
|
||
username = data.coder_workspace_owner.me.name
|
||
user_id = data.coder_workspace_owner.me.id
|
||
}
|
||
|
||
data "coder_provisioner" "me" {}
|
||
data "coder_workspace" "me" {}
|
||
data "coder_workspace_owner" "me" {}
|
||
|
||
# 環境變數:GitHub token for Copilot
|
||
variable "github_token" {
|
||
description = "GitHub token for Copilot authentication (optional)"
|
||
type = string
|
||
sensitive = true
|
||
default = ""
|
||
}
|
||
|
||
resource "coder_agent" "main" {
|
||
arch = data.coder_provisioner.me.arch
|
||
os = "linux"
|
||
startup_script = <<-EOT
|
||
set -e
|
||
|
||
# 初始化使用者目錄
|
||
if [ ! -f ~/.init_done ]; then
|
||
cp -rT /etc/skel ~ || true
|
||
touch ~/.init_done
|
||
fi
|
||
|
||
# 確保必要目錄存在
|
||
mkdir -p ~/.config ~/.cache ~/.local/share
|
||
|
||
# 安裝 VSCode Server extensions(可選)
|
||
# code-server --install-extension github.copilot
|
||
# code-server --install-extension ms-vscode.cpptools
|
||
EOT
|
||
|
||
# Git 認證配置
|
||
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}"
|
||
# GitHub Copilot 認證
|
||
GITHUB_TOKEN = var.github_token != "" ? var.github_token : ""
|
||
}
|
||
|
||
# 監控指標
|
||
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
|
||
}
|
||
|
||
metadata {
|
||
display_name = "CPU Usage (Host)"
|
||
key = "4_cpu_usage_host"
|
||
script = "coder stat cpu --host"
|
||
interval = 10
|
||
timeout = 1
|
||
}
|
||
|
||
metadata {
|
||
display_name = "Memory Usage (Host)"
|
||
key = "5_mem_usage_host"
|
||
script = "coder stat mem --host"
|
||
interval = 10
|
||
timeout = 1
|
||
}
|
||
|
||
metadata {
|
||
display_name = "Load Average (Host)"
|
||
key = "6_load_host"
|
||
script = <<EOT
|
||
echo "`cat /proc/loadavg | awk '{ print $1 }'` `nproc`" | awk '{ printf "%0.2f", $1/$2 }'
|
||
EOT
|
||
interval = 60
|
||
timeout = 1
|
||
}
|
||
|
||
metadata {
|
||
display_name = "Swap Usage (Host)"
|
||
key = "7_swap_host"
|
||
script = <<EOT
|
||
free -b | awk '/^Swap/ { printf("%.1f/%.1f", $3/1024.0/1024.0/1024.0, $2/1024.0/1024.0/1024.0) }'
|
||
EOT
|
||
interval = 10
|
||
timeout = 1
|
||
}
|
||
}
|
||
|
||
# See https://registry.coder.com/modules/coder/code-server
|
||
module "code-server" {
|
||
count = data.coder_workspace.me.start_count
|
||
source = "registry.coder.com/coder/code-server/coder"
|
||
version = "~> 1.0"
|
||
|
||
agent_id = coder_agent.main.id
|
||
order = 1
|
||
|
||
# code-server 會自動使用:
|
||
# - 認證:繼承 Coder 的 OIDC (GitHub) 認證
|
||
# - 自動存檔:code-server 內建 auto-save
|
||
# - Extensions:支援 GitHub Copilot(需要 GitHub token)
|
||
}
|
||
|
||
# See https://registry.coder.com/modules/coder/jetbrains
|
||
module "jetbrains" {
|
||
count = data.coder_workspace.me.start_count
|
||
source = "registry.coder.com/coder/jetbrains/coder"
|
||
version = "~> 1.1"
|
||
agent_id = coder_agent.main.id
|
||
agent_name = "main"
|
||
folder = "/home/coder"
|
||
tooltip = "You need to [install JetBrains Toolbox](https://coder.com/docs/user-guides/workspace-access/jetbrains/toolbox) to use this app."
|
||
}
|