diff --git a/coder-base/main.tf b/coder-base/main.tf new file mode 100644 index 0000000..a4d5f13 --- /dev/null +++ b/coder-base/main.tf @@ -0,0 +1,220 @@ +terraform { + required_providers { + coder = { + source = "coder/coder" + } + docker = { + source = "kreuzwerker/docker" + } + } +} + +provider "docker" { + host = var.docker_socket != "" ? var.docker_socket : null +} + +locals { + username = data.coder_workspace_owner.me.name +} + +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 + + # Clone repo if URL is set + if [ -n "${var.repo_url}" ]; then + if [ -d ~/repo ] && [ "$(ls -A ~/repo)" ]; then + echo "⚠️ Skipping clone: ~/repo already exists and is not empty." + else + echo "==> Cloning repository from: ${var.repo_url}" + git clone --verbose "${var.repo_url}" ~/repo \ + && echo "✅ Clone successful." \ + || echo "❌ Failed to clone repo. Please check the URL or access permissions." + fi + fi + + # Language-specific startup commands + ${var.language_startup_script} + EOT + + 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 + } + + 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 = <