mirror of
https://github.com/coder/coder.git
synced 2025-07-12 00:14:10 +00:00
chore: refactor dynamic parameters into dedicated package (#18420)
This PR extracts dynamic parameter rendering logic from coderd/parameters.go into a new coderd/dynamicparameters package. Partly for organization and maintainability, but primarily to be reused in `wsbuilder` to be leveraged as validation.
This commit is contained in:
103
enterprise/coderd/testdata/parameters/dynamic/main.tf
vendored
Normal file
103
enterprise/coderd/testdata/parameters/dynamic/main.tf
vendored
Normal file
@ -0,0 +1,103 @@
|
||||
terraform {
|
||||
required_providers {
|
||||
coder = {
|
||||
source = "coder/coder"
|
||||
version = "2.5.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data "coder_workspace_owner" "me" {}
|
||||
|
||||
locals {
|
||||
isAdmin = contains(data.coder_workspace_owner.me.groups, "admin")
|
||||
}
|
||||
|
||||
data "coder_parameter" "isAdmin" {
|
||||
name = "isAdmin"
|
||||
type = "bool"
|
||||
form_type = "switch"
|
||||
default = local.isAdmin
|
||||
order = 1
|
||||
}
|
||||
|
||||
data "coder_parameter" "adminonly" {
|
||||
count = local.isAdmin ? 1 : 0
|
||||
name = "adminonly"
|
||||
form_type = "input"
|
||||
type = "string"
|
||||
default = "I am an admin!"
|
||||
order = 2
|
||||
}
|
||||
|
||||
|
||||
data "coder_parameter" "groups" {
|
||||
name = "groups"
|
||||
type = "list(string)"
|
||||
form_type = "multi-select"
|
||||
default = jsonencode([data.coder_workspace_owner.me.groups[0]])
|
||||
order = 50
|
||||
|
||||
dynamic "option" {
|
||||
for_each = data.coder_workspace_owner.me.groups
|
||||
content {
|
||||
name = option.value
|
||||
value = option.value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
locals {
|
||||
colors = {
|
||||
"red" : ["apple", "ruby"]
|
||||
"yellow" : ["banana"]
|
||||
"blue" : ["ocean", "sky"]
|
||||
}
|
||||
}
|
||||
|
||||
data "coder_parameter" "colors" {
|
||||
name = "colors"
|
||||
type = "list(string)"
|
||||
form_type = "multi-select"
|
||||
order = 100
|
||||
|
||||
dynamic "option" {
|
||||
for_each = keys(local.colors)
|
||||
content {
|
||||
name = option.value
|
||||
value = option.value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
locals {
|
||||
selected = jsondecode(data.coder_parameter.colors.value)
|
||||
things = flatten([
|
||||
for color in local.selected : local.colors[color]
|
||||
])
|
||||
}
|
||||
|
||||
data "coder_parameter" "thing" {
|
||||
name = "thing"
|
||||
type = "string"
|
||||
form_type = "dropdown"
|
||||
order = 101
|
||||
|
||||
dynamic "option" {
|
||||
for_each = local.things
|
||||
content {
|
||||
name = option.value
|
||||
value = option.value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Cool people like blue. Idk what to tell you.
|
||||
data "coder_parameter" "cool" {
|
||||
count = contains(local.selected, "blue") ? 1 : 0
|
||||
name = "cool"
|
||||
type = "bool"
|
||||
form_type = "switch"
|
||||
order = 102
|
||||
default = "true"
|
||||
}
|
Reference in New Issue
Block a user