diff --git a/jetbrains-gateway/main.tf b/jetbrains-gateway/main.tf index b5a6f55..54e747b 100644 --- a/jetbrains-gateway/main.tf +++ b/jetbrains-gateway/main.tf @@ -2,7 +2,7 @@ terraform { required_version = ">= 1.0" required_providers { - aws = { + coder = { source = "coder/coder" version = ">= 0.11" } @@ -20,22 +20,21 @@ variable "gateway_project_directory" { } variable "gateway_ide_product_code" { - type = string - description = "The IDE product codes, comma-separated. e.g. for GoLand and WebStorm: `GO,WS` and for all: `ALL`" - + type = list(string) + description = "The list of IDE product codes, e.g. ['GO', 'WS'] or ['ALL']" + default = ["ALL"] validation { condition = ( - lower(var.gateway_ide_product_code) == "all" || + length(var.gateway_ide_product_code) == 1 && var.gateway_ide_product_code[0] == "ALL" || alltrue([ - for code in split(",", trimspace(var.gateway_ide_product_code)) : - contains(["IU", "IC", "PS", "WS", "PY", "PC", "CL", "GO", "DB", "RD"], trimspace(code)) + for code in var.gateway_ide_product_code : contains(["IU", "IC", "PS", "WS", "PY", "PC", "CL", "GO", "DB", "RD"], code) ]) ) - error_message = "The gateway_ide_product_code must be ALL or a comma-separated list of valid product codes. https://plugins.jetbrains.com/docs/marketplace/product-codes.html" + error_message = "The gateway_ide_product_code must be ['ALL'] or a list of valid product codes. https://plugins.jetbrains.com/docs/marketplace/product-codes.html" } - default = "all" } + locals { gateway_ides = { "GO" = { @@ -100,7 +99,7 @@ data "coder_parameter" "jetbrains_ide" { default = local.gateway_ides["GO"].value dynamic "option" { - for_each = lower(var.gateway_ide_product_code) == "all" ? local.gateway_ides : { for key, value in local.gateway_ides : key => value if key == var.gateway_ide_product_code } + for_each = contains(var.gateway_ide_product_code, "ALL") ? local.gateway_ides : { for key, value in local.gateway_ides : key => value if contains(var.gateway_ide_product_code, key) } content { icon = option.value.icon name = option.value.name