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.
This commit is contained in:
Steven Masley
2025-11-21 07:27:20 -06:00
committed by GitHub
parent e0a32e04e8
commit a61b8bc5ce
57 changed files with 3160 additions and 0 deletions
+127
View File
@@ -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()
}
}
}
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -0,0 +1 @@
"a maximum of 1 coder_workspace_preset can be marked as default, but 2 are set"
@@ -0,0 +1 @@
"a maximum of 1 coder_workspace_preset can be marked as default, but 2 are set"
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -0,0 +1 @@
"duplicate metadata resource: null_resource.about"
@@ -0,0 +1 @@
"duplicate metadata resource: null_resource.about"
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}