|
|
@ -6,6 +6,10 @@ terraform {
|
|
|
|
source = "coder/coder"
|
|
|
|
source = "coder/coder"
|
|
|
|
version = ">= 0.17"
|
|
|
|
version = ">= 0.17"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
http = {
|
|
|
|
|
|
|
|
source = "hashicorp/http"
|
|
|
|
|
|
|
|
version = ">= 3.0"
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -46,6 +50,22 @@ variable "coder_parameter_order" {
|
|
|
|
default = null
|
|
|
|
default = null
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
variable "latest" {
|
|
|
|
|
|
|
|
type = bool
|
|
|
|
|
|
|
|
description = "Whether to fetch the latest version of the IDE."
|
|
|
|
|
|
|
|
default = false
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
variable "channel" {
|
|
|
|
|
|
|
|
type = string
|
|
|
|
|
|
|
|
description = "JetBrains IDE release channel. Valid values are release and eap."
|
|
|
|
|
|
|
|
default = "release"
|
|
|
|
|
|
|
|
validation {
|
|
|
|
|
|
|
|
condition = can(regex("^(release|eap)$", var.channel))
|
|
|
|
|
|
|
|
error_message = "The channel must be either release or eap."
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
variable "jetbrains_ide_versions" {
|
|
|
|
variable "jetbrains_ide_versions" {
|
|
|
|
type = map(object({
|
|
|
|
type = map(object({
|
|
|
|
build_number = string
|
|
|
|
build_number = string
|
|
|
@ -120,6 +140,11 @@ variable "jetbrains_ides" {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
data "http" "jetbrains_ide_versions" {
|
|
|
|
|
|
|
|
for_each = var.latest ? toset(var.jetbrains_ides) : toset([])
|
|
|
|
|
|
|
|
url = "https://data.services.jetbrains.com/products/releases?code=${each.key}&latest=true&type=${var.channel}"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
locals {
|
|
|
|
locals {
|
|
|
|
jetbrains_ides = {
|
|
|
|
jetbrains_ides = {
|
|
|
|
"GO" = {
|
|
|
|
"GO" = {
|
|
|
@ -128,6 +153,7 @@ locals {
|
|
|
|
identifier = "GO",
|
|
|
|
identifier = "GO",
|
|
|
|
build_number = var.jetbrains_ide_versions["GO"].build_number,
|
|
|
|
build_number = var.jetbrains_ide_versions["GO"].build_number,
|
|
|
|
download_link = "https://download.jetbrains.com/go/goland-${var.jetbrains_ide_versions["GO"].version}.tar.gz"
|
|
|
|
download_link = "https://download.jetbrains.com/go/goland-${var.jetbrains_ide_versions["GO"].version}.tar.gz"
|
|
|
|
|
|
|
|
version = var.jetbrains_ide_versions["GO"].version
|
|
|
|
},
|
|
|
|
},
|
|
|
|
"WS" = {
|
|
|
|
"WS" = {
|
|
|
|
icon = "/icon/webstorm.svg",
|
|
|
|
icon = "/icon/webstorm.svg",
|
|
|
@ -135,6 +161,7 @@ locals {
|
|
|
|
identifier = "WS",
|
|
|
|
identifier = "WS",
|
|
|
|
build_number = var.jetbrains_ide_versions["WS"].build_number,
|
|
|
|
build_number = var.jetbrains_ide_versions["WS"].build_number,
|
|
|
|
download_link = "https://download.jetbrains.com/webstorm/WebStorm-${var.jetbrains_ide_versions["WS"].version}.tar.gz"
|
|
|
|
download_link = "https://download.jetbrains.com/webstorm/WebStorm-${var.jetbrains_ide_versions["WS"].version}.tar.gz"
|
|
|
|
|
|
|
|
version = var.jetbrains_ide_versions["WS"].version
|
|
|
|
},
|
|
|
|
},
|
|
|
|
"IU" = {
|
|
|
|
"IU" = {
|
|
|
|
icon = "/icon/intellij.svg",
|
|
|
|
icon = "/icon/intellij.svg",
|
|
|
@ -142,6 +169,7 @@ locals {
|
|
|
|
identifier = "IU",
|
|
|
|
identifier = "IU",
|
|
|
|
build_number = var.jetbrains_ide_versions["IU"].build_number,
|
|
|
|
build_number = var.jetbrains_ide_versions["IU"].build_number,
|
|
|
|
download_link = "https://download.jetbrains.com/idea/ideaIU-${var.jetbrains_ide_versions["IU"].version}.tar.gz"
|
|
|
|
download_link = "https://download.jetbrains.com/idea/ideaIU-${var.jetbrains_ide_versions["IU"].version}.tar.gz"
|
|
|
|
|
|
|
|
version = var.jetbrains_ide_versions["IU"].version
|
|
|
|
},
|
|
|
|
},
|
|
|
|
"PY" = {
|
|
|
|
"PY" = {
|
|
|
|
icon = "/icon/pycharm.svg",
|
|
|
|
icon = "/icon/pycharm.svg",
|
|
|
@ -149,6 +177,7 @@ locals {
|
|
|
|
identifier = "PY",
|
|
|
|
identifier = "PY",
|
|
|
|
build_number = var.jetbrains_ide_versions["PY"].build_number,
|
|
|
|
build_number = var.jetbrains_ide_versions["PY"].build_number,
|
|
|
|
download_link = "https://download.jetbrains.com/python/pycharm-professional-${var.jetbrains_ide_versions["PY"].version}.tar.gz"
|
|
|
|
download_link = "https://download.jetbrains.com/python/pycharm-professional-${var.jetbrains_ide_versions["PY"].version}.tar.gz"
|
|
|
|
|
|
|
|
version = var.jetbrains_ide_versions["PY"].version
|
|
|
|
},
|
|
|
|
},
|
|
|
|
"CL" = {
|
|
|
|
"CL" = {
|
|
|
|
icon = "/icon/clion.svg",
|
|
|
|
icon = "/icon/clion.svg",
|
|
|
@ -156,6 +185,7 @@ locals {
|
|
|
|
identifier = "CL",
|
|
|
|
identifier = "CL",
|
|
|
|
build_number = var.jetbrains_ide_versions["CL"].build_number,
|
|
|
|
build_number = var.jetbrains_ide_versions["CL"].build_number,
|
|
|
|
download_link = "https://download.jetbrains.com/cpp/CLion-${var.jetbrains_ide_versions["CL"].version}.tar.gz"
|
|
|
|
download_link = "https://download.jetbrains.com/cpp/CLion-${var.jetbrains_ide_versions["CL"].version}.tar.gz"
|
|
|
|
|
|
|
|
version = var.jetbrains_ide_versions["CL"].version
|
|
|
|
},
|
|
|
|
},
|
|
|
|
"PS" = {
|
|
|
|
"PS" = {
|
|
|
|
icon = "/icon/phpstorm.svg",
|
|
|
|
icon = "/icon/phpstorm.svg",
|
|
|
@ -163,6 +193,7 @@ locals {
|
|
|
|
identifier = "PS",
|
|
|
|
identifier = "PS",
|
|
|
|
build_number = var.jetbrains_ide_versions["PS"].build_number,
|
|
|
|
build_number = var.jetbrains_ide_versions["PS"].build_number,
|
|
|
|
download_link = "https://download.jetbrains.com/webide/PhpStorm-${var.jetbrains_ide_versions["PS"].version}.tar.gz"
|
|
|
|
download_link = "https://download.jetbrains.com/webide/PhpStorm-${var.jetbrains_ide_versions["PS"].version}.tar.gz"
|
|
|
|
|
|
|
|
version = var.jetbrains_ide_versions["PS"].version
|
|
|
|
},
|
|
|
|
},
|
|
|
|
"RM" = {
|
|
|
|
"RM" = {
|
|
|
|
icon = "/icon/rubymine.svg",
|
|
|
|
icon = "/icon/rubymine.svg",
|
|
|
@ -170,6 +201,7 @@ locals {
|
|
|
|
identifier = "RM",
|
|
|
|
identifier = "RM",
|
|
|
|
build_number = var.jetbrains_ide_versions["RM"].build_number,
|
|
|
|
build_number = var.jetbrains_ide_versions["RM"].build_number,
|
|
|
|
download_link = "https://download.jetbrains.com/ruby/RubyMine-${var.jetbrains_ide_versions["RM"].version}.tar.gz"
|
|
|
|
download_link = "https://download.jetbrains.com/ruby/RubyMine-${var.jetbrains_ide_versions["RM"].version}.tar.gz"
|
|
|
|
|
|
|
|
version = var.jetbrains_ide_versions["RM"].version
|
|
|
|
}
|
|
|
|
}
|
|
|
|
"RD" = {
|
|
|
|
"RD" = {
|
|
|
|
icon = "/icon/rider.svg",
|
|
|
|
icon = "/icon/rider.svg",
|
|
|
@ -177,8 +209,18 @@ locals {
|
|
|
|
identifier = "RD",
|
|
|
|
identifier = "RD",
|
|
|
|
build_number = var.jetbrains_ide_versions["RD"].build_number,
|
|
|
|
build_number = var.jetbrains_ide_versions["RD"].build_number,
|
|
|
|
download_link = "https://download.jetbrains.com/rider/JetBrains.Rider-${var.jetbrains_ide_versions["RD"].version}.tar.gz"
|
|
|
|
download_link = "https://download.jetbrains.com/rider/JetBrains.Rider-${var.jetbrains_ide_versions["RD"].version}.tar.gz"
|
|
|
|
|
|
|
|
version = var.jetbrains_ide_versions["RD"].version
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
icon = try(lookup(local.jetbrains_ides, data.coder_parameter.jetbrains_ide.value).icon, "/icon/gateway.svg")
|
|
|
|
|
|
|
|
json_data = var.latest ? jsondecode(data.http.jetbrains_ide_versions[data.coder_parameter.jetbrains_ide.value].response_body) : {}
|
|
|
|
|
|
|
|
key = var.latest ? keys(local.json_data)[0] : ""
|
|
|
|
|
|
|
|
display_name = local.jetbrains_ides[data.coder_parameter.jetbrains_ide.value].name
|
|
|
|
|
|
|
|
identifier = data.coder_parameter.jetbrains_ide.value
|
|
|
|
|
|
|
|
download_link = var.latest ? local.json_data[local.key][0].downloads.linux.link : local.jetbrains_ides[data.coder_parameter.jetbrains_ide.value].download_link
|
|
|
|
|
|
|
|
build_number = var.latest ? local.json_data[local.key][0].build : local.jetbrains_ides[data.coder_parameter.jetbrains_ide.value].build_number
|
|
|
|
|
|
|
|
version = var.latest ? local.json_data[local.key][0].version : var.jetbrains_ide_versions[data.coder_parameter.jetbrains_ide.value].version
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
data "coder_parameter" "jetbrains_ide" {
|
|
|
|
data "coder_parameter" "jetbrains_ide" {
|
|
|
@ -193,9 +235,9 @@ data "coder_parameter" "jetbrains_ide" {
|
|
|
|
dynamic "option" {
|
|
|
|
dynamic "option" {
|
|
|
|
for_each = var.jetbrains_ides
|
|
|
|
for_each = var.jetbrains_ides
|
|
|
|
content {
|
|
|
|
content {
|
|
|
|
icon = lookup(local.jetbrains_ides, option.value).icon
|
|
|
|
icon = local.jetbrains_ides[option.value].icon
|
|
|
|
name = lookup(local.jetbrains_ides, option.value).name
|
|
|
|
name = local.jetbrains_ides[option.value].name
|
|
|
|
value = lookup(local.jetbrains_ides, option.value).identifier
|
|
|
|
value = option.value
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -205,8 +247,8 @@ data "coder_workspace" "me" {}
|
|
|
|
resource "coder_app" "gateway" {
|
|
|
|
resource "coder_app" "gateway" {
|
|
|
|
agent_id = var.agent_id
|
|
|
|
agent_id = var.agent_id
|
|
|
|
slug = "gateway"
|
|
|
|
slug = "gateway"
|
|
|
|
display_name = try(lookup(local.jetbrains_ides, data.coder_parameter.jetbrains_ide.value).name, "JetBrains IDE")
|
|
|
|
display_name = try(lookup(data.coder_parameter.jetbrains_ide.option, data.coder_parameter.jetbrains_ide.value).name, "JetBrains IDE")
|
|
|
|
icon = try(lookup(local.jetbrains_ides, data.coder_parameter.jetbrains_ide.value).icon, "/icon/gateway.svg")
|
|
|
|
icon = try(lookup(data.coder_parameter.jetbrains_ide.option, data.coder_parameter.jetbrains_ide.value).icon, "/icon/gateway.svg")
|
|
|
|
external = true
|
|
|
|
external = true
|
|
|
|
order = var.order
|
|
|
|
order = var.order
|
|
|
|
url = join("", [
|
|
|
|
url = join("", [
|
|
|
@ -221,36 +263,36 @@ resource "coder_app" "gateway" {
|
|
|
|
"&token=",
|
|
|
|
"&token=",
|
|
|
|
"$SESSION_TOKEN",
|
|
|
|
"$SESSION_TOKEN",
|
|
|
|
"&ide_product_code=",
|
|
|
|
"&ide_product_code=",
|
|
|
|
local.jetbrains_ides[data.coder_parameter.jetbrains_ide.value].identifier,
|
|
|
|
data.coder_parameter.jetbrains_ide.value,
|
|
|
|
"&ide_build_number=",
|
|
|
|
"&ide_build_number=",
|
|
|
|
local.jetbrains_ides[data.coder_parameter.jetbrains_ide.value].build_number,
|
|
|
|
local.build_number,
|
|
|
|
"&ide_download_link=",
|
|
|
|
"&ide_download_link=",
|
|
|
|
local.jetbrains_ides[data.coder_parameter.jetbrains_ide.value].download_link
|
|
|
|
local.download_link,
|
|
|
|
])
|
|
|
|
])
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
output "identifier" {
|
|
|
|
output "identifier" {
|
|
|
|
value = data.coder_parameter.jetbrains_ide.value
|
|
|
|
value = local.identifier
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
output "name" {
|
|
|
|
output "display_name" {
|
|
|
|
value = coder_app.gateway.display_name
|
|
|
|
value = local.display_name
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
output "icon" {
|
|
|
|
output "icon" {
|
|
|
|
value = coder_app.gateway.icon
|
|
|
|
value = local.icon
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
output "download_link" {
|
|
|
|
output "download_link" {
|
|
|
|
value = lookup(local.jetbrains_ides, data.coder_parameter.jetbrains_ide.value).download_link
|
|
|
|
value = local.download_link
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
output "build_number" {
|
|
|
|
output "build_number" {
|
|
|
|
value = lookup(local.jetbrains_ides, data.coder_parameter.jetbrains_ide.value).build_number
|
|
|
|
value = local.build_number
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
output "version" {
|
|
|
|
output "version" {
|
|
|
|
value = var.jetbrains_ide_versions[data.coder_parameter.jetbrains_ide.value].version
|
|
|
|
value = local.version
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
output "url" {
|
|
|
|
output "url" {
|
|
|
|