feat: persist prebuild definitions on template import (#16951)

This PR allows provisioners to recognise and report prebuild definitions
to the coder control plane. It also allows the coder control plane to
then persist these to its store.

closes https://github.com/coder/internal/issues/507

---------

Signed-off-by: Danny Kopping <dannykopping@gmail.com>
Co-authored-by: Danny Kopping <dannykopping@gmail.com>
Co-authored-by: evgeniy-scherbina <evgeniy.shcherbina.es@gmail.com>
This commit is contained in:
Sas Swart
2025-04-07 10:35:28 +02:00
committed by GitHub
co-authored by Danny Kopping evgeniy-scherbina
parent 074ec2887d
commit 0b2b643ce2
25 changed files with 1207 additions and 843 deletions
+15
View File
@@ -3,6 +3,7 @@ package terraform
import (
"context"
"fmt"
"math"
"strings"
"github.com/awalterschulze/gographviz"
@@ -883,10 +884,24 @@ func ConvertState(ctx context.Context, modules []*tfjson.StateModule, rawGraph s
)
}
if len(preset.Prebuilds) != 1 {
logger.Warn(
ctx,
"coder_workspace_preset must have exactly one prebuild block",
)
}
var prebuildInstances int32
if len(preset.Prebuilds) > 0 {
prebuildInstances = int32(math.Min(math.MaxInt32, float64(preset.Prebuilds[0].Instances)))
}
protoPreset := &proto.Preset{
Name: preset.Name,
Parameters: presetParameters,
Prebuild: &proto.Prebuild{
Instances: prebuildInstances,
},
}
if slice.Contains(duplicatedPresetNames, preset.Name) {
duplicatedPresetNames = append(duplicatedPresetNames, preset.Name)
}
+3
View File
@@ -828,6 +828,9 @@ func TestConvertResources(t *testing.T) {
Name: "Sample",
Value: "A1B2C3",
}},
Prebuild: &proto.Prebuild{
Instances: 4,
},
}},
},
"devcontainer": {
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "2.1.3"
version = "2.3.0-pre2"
}
docker = {
source = "kreuzwerker/docker"
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "2.1.3"
version = "2.3.0-pre2"
}
docker = {
source = "kreuzwerker/docker"
@@ -2,7 +2,7 @@ terraform {
required_providers {
coder = {
source = "coder/coder"
version = "2.1.3"
version = "2.3.0-pre2"
}
}
}
@@ -22,9 +22,9 @@ data "coder_workspace_preset" "MyFirstProject" {
name = "My First Project"
parameters = {
(data.coder_parameter.sample.name) = "A1B2C3"
# TODO (sasswart): Add support for parameters from external modules
# (data.coder_parameter.first_parameter_from_module.name) = "A1B2C3"
# (data.coder_parameter.child_first_parameter_from_module.name) = "A1B2C3"
}
prebuilds {
instances = 4
}
}
+24 -4
View File
@@ -21,6 +21,7 @@
"motd_file": null,
"order": null,
"os": "windows",
"resources_monitoring": [],
"shutdown_script": null,
"startup_script": null,
"startup_script_behavior": "non-blocking",
@@ -29,6 +30,7 @@
"sensitive_values": {
"display_apps": [],
"metadata": [],
"resources_monitoring": [],
"token": true
}
},
@@ -69,6 +71,7 @@
"motd_file": null,
"order": null,
"os": "windows",
"resources_monitoring": [],
"shutdown_script": null,
"startup_script": null,
"startup_script_behavior": "non-blocking",
@@ -79,12 +82,14 @@
"id": true,
"init_script": true,
"metadata": [],
"resources_monitoring": [],
"token": true
},
"before_sensitive": false,
"after_sensitive": {
"display_apps": [],
"metadata": [],
"resources_monitoring": [],
"token": true
}
}
@@ -156,10 +161,18 @@
"name": "My First Project",
"parameters": {
"Sample": "A1B2C3"
}
},
"prebuilds": [
{
"instances": 4
}
]
},
"sensitive_values": {
"parameters": {}
"parameters": {},
"prebuilds": [
{}
]
}
}
],
@@ -293,7 +306,7 @@
"coder": {
"name": "coder",
"full_name": "registry.terraform.io/coder/coder",
"version_constraint": "2.1.3"
"version_constraint": "2.3.0-pre2"
},
"module.this_is_external_module:docker": {
"name": "docker",
@@ -372,7 +385,14 @@
"data.coder_parameter.sample.name",
"data.coder_parameter.sample"
]
}
},
"prebuilds": [
{
"instances": {
"constant_value": 4
}
}
]
},
"schema_version": 0
}
+12 -2
View File
@@ -43,10 +43,18 @@
"name": "My First Project",
"parameters": {
"Sample": "A1B2C3"
}
},
"prebuilds": [
{
"instances": 4
}
]
},
"sensitive_values": {
"parameters": {}
"parameters": {},
"prebuilds": [
{}
]
}
},
{
@@ -77,6 +85,7 @@
"motd_file": null,
"order": null,
"os": "windows",
"resources_monitoring": [],
"shutdown_script": null,
"startup_script": null,
"startup_script_behavior": "non-blocking",
@@ -88,6 +97,7 @@
{}
],
"metadata": [],
"resources_monitoring": [],
"token": true
}
},