From cf2e8d0dcc080237970e75c0d0eb4c3e6ccf7860 Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Thu, 27 Jun 2024 09:54:36 +0200 Subject: [PATCH 1/2] feat: require environment variables --- provider/helpers/env.go | 6 ++++++ provider/workspace.go | 15 ++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/provider/helpers/env.go b/provider/helpers/env.go index b1007820..6ffab3f6 100644 --- a/provider/helpers/env.go +++ b/provider/helpers/env.go @@ -6,7 +6,13 @@ import ( ) // RequireEnv requires environment variable to be present. +// The constraint can be verified only during execution of the workspace build +// (determined with env `CODER_WORKSPACE_BUILD_ID`). func RequireEnv(name string) (string, error) { + if os.Getenv("CODER_WORKSPACE_BUILD_ID") == "" { + return os.Getenv(name), nil + } + val := os.Getenv(name) if val == "" { return "", fmt.Errorf("%s is required", name) diff --git a/provider/workspace.go b/provider/workspace.go index f06e9e1e..004e5f88 100644 --- a/provider/workspace.go +++ b/provider/workspace.go @@ -62,13 +62,22 @@ func workspaceDataSource() *schema.Resource { id := helpers.OptionalEnvOrDefault("CODER_WORKSPACE_ID", uuid.NewString()) rd.SetId(id) - templateID := helpers.OptionalEnv("CODER_WORKSPACE_TEMPLATE_ID") // FIXME switch to `helpers.RequireEnv(...)` + templateID, err := helpers.RequireEnv("CODER_WORKSPACE_TEMPLATE_ID") + if err != nil { + return diag.Errorf("template ID is missing: %w", err) + } _ = rd.Set("template_id", templateID) - templateName := helpers.OptionalEnv("CODER_WORKSPACE_TEMPLATE_NAME") // FIXME switch to `helpers.RequireEnv(...)` + templateName, err := helpers.RequireEnv("CODER_WORKSPACE_TEMPLATE_NAME") + if err != nil { + return diag.Errorf("template name is missing: %w", err) + } _ = rd.Set("template_name", templateName) - templateVersion := helpers.OptionalEnv("CODER_WORKSPACE_TEMPLATE_VERSION") // FIXME switch to `helpers.RequireEnv(...)` + templateVersion, err := helpers.RequireEnv("CODER_WORKSPACE_TEMPLATE_VERSION") + if err != nil { + return diag.Errorf("template version is missing: %w", err) + } _ = rd.Set("template_version", templateVersion) config, valid := i.(config) From bc643864749fcbd01297b52b71c496a894c063f7 Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Thu, 27 Jun 2024 10:01:18 +0200 Subject: [PATCH 2/2] test --- provider/workspace.go | 6 +++--- provider/workspace_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/provider/workspace.go b/provider/workspace.go index 004e5f88..d8bfd3a5 100644 --- a/provider/workspace.go +++ b/provider/workspace.go @@ -64,19 +64,19 @@ func workspaceDataSource() *schema.Resource { templateID, err := helpers.RequireEnv("CODER_WORKSPACE_TEMPLATE_ID") if err != nil { - return diag.Errorf("template ID is missing: %w", err) + return diag.Errorf("template ID is missing: %s", err.Error()) } _ = rd.Set("template_id", templateID) templateName, err := helpers.RequireEnv("CODER_WORKSPACE_TEMPLATE_NAME") if err != nil { - return diag.Errorf("template name is missing: %w", err) + return diag.Errorf("template name is missing: %s", err.Error()) } _ = rd.Set("template_name", templateName) templateVersion, err := helpers.RequireEnv("CODER_WORKSPACE_TEMPLATE_VERSION") if err != nil { - return diag.Errorf("template version is missing: %w", err) + return diag.Errorf("template version is missing: %s", err.Error()) } _ = rd.Set("template_version", templateVersion) diff --git a/provider/workspace_test.go b/provider/workspace_test.go index d285b30c..e53f30d4 100644 --- a/provider/workspace_test.go +++ b/provider/workspace_test.go @@ -1,6 +1,7 @@ package provider_test import ( + "regexp" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -102,3 +103,34 @@ func TestWorkspace_UndefinedOwner(t *testing.T) { }}, }) } + +func TestWorkspace_MissingTemplateName(t *testing.T) { + t.Setenv("CODER_WORKSPACE_BUILD_ID", "1") // Let's pretend this is a workspace build + + t.Setenv("CODER_WORKSPACE_OWNER", "owner123") + t.Setenv("CODER_WORKSPACE_OWNER_ID", "11111111-1111-1111-1111-111111111111") + t.Setenv("CODER_WORKSPACE_OWNER_NAME", "Mr Owner") + t.Setenv("CODER_WORKSPACE_OWNER_EMAIL", "owner123@example.com") + t.Setenv("CODER_WORKSPACE_OWNER_SESSION_TOKEN", "abc123") + t.Setenv("CODER_WORKSPACE_OWNER_GROUPS", `["group1", "group2"]`) + t.Setenv("CODER_WORKSPACE_OWNER_OIDC_ACCESS_TOKEN", "supersecret") + t.Setenv("CODER_WORKSPACE_TEMPLATE_ID", "templateID") + // CODER_WORKSPACE_TEMPLATE_NAME is missing + t.Setenv("CODER_WORKSPACE_TEMPLATE_VERSION", "v1.2.3") + + resource.Test(t, resource.TestCase{ + Providers: map[string]*schema.Provider{ + "coder": provider.New(), + }, + IsUnitTest: true, + Steps: []resource.TestStep{{ + Config: ` + provider "coder" { + url = "https://example.com:8080" + } + data "coder_workspace" "me" { + }`, + ExpectError: regexp.MustCompile("CODER_WORKSPACE_TEMPLATE_NAME is required"), + }}, + }) +} 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