diff --git a/hetzner-cloud/cloud-config.yaml.tftpl b/hetzner-cloud/cloud-config.yaml.tftpl index a358f53..afe666f 100644 --- a/hetzner-cloud/cloud-config.yaml.tftpl +++ b/hetzner-cloud/cloud-config.yaml.tftpl @@ -43,6 +43,28 @@ write_files: permissions: "0644" content: | export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock +%{ endif ~} +%{ if remote_ide_setup == "fleet" ~} + - path: /etc/systemd/system/fleet.service + permissions: "0644" + content: | + [Unit] + Description=Fleet + After=network-online.target + Wants=network-online.target + + [Service] + User=${username} + ExecStart=/usr/local/bin/fleet launch workspace --version 1.19.111 -- --auth=accept-everyone --enableSmartMode --workspacePort 3500 + Restart=always + RestartSec=10 + TimeoutStopSec=90 + KillMode=process + + SyslogIdentifier=fleet + + [Install] + WantedBy=multi-user.target %{ endif ~} - path: /etc/systemd/system/coder-agent.service permissions: "0644" @@ -66,7 +88,7 @@ write_files: [Install] WantedBy=multi-user.target -%{ if code_server_setup ~} +%{ if remote_ide_setup == "code_server" ~} - path: /home/${username}/.config/code-server/config.yaml permissions: "0644" content: | @@ -84,8 +106,11 @@ runcmd: - chown -R ${username}:${username} /home/${username} - sudo -u ${username} DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus" systemctl --user start podman %{ endif ~} -%{ if code_server_setup ~} +%{ if remote_ide_setup == "code_server" ~} - dnf install -y $(curl -sL https://api.github.com/repos/coder/code-server/releases/latest | jq -r '.assets[].browser_download_url' | grep "amd64.rpm") - systemctl enable --now code-server@${username} +%{ endif } +%{ if remote_ide_setup == "fleet" ~} + - systemctl enable --now fleet %{ endif } - chown -R ${username}:${username} /home/${username} \ No newline at end of file diff --git a/hetzner-cloud/main.tf b/hetzner-cloud/main.tf index b2a19bc..a2092da 100644 --- a/hetzner-cloud/main.tf +++ b/hetzner-cloud/main.tf @@ -177,21 +177,27 @@ data "coder_parameter" "volume_size" { } } -data "coder_parameter" "code_server" { - name = "install_code_server" - description = "Should Code Server be installed?" - default = "true" +data "coder_parameter" "remote_ide" { + name = "install_remote_ide" + description = "Which remote IDE should be installed" + default = "code_server" type = "string" mutable = true + option { - name = "Install" - value = "true" + name = "None" + value = "none" } option { - name = "Don't install" - value = "false" + name = "Code server" + value = "code_server" + } + + option { + name = "Jetbrains Fleet" + value = "fleet" } } @@ -228,7 +234,7 @@ resource "coder_agent" "dev" { resource "coder_app" "code-server" { display_name = "code-server" - count = data.coder_parameter.code_server.value ? 1 : 0 + count = data.coder_parameter.remote_ide.value == "code_server" ? 1 : 0 agent_id = coder_agent.dev.id slug = "code-server" icon = "/icon/code.svg" @@ -236,6 +242,16 @@ resource "coder_app" "code-server" { subdomain = var.use_subdomain } +resource "coder_app" "fleet" { + display_name = "Jetbrains Fleet" + count = data.coder_parameter.remote_ide.value == "fleet" ? 1 : 0 + agent_id = coder_agent.dev.id + slug = "fleet" + icon = "/icon/code.svg" + url = "http://localhost:3500" + subdomain = var.use_subdomain +} + # Generate a dummy ssh key that is not accessible so Hetzner cloud does not spam the admin with emails. resource "tls_private_key" "rsa_4096" { algorithm = "RSA" @@ -260,7 +276,7 @@ resource "hcloud_server" "root" { volume_path = "/dev/disk/by-id/scsi-0HC_Volume_${hcloud_volume.root.id}" init_script = base64encode(coder_agent.dev.init_script) coder_agent_token = coder_agent.dev.token - code_server_setup = data.coder_parameter.code_server.value + remote_ide_setup = data.coder_parameter.remote_ide.value install_podman_setup = data.coder_parameter.install_podman.value user_shell = data.coder_parameter.user_shell.value })