From a61b8bc5cee008622f5035f706eb58f0bb4e0b9a Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Fri, 21 Nov 2025 07:27:20 -0600 Subject: [PATCH] test: add golden file test for ConvertState (#20832) Refactoring `ConvertState` is something we should eventually do. This PR adds a golden file unit test for the output of `ConvertState` (even errors). That way if a refactor occurs, we can verify the output is unchanged for our test cases. --- provisioner/terraform/resources_test.go | 127 ++++++++++++++++++ .../ai-tasks-app/converted_state.plan.golden | 21 +++ .../ai-tasks-app/converted_state.state.golden | 22 +++ .../converted_state.plan.golden | 31 +++++ .../converted_state.state.golden | 33 +++++ .../converted_state.plan.golden | 21 +++ .../converted_state.state.golden | 22 +++ .../converted_state.plan.golden | 34 +++++ .../converted_state.state.golden | 35 +++++ .../converted_state.plan.golden | 37 +++++ .../converted_state.state.golden | 38 ++++++ .../converted_state.plan.golden | 37 +++++ .../converted_state.state.golden | 38 ++++++ .../devcontainer/converted_state.plan.golden | 52 +++++++ .../devcontainer/converted_state.state.golden | 53 ++++++++ .../converted_state.plan.golden | 28 ++++ .../converted_state.state.golden | 29 ++++ .../display-apps/converted_state.plan.golden | 31 +++++ .../display-apps/converted_state.state.golden | 32 +++++ .../converted_state.plan.golden | 33 +++++ .../converted_state.state.golden | 34 +++++ .../converted_state.plan.golden | 41 ++++++ .../converted_state.state.golden | 42 ++++++ .../instance-id/converted_state.plan.golden | 33 +++++ .../instance-id/converted_state.state.golden | 34 +++++ .../converted_state.plan.golden | 85 ++++++++++++ .../converted_state.state.golden | 86 ++++++++++++ .../mapped-apps/converted_state.plan.golden | 47 +++++++ .../mapped-apps/converted_state.state.golden | 48 +++++++ .../converted_state.plan.golden | 84 ++++++++++++ .../converted_state.state.golden | 86 ++++++++++++ .../converted_state.plan.golden | 84 ++++++++++++ .../converted_state.state.golden | 86 ++++++++++++ .../converted_state.plan.golden | 91 +++++++++++++ .../converted_state.state.golden | 93 +++++++++++++ .../converted_state.plan.golden | 75 +++++++++++ .../converted_state.state.golden | 77 +++++++++++ .../converted_state.plan.golden | 95 +++++++++++++ .../converted_state.state.golden | 99 ++++++++++++++ .../multiple-apps/converted_state.plan.golden | 59 ++++++++ .../converted_state.state.golden | 60 +++++++++ .../converted_state.plan.golden | 1 + .../converted_state.state.golden | 1 + .../converted_state.plan.golden | 67 +++++++++ .../converted_state.state.golden | 68 ++++++++++ .../presets/converted_state.plan.golden | 102 ++++++++++++++ .../presets/converted_state.state.golden | 103 ++++++++++++++ .../converted_state.plan.golden | 1 + .../converted_state.state.golden | 1 + .../converted_state.plan.golden | 63 +++++++++ .../converted_state.state.golden | 65 +++++++++ .../converted_state.plan.golden | 49 +++++++ .../converted_state.state.golden | 50 +++++++ .../converted_state.plan.golden | 78 +++++++++++ .../converted_state.state.golden | 79 +++++++++++ .../converted_state.plan.golden | 119 ++++++++++++++++ .../converted_state.state.golden | 120 +++++++++++++++++ 57 files changed, 3160 insertions(+) create mode 100644 provisioner/terraform/testdata/resources/ai-tasks-app/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/ai-tasks-app/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/ai-tasks-multiple/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/ai-tasks-multiple/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/ai-tasks-sidebar/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/ai-tasks-sidebar/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/calling-module/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/calling-module/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/chaining-resources/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/chaining-resources/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/conflicting-resources/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/conflicting-resources/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/devcontainer/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/devcontainer/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/display-apps-disabled/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/display-apps-disabled/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/display-apps/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/display-apps/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/external-agents/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/external-agents/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/external-auth-providers/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/external-auth-providers/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/instance-id/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/instance-id/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/kubernetes-metadata/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/kubernetes-metadata/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/mapped-apps/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/mapped-apps/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/multiple-agents-multiple-apps/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/multiple-agents-multiple-apps/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/multiple-agents-multiple-envs/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/multiple-agents-multiple-envs/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/multiple-agents-multiple-monitors/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/multiple-agents-multiple-monitors/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/multiple-agents-multiple-scripts/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/multiple-agents-multiple-scripts/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/multiple-agents/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/multiple-agents/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/multiple-apps/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/multiple-apps/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/presets-multiple-defaults/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/presets-multiple-defaults/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/presets-single-default/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/presets-single-default/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/presets/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/presets/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/resource-metadata-duplicate/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/resource-metadata-duplicate/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/resource-metadata/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/resource-metadata/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/rich-parameters-order/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/rich-parameters-order/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/rich-parameters-validation/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/rich-parameters-validation/converted_state.state.golden create mode 100644 provisioner/terraform/testdata/resources/rich-parameters/converted_state.plan.golden create mode 100644 provisioner/terraform/testdata/resources/rich-parameters/converted_state.state.golden diff --git a/provisioner/terraform/resources_test.go b/provisioner/terraform/resources_test.go index a2c5b536ac..7fb2a33f0e 100644 --- a/provisioner/terraform/resources_test.go +++ b/provisioner/terraform/resources_test.go @@ -2,16 +2,19 @@ package terraform_test import ( "context" + "crypto/sha256" "encoding/json" "fmt" "os" "path/filepath" "runtime" + "slices" "sort" "strings" "testing" "github.com/google/go-cmp/cmp" + "github.com/google/uuid" tfjson "github.com/hashicorp/terraform-json" "github.com/stretchr/testify/require" protobuf "google.golang.org/protobuf/proto" @@ -30,6 +33,115 @@ func ctxAndLogger(t *testing.T) (context.Context, slog.Logger) { return context.Background(), testutil.Logger(t) } +// TestConvertStateGolden compares the output of ConvertState to a golden +// file to prevent regressions. If the logic changes, update the golden files +// accordingly. +// +// This was created to aid in refactoring `ConvertState`. +func TestConvertStateGolden(t *testing.T) { + t.Parallel() + + testResourceDirectories := filepath.Join("testdata", "resources") + entries, err := os.ReadDir(testResourceDirectories) + require.NoError(t, err) + + for _, testDirectory := range entries { + if !testDirectory.IsDir() { + continue + } + + testFiles, err := os.ReadDir(filepath.Join(testResourceDirectories, testDirectory.Name())) + require.NoError(t, err) + + // ConvertState works on both a plan file and a state file. + // The test should create a golden file for both. + for _, step := range []string{"plan", "state"} { + srcIdc := slices.IndexFunc(testFiles, func(entry os.DirEntry) bool { + return strings.HasSuffix(entry.Name(), fmt.Sprintf(".tf%s.json", step)) + }) + dotIdx := slices.IndexFunc(testFiles, func(entry os.DirEntry) bool { + return strings.HasSuffix(entry.Name(), fmt.Sprintf(".tf%s.dot", step)) + }) + + // If the directory is missing these files, we cannot run ConvertState + // on it. So it's skipped. + if srcIdc == -1 || dotIdx == -1 { + continue + } + + t.Run(step+"_"+testDirectory.Name(), func(t *testing.T) { + t.Parallel() + testDirectoryPath := filepath.Join(testResourceDirectories, testDirectory.Name()) + planFile := filepath.Join(testDirectoryPath, testFiles[srcIdc].Name()) + dotFile := filepath.Join(testDirectoryPath, testFiles[dotIdx].Name()) + + ctx := testutil.Context(t, testutil.WaitMedium) + logger := slogtest.Make(t, nil) + + // Gather plan + tfStepRaw, err := os.ReadFile(planFile) + require.NoError(t, err) + + var modules []*tfjson.StateModule + switch step { + case "plan": + var tfPlan tfjson.Plan + err = json.Unmarshal(tfStepRaw, &tfPlan) + require.NoError(t, err) + + modules = []*tfjson.StateModule{tfPlan.PlannedValues.RootModule} + if tfPlan.PriorState != nil { + modules = append(modules, tfPlan.PriorState.Values.RootModule) + } + case "state": + var tfState tfjson.State + err = json.Unmarshal(tfStepRaw, &tfState) + require.NoError(t, err) + modules = []*tfjson.StateModule{tfState.Values.RootModule} + default: + t.Fatalf("unknown step: %s", step) + } + + // Gather graph + dotFileRaw, err := os.ReadFile(dotFile) + require.NoError(t, err) + + // expectedOutput is `any` to support errors too. If `ConvertState` returns an + // error, that error is the golden file output. + var expectedOutput any + state, err := terraform.ConvertState(ctx, modules, string(dotFileRaw), logger) + if err == nil { + sortResources(state.Resources) + sortExternalAuthProviders(state.ExternalAuthProviders) + deterministicAppIDs(state.Resources) + expectedOutput = state + } else { + // Write the error to the file then. Track errors as much as valid paths. + expectedOutput = err.Error() + } + + expPath := filepath.Join(testDirectoryPath, fmt.Sprintf("converted_state.%s.golden", step)) + if *updateGoldenFiles { + gotBytes, err := json.MarshalIndent(expectedOutput, "", " ") + require.NoError(t, err, "marshaling converted state to JSON") + // Newline at end of file for git purposes + err = os.WriteFile(expPath, append(gotBytes, '\n'), 0o600) + require.NoError(t, err) + return + } + + gotBytes, err := json.Marshal(expectedOutput) + require.NoError(t, err, "marshaling converted state to JSON") + + expBytes, err := os.ReadFile(expPath) + require.NoError(t, err) + + require.JSONEq(t, string(expBytes), string(gotBytes), "converted state") + }) + } + } +} + func TestConvertResources(t *testing.T) { t.Parallel() // nolint:dogsled @@ -1669,3 +1781,18 @@ func sortExternalAuthProviders(providers []*proto.ExternalAuthProviderResource) return strings.Compare(providers[i].Id, providers[j].Id) == -1 }) } + +// deterministicAppIDs handles setting agent app ids to something deterministic. +// In plan files, ids are not present. In state files, they are. +// It is simpler for comparisons if we just set it to something deterministic. +func deterministicAppIDs(resources []*proto.Resource) { + for _, resource := range resources { + for _, agent := range resource.Agents { + for _, app := range agent.Apps { + data := sha256.Sum256([]byte(app.Slug + app.DisplayName)) + id, _ := uuid.FromBytes(data[:16]) + app.Id = id.String() + } + } + } +} diff --git a/provisioner/terraform/testdata/resources/ai-tasks-app/converted_state.plan.golden b/provisioner/terraform/testdata/resources/ai-tasks-app/converted_state.plan.golden new file mode 100644 index 0000000000..84ba18790a --- /dev/null +++ b/provisioner/terraform/testdata/resources/ai-tasks-app/converted_state.plan.golden @@ -0,0 +1,21 @@ +{ + "Resources": [ + { + "name": "a", + "type": "coder_ai_task" + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [ + { + "sidebar_app": { + "id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd" + }, + "app_id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd" + } + ], + "HasAITasks": true, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/ai-tasks-app/converted_state.state.golden b/provisioner/terraform/testdata/resources/ai-tasks-app/converted_state.state.golden new file mode 100644 index 0000000000..7be30d4b4d --- /dev/null +++ b/provisioner/terraform/testdata/resources/ai-tasks-app/converted_state.state.golden @@ -0,0 +1,22 @@ +{ + "Resources": [ + { + "name": "a", + "type": "coder_ai_task" + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [ + { + "id": "c4f032b8-97e4-42b0-aa2f-30a9e698f8d4", + "sidebar_app": { + "id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd" + }, + "app_id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd" + } + ], + "HasAITasks": true, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/ai-tasks-multiple/converted_state.plan.golden b/provisioner/terraform/testdata/resources/ai-tasks-multiple/converted_state.plan.golden new file mode 100644 index 0000000000..687d4920b8 --- /dev/null +++ b/provisioner/terraform/testdata/resources/ai-tasks-multiple/converted_state.plan.golden @@ -0,0 +1,31 @@ +{ + "Resources": [ + { + "name": "a", + "type": "coder_ai_task" + }, + { + "name": "b", + "type": "coder_ai_task" + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [ + { + "sidebar_app": { + "id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd" + }, + "app_id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd" + }, + { + "sidebar_app": { + "id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd" + }, + "app_id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd" + } + ], + "HasAITasks": true, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/ai-tasks-multiple/converted_state.state.golden b/provisioner/terraform/testdata/resources/ai-tasks-multiple/converted_state.state.golden new file mode 100644 index 0000000000..10e510eac1 --- /dev/null +++ b/provisioner/terraform/testdata/resources/ai-tasks-multiple/converted_state.state.golden @@ -0,0 +1,33 @@ +{ + "Resources": [ + { + "name": "a", + "type": "coder_ai_task" + }, + { + "name": "b", + "type": "coder_ai_task" + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [ + { + "id": "89e6ab36-2e98-4d13-9b4c-69b7588b7e1d", + "sidebar_app": { + "id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd" + }, + "app_id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd" + }, + { + "id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd", + "sidebar_app": { + "id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd" + }, + "app_id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd" + } + ], + "HasAITasks": true, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/ai-tasks-sidebar/converted_state.plan.golden b/provisioner/terraform/testdata/resources/ai-tasks-sidebar/converted_state.plan.golden new file mode 100644 index 0000000000..84ba18790a --- /dev/null +++ b/provisioner/terraform/testdata/resources/ai-tasks-sidebar/converted_state.plan.golden @@ -0,0 +1,21 @@ +{ + "Resources": [ + { + "name": "a", + "type": "coder_ai_task" + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [ + { + "sidebar_app": { + "id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd" + }, + "app_id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd" + } + ], + "HasAITasks": true, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/ai-tasks-sidebar/converted_state.state.golden b/provisioner/terraform/testdata/resources/ai-tasks-sidebar/converted_state.state.golden new file mode 100644 index 0000000000..4984e279fb --- /dev/null +++ b/provisioner/terraform/testdata/resources/ai-tasks-sidebar/converted_state.state.golden @@ -0,0 +1,22 @@ +{ + "Resources": [ + { + "name": "a", + "type": "coder_ai_task" + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [ + { + "id": "89e6ab36-2e98-4d13-9b4c-69b7588b7e1d", + "sidebar_app": { + "id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd" + }, + "app_id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd" + } + ], + "HasAITasks": true, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/calling-module/converted_state.plan.golden b/provisioner/terraform/testdata/resources/calling-module/converted_state.plan.golden new file mode 100644 index 0000000000..ed13fb19fd --- /dev/null +++ b/provisioner/terraform/testdata/resources/calling-module/converted_state.plan.golden @@ -0,0 +1,34 @@ +{ + "Resources": [ + { + "name": "example", + "type": "null_resource", + "agents": [ + { + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ], + "module_path": "module.module" + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/calling-module/converted_state.state.golden b/provisioner/terraform/testdata/resources/calling-module/converted_state.state.golden new file mode 100644 index 0000000000..cefa9f257f --- /dev/null +++ b/provisioner/terraform/testdata/resources/calling-module/converted_state.state.golden @@ -0,0 +1,35 @@ +{ + "Resources": [ + { + "name": "example", + "type": "null_resource", + "agents": [ + { + "id": "8cb7c83a-eddb-45e9-a78c-4b50d0f10e5e", + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "59bcf169-14fe-497d-9a97-709c1d837848" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ], + "module_path": "module.module" + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/chaining-resources/converted_state.plan.golden b/provisioner/terraform/testdata/resources/chaining-resources/converted_state.plan.golden new file mode 100644 index 0000000000..5314f549e7 --- /dev/null +++ b/provisioner/terraform/testdata/resources/chaining-resources/converted_state.plan.golden @@ -0,0 +1,37 @@ +{ + "Resources": [ + { + "name": "a", + "type": "null_resource" + }, + { + "name": "b", + "type": "null_resource", + "agents": [ + { + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/chaining-resources/converted_state.state.golden b/provisioner/terraform/testdata/resources/chaining-resources/converted_state.state.golden new file mode 100644 index 0000000000..48879277d6 --- /dev/null +++ b/provisioner/terraform/testdata/resources/chaining-resources/converted_state.state.golden @@ -0,0 +1,38 @@ +{ + "Resources": [ + { + "name": "a", + "type": "null_resource" + }, + { + "name": "b", + "type": "null_resource", + "agents": [ + { + "id": "d9f5159f-58be-4035-b13c-8e9d988ea2fc", + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "20b314d3-9acc-4ae7-8fd7-b8fcfc456e06" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/conflicting-resources/converted_state.plan.golden b/provisioner/terraform/testdata/resources/conflicting-resources/converted_state.plan.golden new file mode 100644 index 0000000000..ee1553bc9b --- /dev/null +++ b/provisioner/terraform/testdata/resources/conflicting-resources/converted_state.plan.golden @@ -0,0 +1,37 @@ +{ + "Resources": [ + { + "name": "first", + "type": "null_resource", + "agents": [ + { + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + }, + { + "name": "second", + "type": "null_resource" + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/conflicting-resources/converted_state.state.golden b/provisioner/terraform/testdata/resources/conflicting-resources/converted_state.state.golden new file mode 100644 index 0000000000..6da4224355 --- /dev/null +++ b/provisioner/terraform/testdata/resources/conflicting-resources/converted_state.state.golden @@ -0,0 +1,38 @@ +{ + "Resources": [ + { + "name": "first", + "type": "null_resource", + "agents": [ + { + "id": "e78db244-3076-4c04-8ac3-5a55dae032e7", + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "c0a7e7f5-2616-429e-ac69-a8c3d9bbbb5d" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + }, + { + "name": "second", + "type": "null_resource" + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/devcontainer/converted_state.plan.golden b/provisioner/terraform/testdata/resources/devcontainer/converted_state.plan.golden new file mode 100644 index 0000000000..fded49faa9 --- /dev/null +++ b/provisioner/terraform/testdata/resources/devcontainer/converted_state.plan.golden @@ -0,0 +1,52 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "devcontainers": [ + { + "workspace_folder": "/workspace1", + "name": "dev1" + }, + { + "workspace_folder": "/workspace2", + "config_path": "/workspace2/.devcontainer/devcontainer.json", + "name": "dev2" + } + ], + "api_key_scope": "all" + } + ] + }, + { + "name": "dev1", + "type": "coder_devcontainer" + }, + { + "name": "dev2", + "type": "coder_devcontainer" + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/devcontainer/converted_state.state.golden b/provisioner/terraform/testdata/resources/devcontainer/converted_state.state.golden new file mode 100644 index 0000000000..fe89c7bcc7 --- /dev/null +++ b/provisioner/terraform/testdata/resources/devcontainer/converted_state.state.golden @@ -0,0 +1,53 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "id": "eb1fa705-34c6-405b-a2ec-70e4efd1614e", + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "e8663cf8-6991-40ca-b534-b9d48575cc4e" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "devcontainers": [ + { + "workspace_folder": "/workspace1", + "name": "dev1" + }, + { + "workspace_folder": "/workspace2", + "config_path": "/workspace2/.devcontainer/devcontainer.json", + "name": "dev2" + } + ], + "api_key_scope": "all" + } + ] + }, + { + "name": "dev1", + "type": "coder_devcontainer" + }, + { + "name": "dev2", + "type": "coder_devcontainer" + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/display-apps-disabled/converted_state.plan.golden b/provisioner/terraform/testdata/resources/display-apps-disabled/converted_state.plan.golden new file mode 100644 index 0000000000..cdce3f15b2 --- /dev/null +++ b/provisioner/terraform/testdata/resources/display-apps-disabled/converted_state.plan.golden @@ -0,0 +1,28 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": {}, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/display-apps-disabled/converted_state.state.golden b/provisioner/terraform/testdata/resources/display-apps-disabled/converted_state.state.golden new file mode 100644 index 0000000000..924814c69a --- /dev/null +++ b/provisioner/terraform/testdata/resources/display-apps-disabled/converted_state.state.golden @@ -0,0 +1,29 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "id": "149d8647-ec80-4a63-9aa5-2c82452e69a6", + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "bd20db5f-7645-411f-b253-033e494e6c89" + }, + "connection_timeout_seconds": 120, + "display_apps": {}, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/display-apps/converted_state.plan.golden b/provisioner/terraform/testdata/resources/display-apps/converted_state.plan.golden new file mode 100644 index 0000000000..d7fe5795eb --- /dev/null +++ b/provisioner/terraform/testdata/resources/display-apps/converted_state.plan.golden @@ -0,0 +1,31 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode_insiders": true, + "web_terminal": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/display-apps/converted_state.state.golden b/provisioner/terraform/testdata/resources/display-apps/converted_state.state.golden new file mode 100644 index 0000000000..63ef183e89 --- /dev/null +++ b/provisioner/terraform/testdata/resources/display-apps/converted_state.state.golden @@ -0,0 +1,32 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "id": "c49a0e36-fd67-4946-a75f-ff52b77e9f95", + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "d9775224-6ecb-4c53-b24d-931555a7c86a" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode_insiders": true, + "web_terminal": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/external-agents/converted_state.plan.golden b/provisioner/terraform/testdata/resources/external-agents/converted_state.plan.golden new file mode 100644 index 0000000000..2a806a7e08 --- /dev/null +++ b/provisioner/terraform/testdata/resources/external-agents/converted_state.plan.golden @@ -0,0 +1,33 @@ +{ + "Resources": [ + { + "name": "dev1", + "type": "coder_external_agent", + "agents": [ + { + "name": "dev1", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": true +} diff --git a/provisioner/terraform/testdata/resources/external-agents/converted_state.state.golden b/provisioner/terraform/testdata/resources/external-agents/converted_state.state.golden new file mode 100644 index 0000000000..da0af3790a --- /dev/null +++ b/provisioner/terraform/testdata/resources/external-agents/converted_state.state.golden @@ -0,0 +1,34 @@ +{ + "Resources": [ + { + "name": "dev1", + "type": "coder_external_agent", + "agents": [ + { + "id": "15a35370-3b2e-4ee7-8b28-81cef0152d8b", + "name": "dev1", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "d054c66b-cc5c-41ae-aa0c-2098a1075272" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": true +} diff --git a/provisioner/terraform/testdata/resources/external-auth-providers/converted_state.plan.golden b/provisioner/terraform/testdata/resources/external-auth-providers/converted_state.plan.golden new file mode 100644 index 0000000000..91bc3bdf09 --- /dev/null +++ b/provisioner/terraform/testdata/resources/external-auth-providers/converted_state.plan.golden @@ -0,0 +1,41 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [ + { + "id": "github" + }, + { + "id": "gitlab", + "optional": true + } + ], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/external-auth-providers/converted_state.state.golden b/provisioner/terraform/testdata/resources/external-auth-providers/converted_state.state.golden new file mode 100644 index 0000000000..87a47db120 --- /dev/null +++ b/provisioner/terraform/testdata/resources/external-auth-providers/converted_state.state.golden @@ -0,0 +1,42 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "id": "1682dc74-4f8a-49da-8c36-3df839f5c1f0", + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "c018b99e-4370-409c-b81d-6305c5cd9078" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [ + { + "id": "github" + }, + { + "id": "gitlab", + "optional": true + } + ], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/instance-id/converted_state.plan.golden b/provisioner/terraform/testdata/resources/instance-id/converted_state.plan.golden new file mode 100644 index 0000000000..954495aa0b --- /dev/null +++ b/provisioner/terraform/testdata/resources/instance-id/converted_state.plan.golden @@ -0,0 +1,33 @@ +{ + "Resources": [ + { + "name": "main", + "type": "null_resource", + "agents": [ + { + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "InstanceId": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/instance-id/converted_state.state.golden b/provisioner/terraform/testdata/resources/instance-id/converted_state.state.golden new file mode 100644 index 0000000000..031e264526 --- /dev/null +++ b/provisioner/terraform/testdata/resources/instance-id/converted_state.state.golden @@ -0,0 +1,34 @@ +{ + "Resources": [ + { + "name": "main", + "type": "null_resource", + "agents": [ + { + "id": "8e130bb7-437f-4892-a2e4-ae892f95d824", + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "InstanceId": "example" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/kubernetes-metadata/converted_state.plan.golden b/provisioner/terraform/testdata/resources/kubernetes-metadata/converted_state.plan.golden new file mode 100644 index 0000000000..b9400c3917 --- /dev/null +++ b/provisioner/terraform/testdata/resources/kubernetes-metadata/converted_state.plan.golden @@ -0,0 +1,85 @@ +{ + "Resources": [ + { + "name": "coder_workspace", + "type": "kubernetes_config_map" + }, + { + "name": "coder_workspace", + "type": "kubernetes_role" + }, + { + "name": "coder_workspace", + "type": "kubernetes_role_binding" + }, + { + "name": "coder_workspace", + "type": "kubernetes_secret" + }, + { + "name": "coder_workspace", + "type": "kubernetes_service_account" + }, + { + "name": "main", + "type": "kubernetes_pod", + "agents": [ + { + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "apps": [ + { + "slug": "code-server", + "display_name": "code-server", + "url": "http://localhost:13337?folder=/home/coder", + "icon": "/icon/code.svg", + "open_in": 1, + "id": "73971185-3dea-f456-c568-4f285dbcdb52" + } + ], + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "scripts": [ + { + "display_name": "Startup Script", + "icon": "/emojis/25b6-fe0f.png", + "script": " #!/bin/bash\n # home folder can be empty, so copying default bash settings\n if [ ! -f ~/.profile ]; then\n cp /etc/skel/.profile $HOME\n fi\n if [ ! -f ~/.bashrc ]; then\n cp /etc/skel/.bashrc $HOME\n fi\n # install and start code-server\n curl -fsSL https://code-server.dev/install.sh | sh | tee code-server-install.log\n code-server --auth none --port 13337 | tee code-server-install.log \u0026\n", + "run_on_start": true, + "log_path": "coder-startup-script.log" + } + ], + "resources_monitoring": {} + } + ], + "metadata": [ + { + "key": "cpu", + "value": "1" + }, + { + "key": "memory", + "value": "1Gi" + }, + { + "key": "gpu", + "value": "1" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/kubernetes-metadata/converted_state.state.golden b/provisioner/terraform/testdata/resources/kubernetes-metadata/converted_state.state.golden new file mode 100644 index 0000000000..d70291e74a --- /dev/null +++ b/provisioner/terraform/testdata/resources/kubernetes-metadata/converted_state.state.golden @@ -0,0 +1,86 @@ +{ + "Resources": [ + { + "name": "coder_workspace", + "type": "kubernetes_config_map" + }, + { + "name": "coder_workspace", + "type": "kubernetes_role" + }, + { + "name": "coder_workspace", + "type": "kubernetes_role_binding" + }, + { + "name": "coder_workspace", + "type": "kubernetes_secret" + }, + { + "name": "coder_workspace", + "type": "kubernetes_service_account" + }, + { + "name": "main", + "type": "kubernetes_pod", + "agents": [ + { + "id": "b65f06b5-8698-4e47-80fb-e78f9b920e3d", + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "apps": [ + { + "slug": "code-server", + "display_name": "code-server", + "url": "http://localhost:13337?folder=/home/coder", + "icon": "/icon/code.svg", + "open_in": 1, + "id": "73971185-3dea-f456-c568-4f285dbcdb52" + } + ], + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "scripts": [ + { + "display_name": "Startup Script", + "icon": "/emojis/25b6-fe0f.png", + "script": " #!/bin/bash\n # home folder can be empty, so copying default bash settings\n if [ ! -f ~/.profile ]; then\n cp /etc/skel/.profile $HOME\n fi\n if [ ! -f ~/.bashrc ]; then\n cp /etc/skel/.bashrc $HOME\n fi\n # install and start code-server\n curl -fsSL https://code-server.dev/install.sh | sh | tee code-server-install.log\n code-server --auth none --port 13337 | tee code-server-install.log \u0026\n", + "run_on_start": true, + "log_path": "coder-startup-script.log" + } + ], + "resources_monitoring": {} + } + ], + "metadata": [ + { + "key": "cpu", + "value": "1" + }, + { + "key": "memory", + "value": "1Gi" + }, + { + "key": "gpu", + "value": "1" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/mapped-apps/converted_state.plan.golden b/provisioner/terraform/testdata/resources/mapped-apps/converted_state.plan.golden new file mode 100644 index 0000000000..b868351cd0 --- /dev/null +++ b/provisioner/terraform/testdata/resources/mapped-apps/converted_state.plan.golden @@ -0,0 +1,47 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "name": "dev", + "operating_system": "linux", + "architecture": "amd64", + "apps": [ + { + "slug": "app1", + "display_name": "app1", + "open_in": 1, + "id": "634ec976-f595-9122-c51e-8da2e3c6e3ce" + }, + { + "slug": "app2", + "display_name": "app2", + "open_in": 1, + "id": "13922208-d2bc-196b-54cb-3fc084916309" + } + ], + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/mapped-apps/converted_state.state.golden b/provisioner/terraform/testdata/resources/mapped-apps/converted_state.state.golden new file mode 100644 index 0000000000..e932aa73dc --- /dev/null +++ b/provisioner/terraform/testdata/resources/mapped-apps/converted_state.state.golden @@ -0,0 +1,48 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "id": "bac96c8e-acef-4e1c-820d-0933d6989874", + "name": "dev", + "operating_system": "linux", + "architecture": "amd64", + "apps": [ + { + "slug": "app1", + "display_name": "app1", + "open_in": 1, + "id": "634ec976-f595-9122-c51e-8da2e3c6e3ce" + }, + { + "slug": "app2", + "display_name": "app2", + "open_in": 1, + "id": "13922208-d2bc-196b-54cb-3fc084916309" + } + ], + "Auth": { + "Token": "d52f0d63-5b51-48b3-b342-fd48de4bf957" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/multiple-agents-multiple-apps/converted_state.plan.golden b/provisioner/terraform/testdata/resources/multiple-agents-multiple-apps/converted_state.plan.golden new file mode 100644 index 0000000000..5cfdb43ad5 --- /dev/null +++ b/provisioner/terraform/testdata/resources/multiple-agents-multiple-apps/converted_state.plan.golden @@ -0,0 +1,84 @@ +{ + "Resources": [ + { + "name": "dev1", + "type": "null_resource", + "agents": [ + { + "name": "dev1", + "operating_system": "linux", + "architecture": "amd64", + "apps": [ + { + "slug": "app1", + "display_name": "app1", + "open_in": 1, + "id": "634ec976-f595-9122-c51e-8da2e3c6e3ce" + }, + { + "slug": "app2", + "display_name": "app2", + "subdomain": true, + "healthcheck": { + "url": "http://localhost:13337/healthz", + "interval": 5, + "threshold": 6 + }, + "open_in": 1, + "id": "13922208-d2bc-196b-54cb-3fc084916309" + } + ], + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + }, + { + "name": "dev2", + "type": "null_resource", + "agents": [ + { + "name": "dev2", + "operating_system": "linux", + "architecture": "amd64", + "apps": [ + { + "slug": "app3", + "display_name": "app3", + "open_in": 1, + "id": "a2714999-3f82-11a4-b8fe-3a11d88f3021" + } + ], + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/multiple-agents-multiple-apps/converted_state.state.golden b/provisioner/terraform/testdata/resources/multiple-agents-multiple-apps/converted_state.state.golden new file mode 100644 index 0000000000..bf3722980d --- /dev/null +++ b/provisioner/terraform/testdata/resources/multiple-agents-multiple-apps/converted_state.state.golden @@ -0,0 +1,86 @@ +{ + "Resources": [ + { + "name": "dev1", + "type": "null_resource", + "agents": [ + { + "id": "b67999d7-9356-4d32-b3ed-f9ffd283cd5b", + "name": "dev1", + "operating_system": "linux", + "architecture": "amd64", + "apps": [ + { + "slug": "app1", + "display_name": "app1", + "open_in": 1, + "id": "634ec976-f595-9122-c51e-8da2e3c6e3ce" + }, + { + "slug": "app2", + "display_name": "app2", + "subdomain": true, + "healthcheck": { + "url": "http://localhost:13337/healthz", + "interval": 5, + "threshold": 6 + }, + "open_in": 1, + "id": "13922208-d2bc-196b-54cb-3fc084916309" + } + ], + "Auth": { + "Token": "f736f6d7-6fce-47b6-9fe0-3c99ce17bd8f" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + }, + { + "name": "dev2", + "type": "null_resource", + "agents": [ + { + "id": "cb18360a-0bad-4371-a26d-50c30e1d33f7", + "name": "dev2", + "operating_system": "linux", + "architecture": "amd64", + "apps": [ + { + "slug": "app3", + "display_name": "app3", + "open_in": 1, + "id": "a2714999-3f82-11a4-b8fe-3a11d88f3021" + } + ], + "Auth": { + "Token": "5d1d447c-65b0-47ba-998b-1ba752db7d78" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/multiple-agents-multiple-envs/converted_state.plan.golden b/provisioner/terraform/testdata/resources/multiple-agents-multiple-envs/converted_state.plan.golden new file mode 100644 index 0000000000..7550069659 --- /dev/null +++ b/provisioner/terraform/testdata/resources/multiple-agents-multiple-envs/converted_state.plan.golden @@ -0,0 +1,84 @@ +{ + "Resources": [ + { + "name": "dev1", + "type": "null_resource", + "agents": [ + { + "name": "dev1", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "extra_envs": [ + { + "name": "ENV_1", + "value": "Env 1" + }, + { + "name": "ENV_2", + "value": "Env 2" + } + ], + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + }, + { + "name": "dev2", + "type": "null_resource", + "agents": [ + { + "name": "dev2", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "extra_envs": [ + { + "name": "ENV_3", + "value": "Env 3" + } + ], + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + }, + { + "name": "env1", + "type": "coder_env" + }, + { + "name": "env2", + "type": "coder_env" + }, + { + "name": "env3", + "type": "coder_env" + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/multiple-agents-multiple-envs/converted_state.state.golden b/provisioner/terraform/testdata/resources/multiple-agents-multiple-envs/converted_state.state.golden new file mode 100644 index 0000000000..c041641367 --- /dev/null +++ b/provisioner/terraform/testdata/resources/multiple-agents-multiple-envs/converted_state.state.golden @@ -0,0 +1,86 @@ +{ + "Resources": [ + { + "name": "dev1", + "type": "null_resource", + "agents": [ + { + "id": "fac6034b-1d42-4407-b266-265e35795241", + "name": "dev1", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "1ef61ba1-3502-4e65-b934-8cc63b16877c" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "extra_envs": [ + { + "name": "ENV_1", + "value": "Env 1" + }, + { + "name": "ENV_2", + "value": "Env 2" + } + ], + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + }, + { + "name": "dev2", + "type": "null_resource", + "agents": [ + { + "id": "a02262af-b94b-4d6d-98ec-6e36b775e328", + "name": "dev2", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "3d5caada-8239-4074-8d90-6a28a11858f9" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "extra_envs": [ + { + "name": "ENV_3", + "value": "Env 3" + } + ], + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + }, + { + "name": "env1", + "type": "coder_env" + }, + { + "name": "env2", + "type": "coder_env" + }, + { + "name": "env3", + "type": "coder_env" + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/multiple-agents-multiple-monitors/converted_state.plan.golden b/provisioner/terraform/testdata/resources/multiple-agents-multiple-monitors/converted_state.plan.golden new file mode 100644 index 0000000000..084a038a9b --- /dev/null +++ b/provisioner/terraform/testdata/resources/multiple-agents-multiple-monitors/converted_state.plan.golden @@ -0,0 +1,91 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "name": "dev1", + "operating_system": "linux", + "architecture": "amd64", + "apps": [ + { + "slug": "app1", + "display_name": "app1", + "open_in": 1, + "id": "634ec976-f595-9122-c51e-8da2e3c6e3ce" + }, + { + "slug": "app2", + "display_name": "app2", + "subdomain": true, + "healthcheck": { + "url": "http://localhost:13337/healthz", + "interval": 5, + "threshold": 6 + }, + "open_in": 1, + "id": "13922208-d2bc-196b-54cb-3fc084916309" + } + ], + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": { + "memory": { + "enabled": true, + "threshold": 80 + } + }, + "api_key_scope": "all" + }, + { + "name": "dev2", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": { + "memory": { + "enabled": true, + "threshold": 99 + }, + "volumes": [ + { + "path": "/volume2", + "threshold": 50 + }, + { + "path": "/volume1", + "enabled": true, + "threshold": 80 + } + ] + }, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/multiple-agents-multiple-monitors/converted_state.state.golden b/provisioner/terraform/testdata/resources/multiple-agents-multiple-monitors/converted_state.state.golden new file mode 100644 index 0000000000..ded4530113 --- /dev/null +++ b/provisioner/terraform/testdata/resources/multiple-agents-multiple-monitors/converted_state.state.golden @@ -0,0 +1,93 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "id": "ca077115-5e6d-4ae5-9ca1-10d3b4f21ca8", + "name": "dev1", + "operating_system": "linux", + "architecture": "amd64", + "apps": [ + { + "slug": "app1", + "display_name": "app1", + "open_in": 1, + "id": "634ec976-f595-9122-c51e-8da2e3c6e3ce" + }, + { + "slug": "app2", + "display_name": "app2", + "subdomain": true, + "healthcheck": { + "url": "http://localhost:13337/healthz", + "interval": 5, + "threshold": 6 + }, + "open_in": 1, + "id": "13922208-d2bc-196b-54cb-3fc084916309" + } + ], + "Auth": { + "Token": "91e41276-344e-4664-a560-85f0ceb71a7e" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": { + "memory": { + "enabled": true, + "threshold": 80 + } + }, + "api_key_scope": "all" + }, + { + "id": "e3ce0177-ce0c-4136-af81-90d0751bf3de", + "name": "dev2", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "2ce64d1c-c57f-4b6b-af87-b693c5998182" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": { + "memory": { + "enabled": true, + "threshold": 99 + }, + "volumes": [ + { + "path": "/volume2", + "threshold": 50 + }, + { + "path": "/volume1", + "enabled": true, + "threshold": 80 + } + ] + }, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/multiple-agents-multiple-scripts/converted_state.plan.golden b/provisioner/terraform/testdata/resources/multiple-agents-multiple-scripts/converted_state.plan.golden new file mode 100644 index 0000000000..14f2b6ec31 --- /dev/null +++ b/provisioner/terraform/testdata/resources/multiple-agents-multiple-scripts/converted_state.plan.golden @@ -0,0 +1,75 @@ +{ + "Resources": [ + { + "name": "dev1", + "type": "null_resource", + "agents": [ + { + "name": "dev1", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "scripts": [ + { + "display_name": "Foobar Script 1", + "script": "echo foobar 1", + "run_on_start": true + }, + { + "display_name": "Foobar Script 2", + "script": "echo foobar 2", + "run_on_start": true + } + ], + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + }, + { + "name": "dev2", + "type": "null_resource", + "agents": [ + { + "name": "dev2", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "scripts": [ + { + "display_name": "Foobar Script 3", + "script": "echo foobar 3", + "run_on_start": true + } + ], + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/multiple-agents-multiple-scripts/converted_state.state.golden b/provisioner/terraform/testdata/resources/multiple-agents-multiple-scripts/converted_state.state.golden new file mode 100644 index 0000000000..9cfdd52317 --- /dev/null +++ b/provisioner/terraform/testdata/resources/multiple-agents-multiple-scripts/converted_state.state.golden @@ -0,0 +1,77 @@ +{ + "Resources": [ + { + "name": "dev1", + "type": "null_resource", + "agents": [ + { + "id": "9d9c16e7-5828-4ca4-9c9d-ba4b61d2b0db", + "name": "dev1", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "2054bc44-b3d1-44e3-8f28-4ce327081ddb" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "scripts": [ + { + "display_name": "Foobar Script 1", + "script": "echo foobar 1", + "run_on_start": true + }, + { + "display_name": "Foobar Script 2", + "script": "echo foobar 2", + "run_on_start": true + } + ], + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + }, + { + "name": "dev2", + "type": "null_resource", + "agents": [ + { + "id": "69cb645c-7a6a-4ad6-be86-dcaab810e7c1", + "name": "dev2", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "c3e73db7-a589-4364-bcf7-0224a9be5c70" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "scripts": [ + { + "display_name": "Foobar Script 3", + "script": "echo foobar 3", + "run_on_start": true + } + ], + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/multiple-agents/converted_state.plan.golden b/provisioner/terraform/testdata/resources/multiple-agents/converted_state.plan.golden new file mode 100644 index 0000000000..9ad64531d7 --- /dev/null +++ b/provisioner/terraform/testdata/resources/multiple-agents/converted_state.plan.golden @@ -0,0 +1,95 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "name": "dev1", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + }, + { + "name": "dev2", + "operating_system": "darwin", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 1, + "motd_file": "/etc/motd", + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "scripts": [ + { + "display_name": "Shutdown Script", + "icon": "/emojis/25c0.png", + "script": "echo bye bye", + "run_on_stop": true, + "log_path": "coder-shutdown-script.log" + } + ], + "resources_monitoring": {}, + "api_key_scope": "all" + }, + { + "name": "dev3", + "operating_system": "windows", + "architecture": "arm64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "troubleshooting_url": "https://coder.com/troubleshoot", + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + }, + { + "name": "dev4", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/multiple-agents/converted_state.state.golden b/provisioner/terraform/testdata/resources/multiple-agents/converted_state.state.golden new file mode 100644 index 0000000000..7c8d164594 --- /dev/null +++ b/provisioner/terraform/testdata/resources/multiple-agents/converted_state.state.golden @@ -0,0 +1,99 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "id": "d3113fa6-6ff3-4532-adc2-c7c51f418fca", + "name": "dev1", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "ecd3c234-6923-4066-9c49-a4ab05f8b25b" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + }, + { + "id": "65036667-6670-4ae9-b081-9e47a659b2a3", + "name": "dev2", + "operating_system": "darwin", + "architecture": "amd64", + "Auth": { + "Token": "d18a13a0-bb95-4500-b789-b341be481710" + }, + "connection_timeout_seconds": 1, + "motd_file": "/etc/motd", + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "scripts": [ + { + "display_name": "Shutdown Script", + "icon": "/emojis/25c0.png", + "script": "echo bye bye", + "run_on_stop": true, + "log_path": "coder-shutdown-script.log" + } + ], + "resources_monitoring": {}, + "api_key_scope": "all" + }, + { + "id": "ca951672-300e-4d31-859f-72ea307ef692", + "name": "dev3", + "operating_system": "windows", + "architecture": "arm64", + "Auth": { + "Token": "4df063e4-150e-447d-b7fb-8de08f19feca" + }, + "connection_timeout_seconds": 120, + "troubleshooting_url": "https://coder.com/troubleshoot", + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + }, + { + "id": "40b28bed-7b37-4f70-8209-114f26eb09d8", + "name": "dev4", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "d8694897-083f-4a0c-8633-70107a9d45fb" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/multiple-apps/converted_state.plan.golden b/provisioner/terraform/testdata/resources/multiple-apps/converted_state.plan.golden new file mode 100644 index 0000000000..703e01ac40 --- /dev/null +++ b/provisioner/terraform/testdata/resources/multiple-apps/converted_state.plan.golden @@ -0,0 +1,59 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "name": "dev1", + "operating_system": "linux", + "architecture": "amd64", + "apps": [ + { + "slug": "app1", + "display_name": "app1", + "open_in": 1, + "id": "634ec976-f595-9122-c51e-8da2e3c6e3ce" + }, + { + "slug": "app2", + "display_name": "app2", + "subdomain": true, + "healthcheck": { + "url": "http://localhost:13337/healthz", + "interval": 5, + "threshold": 6 + }, + "open_in": 1, + "id": "13922208-d2bc-196b-54cb-3fc084916309" + }, + { + "slug": "app3", + "display_name": "app3", + "open_in": 1, + "id": "a2714999-3f82-11a4-b8fe-3a11d88f3021" + } + ], + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/multiple-apps/converted_state.state.golden b/provisioner/terraform/testdata/resources/multiple-apps/converted_state.state.golden new file mode 100644 index 0000000000..869c56d797 --- /dev/null +++ b/provisioner/terraform/testdata/resources/multiple-apps/converted_state.state.golden @@ -0,0 +1,60 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "id": "947c273b-8ec8-4d7e-9f5f-82d777dd7233", + "name": "dev1", + "operating_system": "linux", + "architecture": "amd64", + "apps": [ + { + "slug": "app1", + "display_name": "app1", + "open_in": 1, + "id": "634ec976-f595-9122-c51e-8da2e3c6e3ce" + }, + { + "slug": "app2", + "display_name": "app2", + "subdomain": true, + "healthcheck": { + "url": "http://localhost:13337/healthz", + "interval": 5, + "threshold": 6 + }, + "open_in": 1, + "id": "13922208-d2bc-196b-54cb-3fc084916309" + }, + { + "slug": "app3", + "display_name": "app3", + "open_in": 1, + "id": "a2714999-3f82-11a4-b8fe-3a11d88f3021" + } + ], + "Auth": { + "Token": "fcb257f7-62fe-48c9-a8fd-b0b80c9fb3c8" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/presets-multiple-defaults/converted_state.plan.golden b/provisioner/terraform/testdata/resources/presets-multiple-defaults/converted_state.plan.golden new file mode 100644 index 0000000000..c1059056c6 --- /dev/null +++ b/provisioner/terraform/testdata/resources/presets-multiple-defaults/converted_state.plan.golden @@ -0,0 +1 @@ +"a maximum of 1 coder_workspace_preset can be marked as default, but 2 are set" diff --git a/provisioner/terraform/testdata/resources/presets-multiple-defaults/converted_state.state.golden b/provisioner/terraform/testdata/resources/presets-multiple-defaults/converted_state.state.golden new file mode 100644 index 0000000000..c1059056c6 --- /dev/null +++ b/provisioner/terraform/testdata/resources/presets-multiple-defaults/converted_state.state.golden @@ -0,0 +1 @@ +"a maximum of 1 coder_workspace_preset can be marked as default, but 2 are set" diff --git a/provisioner/terraform/testdata/resources/presets-single-default/converted_state.plan.golden b/provisioner/terraform/testdata/resources/presets-single-default/converted_state.plan.golden new file mode 100644 index 0000000000..2113065502 --- /dev/null +++ b/provisioner/terraform/testdata/resources/presets-single-default/converted_state.plan.golden @@ -0,0 +1,67 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "name": "dev", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [ + { + "name": "instance_type", + "description": "Instance type", + "type": "string", + "default_value": "t3.micro", + "form_type": 4 + } + ], + "Presets": [ + { + "name": "development", + "parameters": [ + { + "name": "instance_type", + "value": "t3.micro" + } + ], + "prebuild": { + "instances": 1 + }, + "default": true + }, + { + "name": "production", + "parameters": [ + { + "name": "instance_type", + "value": "t3.large" + } + ], + "prebuild": { + "instances": 2 + } + } + ], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/presets-single-default/converted_state.state.golden b/provisioner/terraform/testdata/resources/presets-single-default/converted_state.state.golden new file mode 100644 index 0000000000..ecf470e46a --- /dev/null +++ b/provisioner/terraform/testdata/resources/presets-single-default/converted_state.state.golden @@ -0,0 +1,68 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "id": "5d66372f-a526-44ee-9eac-0c16bcc57aa2", + "name": "dev", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "70ab06e5-ef86-4ac2-a1d9-58c8ad85d379" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [ + { + "name": "instance_type", + "description": "Instance type", + "type": "string", + "default_value": "t3.micro", + "form_type": 4 + } + ], + "Presets": [ + { + "name": "development", + "parameters": [ + { + "name": "instance_type", + "value": "t3.micro" + } + ], + "prebuild": { + "instances": 1 + }, + "default": true + }, + { + "name": "production", + "parameters": [ + { + "name": "instance_type", + "value": "t3.large" + } + ], + "prebuild": { + "instances": 2 + } + } + ], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/presets/converted_state.plan.golden b/provisioner/terraform/testdata/resources/presets/converted_state.plan.golden new file mode 100644 index 0000000000..ecfa791e25 --- /dev/null +++ b/provisioner/terraform/testdata/resources/presets/converted_state.plan.golden @@ -0,0 +1,102 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "name": "dev", + "operating_system": "windows", + "architecture": "arm64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [ + { + "name": "First parameter from child module", + "description": "First parameter from child module", + "type": "string", + "mutable": true, + "default_value": "abcdef", + "form_type": 4 + }, + { + "name": "Second parameter from child module", + "description": "Second parameter from child module", + "type": "string", + "mutable": true, + "default_value": "ghijkl", + "form_type": 4 + }, + { + "name": "First parameter from module", + "description": "First parameter from module", + "type": "string", + "mutable": true, + "default_value": "abcdef", + "form_type": 4 + }, + { + "name": "Second parameter from module", + "description": "Second parameter from module", + "type": "string", + "mutable": true, + "default_value": "ghijkl", + "form_type": 4 + }, + { + "name": "Sample", + "description": "blah blah", + "type": "string", + "default_value": "ok", + "form_type": 4 + } + ], + "Presets": [ + { + "name": "My First Project", + "parameters": [ + { + "name": "Sample", + "value": "A1B2C3" + } + ], + "prebuild": { + "instances": 4, + "expiration_policy": { + "ttl": 86400 + }, + "scheduling": { + "timezone": "America/Los_Angeles", + "schedule": [ + { + "cron": "* 8-18 * * 1-5", + "instances": 3 + }, + { + "cron": "* 8-14 * * 6", + "instances": 1 + } + ] + } + } + } + ], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/presets/converted_state.state.golden b/provisioner/terraform/testdata/resources/presets/converted_state.state.golden new file mode 100644 index 0000000000..a1b67adb76 --- /dev/null +++ b/provisioner/terraform/testdata/resources/presets/converted_state.state.golden @@ -0,0 +1,103 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "id": "8cfc2f0d-5cd6-4631-acfa-c3690ae5557c", + "name": "dev", + "operating_system": "windows", + "architecture": "arm64", + "Auth": { + "Token": "abc9d31e-d1d6-4f2c-9e35-005ebe39aeec" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [ + { + "name": "First parameter from child module", + "description": "First parameter from child module", + "type": "string", + "mutable": true, + "default_value": "abcdef", + "form_type": 4 + }, + { + "name": "Second parameter from child module", + "description": "Second parameter from child module", + "type": "string", + "mutable": true, + "default_value": "ghijkl", + "form_type": 4 + }, + { + "name": "First parameter from module", + "description": "First parameter from module", + "type": "string", + "mutable": true, + "default_value": "abcdef", + "form_type": 4 + }, + { + "name": "Second parameter from module", + "description": "Second parameter from module", + "type": "string", + "mutable": true, + "default_value": "ghijkl", + "form_type": 4 + }, + { + "name": "Sample", + "description": "blah blah", + "type": "string", + "default_value": "ok", + "form_type": 4 + } + ], + "Presets": [ + { + "name": "My First Project", + "parameters": [ + { + "name": "Sample", + "value": "A1B2C3" + } + ], + "prebuild": { + "instances": 4, + "expiration_policy": { + "ttl": 86400 + }, + "scheduling": { + "timezone": "America/Los_Angeles", + "schedule": [ + { + "cron": "* 8-18 * * 1-5", + "instances": 3 + }, + { + "cron": "* 8-14 * * 6", + "instances": 1 + } + ] + } + } + } + ], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/resource-metadata-duplicate/converted_state.plan.golden b/provisioner/terraform/testdata/resources/resource-metadata-duplicate/converted_state.plan.golden new file mode 100644 index 0000000000..8731a0c260 --- /dev/null +++ b/provisioner/terraform/testdata/resources/resource-metadata-duplicate/converted_state.plan.golden @@ -0,0 +1 @@ +"duplicate metadata resource: null_resource.about" diff --git a/provisioner/terraform/testdata/resources/resource-metadata-duplicate/converted_state.state.golden b/provisioner/terraform/testdata/resources/resource-metadata-duplicate/converted_state.state.golden new file mode 100644 index 0000000000..8731a0c260 --- /dev/null +++ b/provisioner/terraform/testdata/resources/resource-metadata-duplicate/converted_state.state.golden @@ -0,0 +1 @@ +"duplicate metadata resource: null_resource.about" diff --git a/provisioner/terraform/testdata/resources/resource-metadata/converted_state.plan.golden b/provisioner/terraform/testdata/resources/resource-metadata/converted_state.plan.golden new file mode 100644 index 0000000000..2a351e856e --- /dev/null +++ b/provisioner/terraform/testdata/resources/resource-metadata/converted_state.plan.golden @@ -0,0 +1,63 @@ +{ + "Resources": [ + { + "name": "about", + "type": "null_resource", + "agents": [ + { + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "metadata": [ + { + "key": "process_count", + "display_name": "Process Count", + "script": "ps -ef | wc -l", + "interval": 5, + "timeout": 1, + "order": 7 + } + ], + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ], + "metadata": [ + { + "key": "hello", + "value": "world" + }, + { + "key": "null" + }, + { + "key": "empty" + }, + { + "key": "secret", + "value": "squirrel", + "sensitive": true + } + ], + "hide": true, + "icon": "/icon/server.svg", + "daily_cost": 29 + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/resource-metadata/converted_state.state.golden b/provisioner/terraform/testdata/resources/resource-metadata/converted_state.state.golden new file mode 100644 index 0000000000..3f0578713e --- /dev/null +++ b/provisioner/terraform/testdata/resources/resource-metadata/converted_state.state.golden @@ -0,0 +1,65 @@ +{ + "Resources": [ + { + "name": "about", + "type": "null_resource", + "agents": [ + { + "id": "9a5911cd-2335-4050-aba8-4c26ba1ca704", + "name": "main", + "operating_system": "linux", + "architecture": "amd64", + "Auth": { + "Token": "2b4471d9-1281-45bf-8be2-9b182beb9285" + }, + "connection_timeout_seconds": 120, + "metadata": [ + { + "key": "process_count", + "display_name": "Process Count", + "script": "ps -ef | wc -l", + "interval": 5, + "timeout": 1, + "order": 7 + } + ], + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ], + "metadata": [ + { + "key": "hello", + "value": "world" + }, + { + "key": "null", + "is_null": true + }, + { + "key": "empty" + }, + { + "key": "secret", + "value": "squirrel", + "sensitive": true + } + ], + "hide": true, + "icon": "/icon/server.svg", + "daily_cost": 29 + } + ], + "Parameters": [], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/rich-parameters-order/converted_state.plan.golden b/provisioner/terraform/testdata/resources/rich-parameters-order/converted_state.plan.golden new file mode 100644 index 0000000000..5a76d1778b --- /dev/null +++ b/provisioner/terraform/testdata/resources/rich-parameters-order/converted_state.plan.golden @@ -0,0 +1,49 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "name": "dev", + "operating_system": "windows", + "architecture": "arm64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [ + { + "name": "Example", + "type": "string", + "required": true, + "order": 55, + "form_type": 4 + }, + { + "name": "Sample", + "description": "blah blah", + "type": "string", + "default_value": "ok", + "order": 99, + "form_type": 4 + } + ], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/rich-parameters-order/converted_state.state.golden b/provisioner/terraform/testdata/resources/rich-parameters-order/converted_state.state.golden new file mode 100644 index 0000000000..5f001d4f10 --- /dev/null +++ b/provisioner/terraform/testdata/resources/rich-parameters-order/converted_state.state.golden @@ -0,0 +1,50 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "id": "09d607d0-f6dc-4d6b-b76c-0c532f34721e", + "name": "dev", + "operating_system": "windows", + "architecture": "arm64", + "Auth": { + "Token": "ac504187-c31b-408f-8f1a-f7927a6de3bc" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [ + { + "name": "Example", + "type": "string", + "required": true, + "order": 55, + "form_type": 4 + }, + { + "name": "Sample", + "description": "blah blah", + "type": "string", + "default_value": "ok", + "order": 99, + "form_type": 4 + } + ], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/rich-parameters-validation/converted_state.plan.golden b/provisioner/terraform/testdata/resources/rich-parameters-validation/converted_state.plan.golden new file mode 100644 index 0000000000..1476afaf6f --- /dev/null +++ b/provisioner/terraform/testdata/resources/rich-parameters-validation/converted_state.plan.golden @@ -0,0 +1,78 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "name": "dev", + "operating_system": "windows", + "architecture": "arm64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [ + { + "name": "number_example", + "type": "number", + "mutable": true, + "default_value": "4", + "ephemeral": true, + "form_type": 4 + }, + { + "name": "number_example_max", + "type": "number", + "default_value": "4", + "validation_max": 6, + "form_type": 4 + }, + { + "name": "number_example_max_zero", + "type": "number", + "default_value": "-3", + "validation_max": 0, + "form_type": 4 + }, + { + "name": "number_example_min", + "type": "number", + "default_value": "4", + "validation_min": 3, + "form_type": 4 + }, + { + "name": "number_example_min_max", + "type": "number", + "default_value": "4", + "validation_min": 3, + "validation_max": 6, + "form_type": 4 + }, + { + "name": "number_example_min_zero", + "type": "number", + "default_value": "4", + "validation_min": 0, + "form_type": 4 + } + ], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/rich-parameters-validation/converted_state.state.golden b/provisioner/terraform/testdata/resources/rich-parameters-validation/converted_state.state.golden new file mode 100644 index 0000000000..d8817ca5e9 --- /dev/null +++ b/provisioner/terraform/testdata/resources/rich-parameters-validation/converted_state.state.golden @@ -0,0 +1,79 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "id": "9c8368da-924c-4df4-a049-940a9a035051", + "name": "dev", + "operating_system": "windows", + "architecture": "arm64", + "Auth": { + "Token": "e09a4d7d-8341-4adf-b93b-21f3724d76d7" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [ + { + "name": "number_example", + "type": "number", + "mutable": true, + "default_value": "4", + "ephemeral": true, + "form_type": 4 + }, + { + "name": "number_example_max", + "type": "number", + "default_value": "4", + "validation_max": 6, + "form_type": 4 + }, + { + "name": "number_example_max_zero", + "type": "number", + "default_value": "-3", + "validation_max": 0, + "form_type": 4 + }, + { + "name": "number_example_min", + "type": "number", + "default_value": "4", + "validation_min": 3, + "form_type": 4 + }, + { + "name": "number_example_min_max", + "type": "number", + "default_value": "4", + "validation_min": 3, + "validation_max": 6, + "form_type": 4 + }, + { + "name": "number_example_min_zero", + "type": "number", + "default_value": "4", + "validation_min": 0, + "form_type": 4 + } + ], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/rich-parameters/converted_state.plan.golden b/provisioner/terraform/testdata/resources/rich-parameters/converted_state.plan.golden new file mode 100644 index 0000000000..1089e51a88 --- /dev/null +++ b/provisioner/terraform/testdata/resources/rich-parameters/converted_state.plan.golden @@ -0,0 +1,119 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "name": "dev", + "operating_system": "windows", + "architecture": "arm64", + "Auth": { + "Token": "" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [ + { + "name": "First parameter from child module", + "description": "First parameter from child module", + "type": "string", + "mutable": true, + "default_value": "abcdef", + "form_type": 4 + }, + { + "name": "Second parameter from child module", + "description": "Second parameter from child module", + "type": "string", + "mutable": true, + "default_value": "ghijkl", + "form_type": 4 + }, + { + "name": "First parameter from module", + "description": "First parameter from module", + "type": "string", + "mutable": true, + "default_value": "abcdef", + "form_type": 4 + }, + { + "name": "Second parameter from module", + "description": "Second parameter from module", + "type": "string", + "mutable": true, + "default_value": "ghijkl", + "form_type": 4 + }, + { + "name": "Example", + "type": "string", + "options": [ + { + "name": "First Option", + "value": "first" + }, + { + "name": "Second Option", + "value": "second" + } + ], + "required": true, + "form_type": 2 + }, + { + "name": "number_example", + "type": "number", + "default_value": "4", + "form_type": 4 + }, + { + "name": "number_example_max_zero", + "type": "number", + "default_value": "-2", + "validation_min": -3, + "validation_max": 0, + "form_type": 4 + }, + { + "name": "number_example_min_max", + "type": "number", + "default_value": "4", + "validation_min": 3, + "validation_max": 6, + "form_type": 4 + }, + { + "name": "number_example_min_zero", + "type": "number", + "default_value": "4", + "validation_min": 0, + "validation_max": 6, + "form_type": 4 + }, + { + "name": "Sample", + "description": "blah blah", + "type": "string", + "default_value": "ok", + "form_type": 4 + } + ], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +} diff --git a/provisioner/terraform/testdata/resources/rich-parameters/converted_state.state.golden b/provisioner/terraform/testdata/resources/rich-parameters/converted_state.state.golden new file mode 100644 index 0000000000..1a0efa0966 --- /dev/null +++ b/provisioner/terraform/testdata/resources/rich-parameters/converted_state.state.golden @@ -0,0 +1,120 @@ +{ + "Resources": [ + { + "name": "dev", + "type": "null_resource", + "agents": [ + { + "id": "047fe781-ea5d-411a-b31c-4400a00e6166", + "name": "dev", + "operating_system": "windows", + "architecture": "arm64", + "Auth": { + "Token": "261ca0f7-a388-42dd-b113-d25e31e346c9" + }, + "connection_timeout_seconds": 120, + "display_apps": { + "vscode": true, + "web_terminal": true, + "ssh_helper": true, + "port_forwarding_helper": true + }, + "resources_monitoring": {}, + "api_key_scope": "all" + } + ] + } + ], + "Parameters": [ + { + "name": "First parameter from child module", + "description": "First parameter from child module", + "type": "string", + "mutable": true, + "default_value": "abcdef", + "form_type": 4 + }, + { + "name": "Second parameter from child module", + "description": "Second parameter from child module", + "type": "string", + "mutable": true, + "default_value": "ghijkl", + "form_type": 4 + }, + { + "name": "First parameter from module", + "description": "First parameter from module", + "type": "string", + "mutable": true, + "default_value": "abcdef", + "form_type": 4 + }, + { + "name": "Second parameter from module", + "description": "Second parameter from module", + "type": "string", + "mutable": true, + "default_value": "ghijkl", + "form_type": 4 + }, + { + "name": "Example", + "type": "string", + "options": [ + { + "name": "First Option", + "value": "first" + }, + { + "name": "Second Option", + "value": "second" + } + ], + "required": true, + "form_type": 2 + }, + { + "name": "number_example", + "type": "number", + "default_value": "4", + "form_type": 4 + }, + { + "name": "number_example_max_zero", + "type": "number", + "default_value": "-2", + "validation_min": -3, + "validation_max": 0, + "form_type": 4 + }, + { + "name": "number_example_min_max", + "type": "number", + "default_value": "4", + "validation_min": 3, + "validation_max": 6, + "form_type": 4 + }, + { + "name": "number_example_min_zero", + "type": "number", + "default_value": "4", + "validation_min": 0, + "validation_max": 6, + "form_type": 4 + }, + { + "name": "Sample", + "description": "blah blah", + "type": "string", + "default_value": "ok", + "form_type": 4 + } + ], + "Presets": [], + "ExternalAuthProviders": [], + "AITasks": [], + "HasAITasks": false, + "HasExternalAgents": false +}