mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
chore(provisioner): support updated coder_ai_task resource (#20160)
Closes https://github.com/coder/internal/issues/978 - Introduce `CODER_TASK_ID` and `CODER_TASK_PROMPT` to the provisioner environment - Make use of new `app_id` field in provider, with a fallback to `sidebar_app.id` for backwards compatibility **For now** I've left the `taskPrompt` and `taskID` as a TODO as we do not yet create these values.
This commit is contained in:
@@ -266,6 +266,8 @@ func provisionEnv(
|
||||
"CODER_WORKSPACE_TEMPLATE_NAME="+metadata.GetTemplateName(),
|
||||
"CODER_WORKSPACE_TEMPLATE_VERSION="+metadata.GetTemplateVersion(),
|
||||
"CODER_WORKSPACE_BUILD_ID="+metadata.GetWorkspaceBuildId(),
|
||||
"CODER_TASK_ID="+metadata.GetTaskId(),
|
||||
"CODER_TASK_PROMPT="+metadata.GetTaskPrompt(),
|
||||
)
|
||||
if metadata.GetPrebuiltWorkspaceBuildStage().IsPrebuild() {
|
||||
env = append(env, provider.IsPrebuildEnvironmentVariable()+"=true")
|
||||
|
||||
@@ -1048,29 +1048,6 @@ func TestProvision(t *testing.T) {
|
||||
}},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "ai-task-required-prompt-param",
|
||||
Files: map[string]string{
|
||||
"main.tf": `terraform {
|
||||
required_providers {
|
||||
coder = {
|
||||
source = "coder/coder"
|
||||
version = ">= 2.7.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
resource "coder_ai_task" "a" {
|
||||
sidebar_app {
|
||||
id = "7128be08-8722-44cb-bbe1-b5a391c4d94b" # fake ID, irrelevant here anyway but needed for validation
|
||||
}
|
||||
}
|
||||
`,
|
||||
},
|
||||
Request: &proto.PlanRequest{},
|
||||
Response: &proto.PlanComplete{
|
||||
Error: fmt.Sprintf("plan resources: coder_parameter named '%s' is required when 'coder_ai_task' resource is defined", provider.TaskPromptParameterName),
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "ai-task-multiple-allowed-in-plan",
|
||||
Files: map[string]string{
|
||||
@@ -1160,6 +1137,39 @@ func TestProvision(t *testing.T) {
|
||||
},
|
||||
SkipCacheProviders: true,
|
||||
},
|
||||
{
|
||||
Name: "ai-task-app-id",
|
||||
Files: map[string]string{
|
||||
"main.tf": `terraform {
|
||||
required_providers {
|
||||
coder = {
|
||||
source = "coder/coder"
|
||||
version = "= 2.12.0-pre0"
|
||||
}
|
||||
}
|
||||
}
|
||||
resource "coder_ai_task" "my-task" {
|
||||
app_id = "7128be08-8722-44cb-bbe1-b5a391c4d94b" # fake ID, irrelevant here anyway but needed for validation
|
||||
}
|
||||
`,
|
||||
},
|
||||
Response: &proto.PlanComplete{
|
||||
Resources: []*proto.Resource{
|
||||
{
|
||||
Name: "my-task",
|
||||
Type: "coder_ai_task",
|
||||
},
|
||||
},
|
||||
AiTasks: []*proto.AITask{
|
||||
{
|
||||
Id: "my-task",
|
||||
AppId: "7128be08-8722-44cb-bbe1-b5a391c4d94b",
|
||||
},
|
||||
},
|
||||
HasAiTasks: true,
|
||||
},
|
||||
SkipCacheProviders: true,
|
||||
},
|
||||
}
|
||||
|
||||
// Remove unused cache dirs before running tests.
|
||||
|
||||
@@ -4,7 +4,6 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"math"
|
||||
"slices"
|
||||
"strings"
|
||||
|
||||
"github.com/awalterschulze/gographviz"
|
||||
@@ -1023,14 +1022,11 @@ func ConvertState(ctx context.Context, modules []*tfjson.StateModule, rawGraph s
|
||||
return nil, xerrors.Errorf("decode coder_ai_task attributes: %w", err)
|
||||
}
|
||||
|
||||
if len(task.SidebarApp) < 1 {
|
||||
return nil, xerrors.Errorf("coder_ai_task has no sidebar_app defined")
|
||||
}
|
||||
|
||||
aiTasks = append(aiTasks, &proto.AITask{
|
||||
Id: task.ID,
|
||||
Id: task.ID,
|
||||
AppId: task.AppID,
|
||||
SidebarApp: &proto.AITaskSidebarApp{
|
||||
Id: task.SidebarApp[0].ID,
|
||||
Id: task.AppID,
|
||||
},
|
||||
})
|
||||
}
|
||||
@@ -1066,14 +1062,6 @@ func ConvertState(ctx context.Context, modules []*tfjson.StateModule, rawGraph s
|
||||
}
|
||||
|
||||
hasAITasks := hasAITaskResources(graph)
|
||||
if hasAITasks {
|
||||
hasPromptParam := slices.ContainsFunc(parameters, func(param *proto.RichParameter) bool {
|
||||
return param.Name == provider.TaskPromptParameterName
|
||||
})
|
||||
if !hasPromptParam {
|
||||
return nil, xerrors.Errorf("coder_parameter named '%s' is required when 'coder_ai_task' resource is defined", provider.TaskPromptParameterName)
|
||||
}
|
||||
}
|
||||
|
||||
return &State{
|
||||
Resources: resources,
|
||||
|
||||
@@ -16,8 +16,6 @@ import (
|
||||
"github.com/stretchr/testify/require"
|
||||
protobuf "google.golang.org/protobuf/proto"
|
||||
|
||||
"github.com/coder/terraform-provider-coder/v2/provider"
|
||||
|
||||
"cdr.dev/slog"
|
||||
"cdr.dev/slog/sloggers/slogtest"
|
||||
|
||||
@@ -1528,26 +1526,6 @@ func TestAITasks(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx, logger := ctxAndLogger(t)
|
||||
|
||||
t.Run("Prompt parameter is required", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// nolint:dogsled
|
||||
_, filename, _, _ := runtime.Caller(0)
|
||||
|
||||
dir := filepath.Join(filepath.Dir(filename), "testdata", "resources", "ai-tasks-missing-prompt")
|
||||
tfPlanRaw, err := os.ReadFile(filepath.Join(dir, "ai-tasks-missing-prompt.tfplan.json"))
|
||||
require.NoError(t, err)
|
||||
var tfPlan tfjson.Plan
|
||||
err = json.Unmarshal(tfPlanRaw, &tfPlan)
|
||||
require.NoError(t, err)
|
||||
tfPlanGraph, err := os.ReadFile(filepath.Join(dir, "ai-tasks-missing-prompt.tfplan.dot"))
|
||||
require.NoError(t, err)
|
||||
|
||||
state, err := terraform.ConvertState(ctx, []*tfjson.StateModule{tfPlan.PlannedValues.RootModule, tfPlan.PriorState.Values.RootModule}, string(tfPlanGraph), logger)
|
||||
require.Nil(t, state)
|
||||
require.ErrorContains(t, err, fmt.Sprintf("coder_parameter named '%s' is required when 'coder_ai_task' resource is defined", provider.TaskPromptParameterName))
|
||||
})
|
||||
|
||||
t.Run("Multiple tasks can be defined", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
||||
Generated
Vendored
-22
@@ -1,22 +0,0 @@
|
||||
digraph {
|
||||
compound = "true"
|
||||
newrank = "true"
|
||||
subgraph "root" {
|
||||
"[root] coder_agent.main (expand)" [label = "coder_agent.main", shape = "box"]
|
||||
"[root] coder_ai_task.a (expand)" [label = "coder_ai_task.a", shape = "box"]
|
||||
"[root] data.coder_provisioner.me (expand)" [label = "data.coder_provisioner.me", shape = "box"]
|
||||
"[root] data.coder_workspace.me (expand)" [label = "data.coder_workspace.me", shape = "box"]
|
||||
"[root] data.coder_workspace_owner.me (expand)" [label = "data.coder_workspace_owner.me", shape = "box"]
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"]" [label = "provider[\"registry.terraform.io/coder/coder\"]", shape = "diamond"]
|
||||
"[root] coder_agent.main (expand)" -> "[root] data.coder_provisioner.me (expand)"
|
||||
"[root] coder_ai_task.a (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] data.coder_provisioner.me (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] data.coder_workspace.me (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] data.coder_workspace_owner.me (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] coder_agent.main (expand)"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] coder_ai_task.a (expand)"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] data.coder_workspace.me (expand)"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] data.coder_workspace_owner.me (expand)"
|
||||
"[root] root" -> "[root] provider[\"registry.terraform.io/coder/coder\"] (close)"
|
||||
}
|
||||
}
|
||||
provisioner/terraform/testdata/resources/ai-tasks-missing-prompt/ai-tasks-missing-prompt.tfplan.json
Generated
Vendored
-307
@@ -1,307 +0,0 @@
|
||||
{
|
||||
"format_version": "1.2",
|
||||
"terraform_version": "1.12.2",
|
||||
"planned_values": {
|
||||
"root_module": {
|
||||
"resources": [
|
||||
{
|
||||
"address": "coder_agent.main",
|
||||
"mode": "managed",
|
||||
"type": "coder_agent",
|
||||
"name": "main",
|
||||
"provider_name": "registry.terraform.io/coder/coder",
|
||||
"schema_version": 1,
|
||||
"values": {
|
||||
"api_key_scope": "all",
|
||||
"arch": "amd64",
|
||||
"auth": "token",
|
||||
"connection_timeout": 120,
|
||||
"dir": null,
|
||||
"env": null,
|
||||
"metadata": [],
|
||||
"motd_file": null,
|
||||
"order": null,
|
||||
"os": "linux",
|
||||
"resources_monitoring": [],
|
||||
"shutdown_script": null,
|
||||
"startup_script": null,
|
||||
"startup_script_behavior": "non-blocking",
|
||||
"troubleshooting_url": null
|
||||
},
|
||||
"sensitive_values": {
|
||||
"display_apps": [],
|
||||
"metadata": [],
|
||||
"resources_monitoring": [],
|
||||
"token": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"address": "coder_ai_task.a",
|
||||
"mode": "managed",
|
||||
"type": "coder_ai_task",
|
||||
"name": "a",
|
||||
"provider_name": "registry.terraform.io/coder/coder",
|
||||
"schema_version": 1,
|
||||
"values": {
|
||||
"sidebar_app": [
|
||||
{
|
||||
"id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd"
|
||||
}
|
||||
]
|
||||
},
|
||||
"sensitive_values": {
|
||||
"sidebar_app": [
|
||||
{}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"resource_changes": [
|
||||
{
|
||||
"address": "coder_agent.main",
|
||||
"mode": "managed",
|
||||
"type": "coder_agent",
|
||||
"name": "main",
|
||||
"provider_name": "registry.terraform.io/coder/coder",
|
||||
"change": {
|
||||
"actions": [
|
||||
"create"
|
||||
],
|
||||
"before": null,
|
||||
"after": {
|
||||
"api_key_scope": "all",
|
||||
"arch": "amd64",
|
||||
"auth": "token",
|
||||
"connection_timeout": 120,
|
||||
"dir": null,
|
||||
"env": null,
|
||||
"metadata": [],
|
||||
"motd_file": null,
|
||||
"order": null,
|
||||
"os": "linux",
|
||||
"resources_monitoring": [],
|
||||
"shutdown_script": null,
|
||||
"startup_script": null,
|
||||
"startup_script_behavior": "non-blocking",
|
||||
"troubleshooting_url": null
|
||||
},
|
||||
"after_unknown": {
|
||||
"display_apps": true,
|
||||
"id": true,
|
||||
"init_script": true,
|
||||
"metadata": [],
|
||||
"resources_monitoring": [],
|
||||
"token": true
|
||||
},
|
||||
"before_sensitive": false,
|
||||
"after_sensitive": {
|
||||
"display_apps": [],
|
||||
"metadata": [],
|
||||
"resources_monitoring": [],
|
||||
"token": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"address": "coder_ai_task.a",
|
||||
"mode": "managed",
|
||||
"type": "coder_ai_task",
|
||||
"name": "a",
|
||||
"provider_name": "registry.terraform.io/coder/coder",
|
||||
"change": {
|
||||
"actions": [
|
||||
"create"
|
||||
],
|
||||
"before": null,
|
||||
"after": {
|
||||
"sidebar_app": [
|
||||
{
|
||||
"id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd"
|
||||
}
|
||||
]
|
||||
},
|
||||
"after_unknown": {
|
||||
"id": true,
|
||||
"sidebar_app": [
|
||||
{}
|
||||
]
|
||||
},
|
||||
"before_sensitive": false,
|
||||
"after_sensitive": {
|
||||
"sidebar_app": [
|
||||
{}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"prior_state": {
|
||||
"format_version": "1.0",
|
||||
"terraform_version": "1.12.2",
|
||||
"values": {
|
||||
"root_module": {
|
||||
"resources": [
|
||||
{
|
||||
"address": "data.coder_provisioner.me",
|
||||
"mode": "data",
|
||||
"type": "coder_provisioner",
|
||||
"name": "me",
|
||||
"provider_name": "registry.terraform.io/coder/coder",
|
||||
"schema_version": 1,
|
||||
"values": {
|
||||
"arch": "amd64",
|
||||
"id": "5a6ecb8b-fd26-4cfc-91b1-651d06bee98c",
|
||||
"os": "linux"
|
||||
},
|
||||
"sensitive_values": {}
|
||||
},
|
||||
{
|
||||
"address": "data.coder_workspace.me",
|
||||
"mode": "data",
|
||||
"type": "coder_workspace",
|
||||
"name": "me",
|
||||
"provider_name": "registry.terraform.io/coder/coder",
|
||||
"schema_version": 1,
|
||||
"values": {
|
||||
"access_port": 443,
|
||||
"access_url": "https://dev.coder.com/",
|
||||
"id": "bf9ee323-4f3a-4d45-9841-2dcd6265e830",
|
||||
"is_prebuild": false,
|
||||
"is_prebuild_claim": false,
|
||||
"name": "sebenza-nonix",
|
||||
"prebuild_count": 0,
|
||||
"start_count": 1,
|
||||
"template_id": "",
|
||||
"template_name": "",
|
||||
"template_version": "",
|
||||
"transition": "start"
|
||||
},
|
||||
"sensitive_values": {}
|
||||
},
|
||||
{
|
||||
"address": "data.coder_workspace_owner.me",
|
||||
"mode": "data",
|
||||
"type": "coder_workspace_owner",
|
||||
"name": "me",
|
||||
"provider_name": "registry.terraform.io/coder/coder",
|
||||
"schema_version": 0,
|
||||
"values": {
|
||||
"email": "default@example.com",
|
||||
"full_name": "default",
|
||||
"groups": [],
|
||||
"id": "0b8cbfb8-3925-41fe-9f21-21b76d21edc7",
|
||||
"login_type": null,
|
||||
"name": "default",
|
||||
"oidc_access_token": "",
|
||||
"rbac_roles": [],
|
||||
"session_token": "",
|
||||
"ssh_private_key": "",
|
||||
"ssh_public_key": ""
|
||||
},
|
||||
"sensitive_values": {
|
||||
"groups": [],
|
||||
"rbac_roles": [],
|
||||
"ssh_private_key": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"configuration": {
|
||||
"provider_config": {
|
||||
"coder": {
|
||||
"name": "coder",
|
||||
"full_name": "registry.terraform.io/coder/coder",
|
||||
"version_constraint": ">= 2.0.0"
|
||||
}
|
||||
},
|
||||
"root_module": {
|
||||
"resources": [
|
||||
{
|
||||
"address": "coder_agent.main",
|
||||
"mode": "managed",
|
||||
"type": "coder_agent",
|
||||
"name": "main",
|
||||
"provider_config_key": "coder",
|
||||
"expressions": {
|
||||
"arch": {
|
||||
"references": [
|
||||
"data.coder_provisioner.me.arch",
|
||||
"data.coder_provisioner.me"
|
||||
]
|
||||
},
|
||||
"os": {
|
||||
"references": [
|
||||
"data.coder_provisioner.me.os",
|
||||
"data.coder_provisioner.me"
|
||||
]
|
||||
}
|
||||
},
|
||||
"schema_version": 1
|
||||
},
|
||||
{
|
||||
"address": "coder_ai_task.a",
|
||||
"mode": "managed",
|
||||
"type": "coder_ai_task",
|
||||
"name": "a",
|
||||
"provider_config_key": "coder",
|
||||
"expressions": {
|
||||
"sidebar_app": [
|
||||
{
|
||||
"id": {
|
||||
"constant_value": "5ece4674-dd35-4f16-88c8-82e40e72e2fd"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"schema_version": 1
|
||||
},
|
||||
{
|
||||
"address": "data.coder_provisioner.me",
|
||||
"mode": "data",
|
||||
"type": "coder_provisioner",
|
||||
"name": "me",
|
||||
"provider_config_key": "coder",
|
||||
"schema_version": 1
|
||||
},
|
||||
{
|
||||
"address": "data.coder_workspace.me",
|
||||
"mode": "data",
|
||||
"type": "coder_workspace",
|
||||
"name": "me",
|
||||
"provider_config_key": "coder",
|
||||
"schema_version": 1
|
||||
},
|
||||
{
|
||||
"address": "data.coder_workspace_owner.me",
|
||||
"mode": "data",
|
||||
"type": "coder_workspace_owner",
|
||||
"name": "me",
|
||||
"provider_config_key": "coder",
|
||||
"schema_version": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"relevant_attributes": [
|
||||
{
|
||||
"resource": "data.coder_provisioner.me",
|
||||
"attribute": [
|
||||
"arch"
|
||||
]
|
||||
},
|
||||
{
|
||||
"resource": "data.coder_provisioner.me",
|
||||
"attribute": [
|
||||
"os"
|
||||
]
|
||||
}
|
||||
],
|
||||
"timestamp": "2025-06-19T14:30:00Z",
|
||||
"applyable": true,
|
||||
"complete": true,
|
||||
"errored": false
|
||||
}
|
||||
provisioner/terraform/testdata/resources/ai-tasks-missing-prompt/ai-tasks-missing-prompt.tfstate.dot
Generated
Vendored
-22
@@ -1,22 +0,0 @@
|
||||
digraph {
|
||||
compound = "true"
|
||||
newrank = "true"
|
||||
subgraph "root" {
|
||||
"[root] coder_agent.main (expand)" [label = "coder_agent.main", shape = "box"]
|
||||
"[root] coder_ai_task.a (expand)" [label = "coder_ai_task.a", shape = "box"]
|
||||
"[root] data.coder_provisioner.me (expand)" [label = "data.coder_provisioner.me", shape = "box"]
|
||||
"[root] data.coder_workspace.me (expand)" [label = "data.coder_workspace.me", shape = "box"]
|
||||
"[root] data.coder_workspace_owner.me (expand)" [label = "data.coder_workspace_owner.me", shape = "box"]
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"]" [label = "provider[\"registry.terraform.io/coder/coder\"]", shape = "diamond"]
|
||||
"[root] coder_agent.main (expand)" -> "[root] data.coder_provisioner.me (expand)"
|
||||
"[root] coder_ai_task.a (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] data.coder_provisioner.me (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] data.coder_workspace.me (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] data.coder_workspace_owner.me (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] coder_agent.main (expand)"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] coder_ai_task.a (expand)"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] data.coder_workspace.me (expand)"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] data.coder_workspace_owner.me (expand)"
|
||||
"[root] root" -> "[root] provider[\"registry.terraform.io/coder/coder\"] (close)"
|
||||
}
|
||||
}
|
||||
Generated
Vendored
-142
@@ -1,142 +0,0 @@
|
||||
{
|
||||
"format_version": "1.0",
|
||||
"terraform_version": "1.12.2",
|
||||
"values": {
|
||||
"root_module": {
|
||||
"resources": [
|
||||
{
|
||||
"address": "data.coder_provisioner.me",
|
||||
"mode": "data",
|
||||
"type": "coder_provisioner",
|
||||
"name": "me",
|
||||
"provider_name": "registry.terraform.io/coder/coder",
|
||||
"schema_version": 1,
|
||||
"values": {
|
||||
"arch": "amd64",
|
||||
"id": "e838328b-8dc2-49d0-b16c-42d6375cfb34",
|
||||
"os": "linux"
|
||||
},
|
||||
"sensitive_values": {}
|
||||
},
|
||||
{
|
||||
"address": "data.coder_workspace.me",
|
||||
"mode": "data",
|
||||
"type": "coder_workspace",
|
||||
"name": "me",
|
||||
"provider_name": "registry.terraform.io/coder/coder",
|
||||
"schema_version": 1,
|
||||
"values": {
|
||||
"access_port": 443,
|
||||
"access_url": "https://dev.coder.com/",
|
||||
"id": "6a64b978-bd81-424a-92e5-d4004296f420",
|
||||
"is_prebuild": false,
|
||||
"is_prebuild_claim": false,
|
||||
"name": "sebenza-nonix",
|
||||
"prebuild_count": 0,
|
||||
"start_count": 1,
|
||||
"template_id": "",
|
||||
"template_name": "",
|
||||
"template_version": "",
|
||||
"transition": "start"
|
||||
},
|
||||
"sensitive_values": {}
|
||||
},
|
||||
{
|
||||
"address": "data.coder_workspace_owner.me",
|
||||
"mode": "data",
|
||||
"type": "coder_workspace_owner",
|
||||
"name": "me",
|
||||
"provider_name": "registry.terraform.io/coder/coder",
|
||||
"schema_version": 0,
|
||||
"values": {
|
||||
"email": "default@example.com",
|
||||
"full_name": "default",
|
||||
"groups": [],
|
||||
"id": "ffb2e99a-efa7-4fb9-bb2c-aa282bb636c9",
|
||||
"login_type": null,
|
||||
"name": "default",
|
||||
"oidc_access_token": "",
|
||||
"rbac_roles": [],
|
||||
"session_token": "",
|
||||
"ssh_private_key": "",
|
||||
"ssh_public_key": ""
|
||||
},
|
||||
"sensitive_values": {
|
||||
"groups": [],
|
||||
"rbac_roles": [],
|
||||
"ssh_private_key": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"address": "coder_agent.main",
|
||||
"mode": "managed",
|
||||
"type": "coder_agent",
|
||||
"name": "main",
|
||||
"provider_name": "registry.terraform.io/coder/coder",
|
||||
"schema_version": 1,
|
||||
"values": {
|
||||
"api_key_scope": "all",
|
||||
"arch": "amd64",
|
||||
"auth": "token",
|
||||
"connection_timeout": 120,
|
||||
"dir": null,
|
||||
"display_apps": [
|
||||
{
|
||||
"port_forwarding_helper": true,
|
||||
"ssh_helper": true,
|
||||
"vscode": true,
|
||||
"vscode_insiders": false,
|
||||
"web_terminal": true
|
||||
}
|
||||
],
|
||||
"env": null,
|
||||
"id": "0c95434c-9e4b-40aa-bd9b-2a0cc86f11af",
|
||||
"init_script": "",
|
||||
"metadata": [],
|
||||
"motd_file": null,
|
||||
"order": null,
|
||||
"os": "linux",
|
||||
"resources_monitoring": [],
|
||||
"shutdown_script": null,
|
||||
"startup_script": null,
|
||||
"startup_script_behavior": "non-blocking",
|
||||
"token": "ac32e23e-336a-4e63-a7a4-71ab85f16831",
|
||||
"troubleshooting_url": null
|
||||
},
|
||||
"sensitive_values": {
|
||||
"display_apps": [
|
||||
{}
|
||||
],
|
||||
"metadata": [],
|
||||
"resources_monitoring": [],
|
||||
"token": true
|
||||
},
|
||||
"depends_on": [
|
||||
"data.coder_provisioner.me"
|
||||
]
|
||||
},
|
||||
{
|
||||
"address": "coder_ai_task.a",
|
||||
"mode": "managed",
|
||||
"type": "coder_ai_task",
|
||||
"name": "a",
|
||||
"provider_name": "registry.terraform.io/coder/coder",
|
||||
"schema_version": 1,
|
||||
"values": {
|
||||
"id": "b83734ee-765f-45db-a37b-a1e89414be5f",
|
||||
"sidebar_app": [
|
||||
{
|
||||
"id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd"
|
||||
}
|
||||
]
|
||||
},
|
||||
"sensitive_values": {
|
||||
"sidebar_app": [
|
||||
{}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
terraform {
|
||||
required_providers {
|
||||
coder = {
|
||||
source = "coder/coder"
|
||||
version = ">= 2.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data "coder_provisioner" "me" {}
|
||||
data "coder_workspace" "me" {}
|
||||
data "coder_workspace_owner" "me" {}
|
||||
|
||||
resource "coder_agent" "main" {
|
||||
arch = data.coder_provisioner.me.arch
|
||||
os = data.coder_provisioner.me.os
|
||||
}
|
||||
|
||||
resource "coder_ai_task" "a" {
|
||||
sidebar_app {
|
||||
id = "5ece4674-dd35-4f16-88c8-82e40e72e2fd" # fake ID to satisfy requirement, irrelevant otherwise
|
||||
}
|
||||
}
|
||||
Generated
Vendored
-3
@@ -4,20 +4,17 @@ digraph {
|
||||
subgraph "root" {
|
||||
"[root] coder_ai_task.a (expand)" [label = "coder_ai_task.a", shape = "box"]
|
||||
"[root] coder_ai_task.b (expand)" [label = "coder_ai_task.b", shape = "box"]
|
||||
"[root] data.coder_parameter.prompt (expand)" [label = "data.coder_parameter.prompt", shape = "box"]
|
||||
"[root] data.coder_provisioner.me (expand)" [label = "data.coder_provisioner.me", shape = "box"]
|
||||
"[root] data.coder_workspace.me (expand)" [label = "data.coder_workspace.me", shape = "box"]
|
||||
"[root] data.coder_workspace_owner.me (expand)" [label = "data.coder_workspace_owner.me", shape = "box"]
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"]" [label = "provider[\"registry.terraform.io/coder/coder\"]", shape = "diamond"]
|
||||
"[root] coder_ai_task.a (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] coder_ai_task.b (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] data.coder_parameter.prompt (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] data.coder_provisioner.me (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] data.coder_workspace.me (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] data.coder_workspace_owner.me (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] coder_ai_task.a (expand)"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] coder_ai_task.b (expand)"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] data.coder_parameter.prompt (expand)"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] data.coder_provisioner.me (expand)"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] data.coder_workspace.me (expand)"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] data.coder_workspace_owner.me (expand)"
|
||||
|
||||
Generated
Vendored
+13
-71
@@ -34,16 +34,11 @@
|
||||
"provider_name": "registry.terraform.io/coder/coder",
|
||||
"schema_version": 1,
|
||||
"values": {
|
||||
"sidebar_app": [
|
||||
{
|
||||
"id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd"
|
||||
}
|
||||
]
|
||||
"app_id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd",
|
||||
"sidebar_app": []
|
||||
},
|
||||
"sensitive_values": {
|
||||
"sidebar_app": [
|
||||
{}
|
||||
]
|
||||
"sidebar_app": []
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -70,7 +65,9 @@
|
||||
]
|
||||
},
|
||||
"after_unknown": {
|
||||
"app_id": true,
|
||||
"id": true,
|
||||
"prompt": true,
|
||||
"sidebar_app": [
|
||||
{}
|
||||
]
|
||||
@@ -96,23 +93,17 @@
|
||||
],
|
||||
"before": null,
|
||||
"after": {
|
||||
"sidebar_app": [
|
||||
{
|
||||
"id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd"
|
||||
}
|
||||
]
|
||||
"app_id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd",
|
||||
"sidebar_app": []
|
||||
},
|
||||
"after_unknown": {
|
||||
"id": true,
|
||||
"sidebar_app": [
|
||||
{}
|
||||
]
|
||||
"prompt": true,
|
||||
"sidebar_app": []
|
||||
},
|
||||
"before_sensitive": false,
|
||||
"after_sensitive": {
|
||||
"sidebar_app": [
|
||||
{}
|
||||
]
|
||||
"sidebar_app": []
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -123,35 +114,6 @@
|
||||
"values": {
|
||||
"root_module": {
|
||||
"resources": [
|
||||
{
|
||||
"address": "data.coder_parameter.prompt",
|
||||
"mode": "data",
|
||||
"type": "coder_parameter",
|
||||
"name": "prompt",
|
||||
"provider_name": "registry.terraform.io/coder/coder",
|
||||
"schema_version": 1,
|
||||
"values": {
|
||||
"default": null,
|
||||
"description": null,
|
||||
"display_name": null,
|
||||
"ephemeral": false,
|
||||
"form_type": "input",
|
||||
"icon": null,
|
||||
"id": "f9502ef2-226e-49a6-8831-99a74f8415e7",
|
||||
"mutable": false,
|
||||
"name": "AI Prompt",
|
||||
"option": null,
|
||||
"optional": false,
|
||||
"order": null,
|
||||
"styling": "{}",
|
||||
"type": "string",
|
||||
"validation": [],
|
||||
"value": ""
|
||||
},
|
||||
"sensitive_values": {
|
||||
"validation": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"address": "data.coder_provisioner.me",
|
||||
"mode": "data",
|
||||
@@ -256,35 +218,15 @@
|
||||
"name": "b",
|
||||
"provider_config_key": "coder",
|
||||
"expressions": {
|
||||
"sidebar_app": [
|
||||
{
|
||||
"id": {
|
||||
"constant_value": "5ece4674-dd35-4f16-88c8-82e40e72e2fd"
|
||||
}
|
||||
}
|
||||
]
|
||||
"app_id": {
|
||||
"constant_value": "5ece4674-dd35-4f16-88c8-82e40e72e2fd"
|
||||
}
|
||||
},
|
||||
"schema_version": 1,
|
||||
"count_expression": {
|
||||
"constant_value": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"address": "data.coder_parameter.prompt",
|
||||
"mode": "data",
|
||||
"type": "coder_parameter",
|
||||
"name": "prompt",
|
||||
"provider_config_key": "coder",
|
||||
"expressions": {
|
||||
"name": {
|
||||
"constant_value": "AI Prompt"
|
||||
},
|
||||
"type": {
|
||||
"constant_value": "string"
|
||||
}
|
||||
},
|
||||
"schema_version": 1
|
||||
},
|
||||
{
|
||||
"address": "data.coder_provisioner.me",
|
||||
"mode": "data",
|
||||
|
||||
Generated
Vendored
-3
@@ -4,20 +4,17 @@ digraph {
|
||||
subgraph "root" {
|
||||
"[root] coder_ai_task.a (expand)" [label = "coder_ai_task.a", shape = "box"]
|
||||
"[root] coder_ai_task.b (expand)" [label = "coder_ai_task.b", shape = "box"]
|
||||
"[root] data.coder_parameter.prompt (expand)" [label = "data.coder_parameter.prompt", shape = "box"]
|
||||
"[root] data.coder_provisioner.me (expand)" [label = "data.coder_provisioner.me", shape = "box"]
|
||||
"[root] data.coder_workspace.me (expand)" [label = "data.coder_workspace.me", shape = "box"]
|
||||
"[root] data.coder_workspace_owner.me (expand)" [label = "data.coder_workspace_owner.me", shape = "box"]
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"]" [label = "provider[\"registry.terraform.io/coder/coder\"]", shape = "diamond"]
|
||||
"[root] coder_ai_task.a (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] coder_ai_task.b (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] data.coder_parameter.prompt (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] data.coder_provisioner.me (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] data.coder_workspace.me (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] data.coder_workspace_owner.me (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] coder_ai_task.a (expand)"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] coder_ai_task.b (expand)"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] data.coder_parameter.prompt (expand)"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] data.coder_provisioner.me (expand)"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] data.coder_workspace.me (expand)"
|
||||
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] data.coder_workspace_owner.me (expand)"
|
||||
|
||||
Generated
Vendored
+7
-38
@@ -4,35 +4,6 @@
|
||||
"values": {
|
||||
"root_module": {
|
||||
"resources": [
|
||||
{
|
||||
"address": "data.coder_parameter.prompt",
|
||||
"mode": "data",
|
||||
"type": "coder_parameter",
|
||||
"name": "prompt",
|
||||
"provider_name": "registry.terraform.io/coder/coder",
|
||||
"schema_version": 1,
|
||||
"values": {
|
||||
"default": null,
|
||||
"description": null,
|
||||
"display_name": null,
|
||||
"ephemeral": false,
|
||||
"form_type": "input",
|
||||
"icon": null,
|
||||
"id": "d3c415c0-c6bc-42e3-806e-8c792a7e7b3b",
|
||||
"mutable": false,
|
||||
"name": "AI Prompt",
|
||||
"option": null,
|
||||
"optional": false,
|
||||
"order": null,
|
||||
"styling": "{}",
|
||||
"type": "string",
|
||||
"validation": [],
|
||||
"value": ""
|
||||
},
|
||||
"sensitive_values": {
|
||||
"validation": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"address": "data.coder_provisioner.me",
|
||||
"mode": "data",
|
||||
@@ -105,7 +76,9 @@
|
||||
"provider_name": "registry.terraform.io/coder/coder",
|
||||
"schema_version": 1,
|
||||
"values": {
|
||||
"app_id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd",
|
||||
"id": "89e6ab36-2e98-4d13-9b4c-69b7588b7e1d",
|
||||
"prompt": "default",
|
||||
"sidebar_app": [
|
||||
{
|
||||
"id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd"
|
||||
@@ -127,17 +100,13 @@
|
||||
"provider_name": "registry.terraform.io/coder/coder",
|
||||
"schema_version": 1,
|
||||
"values": {
|
||||
"id": "d4643699-519d-44c8-a878-556789256cbd",
|
||||
"sidebar_app": [
|
||||
{
|
||||
"id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd"
|
||||
}
|
||||
]
|
||||
"app_id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd",
|
||||
"id": "5ece4674-dd35-4f16-88c8-82e40e72e2fd",
|
||||
"prompt": "default",
|
||||
"sidebar_app": []
|
||||
},
|
||||
"sensitive_values": {
|
||||
"sidebar_app": [
|
||||
{}
|
||||
]
|
||||
"sidebar_app": []
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -11,11 +11,6 @@ data "coder_provisioner" "me" {}
|
||||
data "coder_workspace" "me" {}
|
||||
data "coder_workspace_owner" "me" {}
|
||||
|
||||
data "coder_parameter" "prompt" {
|
||||
name = "AI Prompt"
|
||||
type = "string"
|
||||
}
|
||||
|
||||
resource "coder_ai_task" "a" {
|
||||
count = 1
|
||||
sidebar_app {
|
||||
@@ -24,8 +19,6 @@ resource "coder_ai_task" "a" {
|
||||
}
|
||||
|
||||
resource "coder_ai_task" "b" {
|
||||
count = 1
|
||||
sidebar_app {
|
||||
id = "5ece4674-dd35-4f16-88c8-82e40e72e2fd" # fake ID to satisfy requirement, irrelevant otherwise
|
||||
}
|
||||
count = 1
|
||||
app_id = "5ece4674-dd35-4f16-88c8-82e40e72e2fd" # fake ID to satisfy requirement, irrelevant otherwise
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user