diff --git a/docs/resources/external_agent.md b/docs/resources/external_agent.md new file mode 100644 index 00000000..b6d0b8ae --- /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 + +- `agent_id` (String) The `id` property of a `coder_agent` resource to associate with. + +### 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..2856c2bf --- /dev/null +++ b/provider/external_agent.go @@ -0,0 +1,31 @@ +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{ + "agent_id": { + Type: schema.TypeString, + Description: "The `id` property of a `coder_agent` resource to associate with.", + ForceNew: true, + Required: true, + }, + }, + } +} diff --git a/provider/external_agent_test.go b/provider/external_agent_test.go new file mode 100644 index 00000000..f0638b45 --- /dev/null +++ b/provider/external_agent_test.go @@ -0,0 +1,49 @@ +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_agent" "dev" { + os = "linux" + arch = "amd64" + } + + resource "coder_external_agent" "dev" { + agent_id = coder_agent.dev.id + } + `, + Check: func(state *terraform.State) error { + require.Len(t, state.Modules, 1) + 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 + }, + }}, + }) + }) +} 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(), }, } }
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: