From 234129b8186fa90ce6abfceb89d91233fd8a2ef6 Mon Sep 17 00:00:00 2001 From: Kacper Sawicki Date: Thu, 31 Jul 2025 12:37:57 +0000 Subject: [PATCH 1/2] add coder_external_agent resource --- docs/resources/external_agent.md | 24 +++++++++++++++++++ provider/external_agent.go | 32 +++++++++++++++++++++++++ provider/external_agent_test.go | 41 ++++++++++++++++++++++++++++++++ provider/provider.go | 1 + 4 files changed, 98 insertions(+) create mode 100644 docs/resources/external_agent.md create mode 100644 provider/external_agent.go create mode 100644 provider/external_agent_test.go diff --git a/docs/resources/external_agent.md b/docs/resources/external_agent.md new file mode 100644 index 00000000..942bd670 --- /dev/null +++ b/docs/resources/external_agent.md @@ -0,0 +1,24 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "coder_external_agent Resource - terraform-provider-coder" +subcategory: "" +description: |- + Define an external agent to be used in a workspace. +--- + +# coder_external_agent (Resource) + +Define an external agent to be used in a workspace. + + + + +## Schema + +### Required + +- `token` (String, Sensitive) Set the environment variable `CODER_AGENT_TOKEN` with this token to authenticate an agent. + +### Read-Only + +- `id` (String) The ID of this resource. diff --git a/provider/external_agent.go b/provider/external_agent.go new file mode 100644 index 00000000..0bcc78a8 --- /dev/null +++ b/provider/external_agent.go @@ -0,0 +1,32 @@ +package provider + +import ( + "context" + + "github.com/google/uuid" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +) + +func externalAgentResource() *schema.Resource { + return &schema.Resource{ + SchemaVersion: 1, + + Description: "Define an external agent to be used in a workspace.", + CreateContext: func(ctx context.Context, rd *schema.ResourceData, _ interface{}) diag.Diagnostics { + rd.SetId(uuid.NewString()) + return nil + }, + ReadContext: schema.NoopContext, + DeleteContext: schema.NoopContext, + Schema: map[string]*schema.Schema{ + "token": { + ForceNew: true, + Required: true, + Sensitive: true, + Description: "Set the environment variable `CODER_AGENT_TOKEN` with this token to authenticate an agent.", + Type: schema.TypeString, + }, + }, + } +} diff --git a/provider/external_agent_test.go b/provider/external_agent_test.go new file mode 100644 index 00000000..c043e07f --- /dev/null +++ b/provider/external_agent_test.go @@ -0,0 +1,41 @@ +package provider_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/stretchr/testify/require" +) + +func TestExternalAgent(t *testing.T) { + t.Parallel() + + t.Run("OK", func(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + ProviderFactories: coderFactory(), + IsUnitTest: true, + Steps: []resource.TestStep{{ + Config: ` + provider "coder" { + } + + resource "coder_external_agent" "main" { + token = "token" + } + `, + Check: func(state *terraform.State) error { + require.Len(t, state.Modules, 1) + resource := state.Modules[0].Resources["coder_external_agent.main"] + require.NotNil(t, resource) + value := resource.Primary.Attributes["token"] + require.NotNil(t, value) + require.Greater(t, len(value), 0) + return nil + }, + }}, + }) + }) +} diff --git a/provider/provider.go b/provider/provider.go index a0ef63f9..5a2f1972 100644 --- a/provider/provider.go +++ b/provider/provider.go @@ -74,6 +74,7 @@ func New() *schema.Provider { "coder_script": scriptResource(), "coder_env": envResource(), "coder_devcontainer": devcontainerResource(), + "coder_external_agent": externalAgentResource(), }, } } From f6861691d772b9ec2a8560e4ab1ed226b8dc648f Mon Sep 17 00:00:00 2001 From: Kacper Sawicki Date: Wed, 6 Aug 2025 08:54:03 +0000 Subject: [PATCH 2/2] Change token to agent_id --- docs/resources/external_agent.md | 2 +- provider/external_agent.go | 7 +++---- provider/external_agent_test.go | 22 +++++++++++++++------- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/docs/resources/external_agent.md b/docs/resources/external_agent.md index 942bd670..b6d0b8ae 100644 --- a/docs/resources/external_agent.md +++ b/docs/resources/external_agent.md @@ -17,7 +17,7 @@ Define an external agent to be used in a workspace. ### Required -- `token` (String, Sensitive) Set the environment variable `CODER_AGENT_TOKEN` with this token to authenticate an agent. +- `agent_id` (String) The `id` property of a `coder_agent` resource to associate with. ### Read-Only diff --git a/provider/external_agent.go b/provider/external_agent.go index 0bcc78a8..2856c2bf 100644 --- a/provider/external_agent.go +++ b/provider/external_agent.go @@ -20,12 +20,11 @@ func externalAgentResource() *schema.Resource { ReadContext: schema.NoopContext, DeleteContext: schema.NoopContext, Schema: map[string]*schema.Schema{ - "token": { + "agent_id": { + Type: schema.TypeString, + Description: "The `id` property of a `coder_agent` resource to associate with.", ForceNew: true, Required: true, - Sensitive: true, - Description: "Set the environment variable `CODER_AGENT_TOKEN` with this token to authenticate an agent.", - Type: schema.TypeString, }, }, } diff --git a/provider/external_agent_test.go b/provider/external_agent_test.go index c043e07f..f0638b45 100644 --- a/provider/external_agent_test.go +++ b/provider/external_agent_test.go @@ -21,18 +21,26 @@ func TestExternalAgent(t *testing.T) { Config: ` provider "coder" { } + + resource "coder_agent" "dev" { + os = "linux" + arch = "amd64" + } - resource "coder_external_agent" "main" { - token = "token" + resource "coder_external_agent" "dev" { + agent_id = coder_agent.dev.id } `, Check: func(state *terraform.State) error { require.Len(t, state.Modules, 1) - resource := state.Modules[0].Resources["coder_external_agent.main"] - require.NotNil(t, resource) - value := resource.Primary.Attributes["token"] - require.NotNil(t, value) - require.Greater(t, len(value), 0) + require.Len(t, state.Modules[0].Resources, 2) + + agentResource := state.Modules[0].Resources["coder_agent.dev"] + require.NotNil(t, agentResource) + externalAgentResource := state.Modules[0].Resources["coder_external_agent.dev"] + require.NotNil(t, externalAgentResource) + + require.Equal(t, agentResource.Primary.Attributes["id"], externalAgentResource.Primary.Attributes["agent_id"]) return nil }, }}, pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy