97 lines
2.5 KiB
HCL
97 lines
2.5 KiB
HCL
terraform {
|
|
required_version = ">= 1.0"
|
|
|
|
required_providers {
|
|
coder = {
|
|
source = "coder/coder"
|
|
version = ">= 2.5"
|
|
}
|
|
}
|
|
}
|
|
|
|
variable "agent_id" {
|
|
type = string
|
|
description = "The ID of a Coder agent."
|
|
}
|
|
|
|
variable "port" {
|
|
type = number
|
|
description = "The port to run KasmVNC on."
|
|
default = 6800
|
|
}
|
|
|
|
variable "kasm_version" {
|
|
type = string
|
|
description = "Version of KasmVNC to install."
|
|
default = "1.4.0"
|
|
}
|
|
|
|
variable "desktop_environment" {
|
|
type = string
|
|
description = "Specifies the desktop environment of the workspace. This should be pre-installed on the workspace."
|
|
|
|
validation {
|
|
condition = contains(["cinnamon", "mate", "lxde", "lxqt", "kde", "gnome", "xfce", "manual"], var.desktop_environment)
|
|
error_message = "Invalid desktop environment. Please specify a valid desktop environment."
|
|
}
|
|
}
|
|
|
|
variable "order" {
|
|
type = number
|
|
description = "The order determines the position of app in the UI presentation. The lowest order is shown first and apps with equal order are sorted by name (ascending order)."
|
|
default = null
|
|
}
|
|
|
|
variable "group" {
|
|
type = string
|
|
description = "The name of a group that this app belongs to."
|
|
default = null
|
|
}
|
|
|
|
variable "subdomain" {
|
|
type = bool
|
|
default = true
|
|
description = "Is subdomain sharing enabled in your cluster?"
|
|
}
|
|
|
|
variable "share" {
|
|
type = string
|
|
default = "owner"
|
|
validation {
|
|
condition = var.share == "owner" || var.share == "authenticated" || var.share == "public"
|
|
error_message = "Incorrect value. Please set either 'owner', 'authenticated', or 'public'."
|
|
}
|
|
}
|
|
|
|
resource "coder_script" "kasm_vnc" {
|
|
agent_id = var.agent_id
|
|
display_name = "KasmVNC"
|
|
icon = "/icon/kasmvnc.svg"
|
|
run_on_start = true
|
|
script = templatefile("${path.module}/run.sh", {
|
|
PORT = var.port,
|
|
DESKTOP_ENVIRONMENT = var.desktop_environment,
|
|
KASM_VERSION = var.kasm_version
|
|
SUBDOMAIN = tostring(var.subdomain)
|
|
PATH_VNC_HTML = var.subdomain ? "" : file("${path.module}/path_vnc.html")
|
|
})
|
|
}
|
|
|
|
resource "coder_app" "kasm_vnc" {
|
|
agent_id = var.agent_id
|
|
slug = "kasm-vnc"
|
|
display_name = "KasmVNC"
|
|
url = "http://localhost:${var.port}"
|
|
icon = "/icon/kasmvnc.svg"
|
|
subdomain = var.subdomain
|
|
share = var.share
|
|
order = var.order
|
|
group = var.group
|
|
|
|
healthcheck {
|
|
url = "http://localhost:${var.port}/app"
|
|
interval = 5
|
|
threshold = 5
|
|
}
|
|
}
|