mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
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:
co-authored by
Danny Kopping
evgeniy-scherbina
parent
074ec2887d
commit
0b2b643ce2
@@ -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)
|
||||
}
|
||||
|
||||
@@ -828,6 +828,9 @@ func TestConvertResources(t *testing.T) {
|
||||
Name: "Sample",
|
||||
Value: "A1B2C3",
|
||||
}},
|
||||
Prebuild: &proto.Prebuild{
|
||||
Instances: 4,
|
||||
},
|
||||
}},
|
||||
},
|
||||
"devcontainer": {
|
||||
|
||||
Vendored
+1
-1
@@ -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
@@ -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
@@ -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
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user