diff --git a/command/registry.go b/command/registry.go index b197303fd..960049197 100644 --- a/command/registry.go +++ b/command/registry.go @@ -47,6 +47,10 @@ func TrySetupHCP(cfg packer.Handler) hcl.Diagnostics { func setupRegistryForPackerConfig(pc *hcl2template.PackerConfig) hcl.Diagnostics { var diags hcl.Diagnostics + if env.IsHCPDisabled() { + return nil + } + hasHCP := false for _, build := range pc.Builds { @@ -55,6 +59,14 @@ func setupRegistryForPackerConfig(pc *hcl2template.PackerConfig) hcl.Diagnostics } } + if env.HasPackerRegistryBucket() { + hasHCP = true + } + + if !hasHCP { + return nil + } + if hasHCP && len(pc.Builds) > 1 { diags = append(diags, &hcl.Diagnostic{ Severity: hcl.DiagError, @@ -67,14 +79,6 @@ func setupRegistryForPackerConfig(pc *hcl2template.PackerConfig) hcl.Diagnostics return diags } - if env.IsPAREnabled() { - hasHCP = true - } - - if !hasHCP { - return diags - } - var err error pc.Bucket, err = registry.NewBucketWithIteration(registry.IterationOptions{ TemplateBaseDir: pc.Basedir, @@ -111,6 +115,14 @@ func setupRegistryForPackerConfig(pc *hcl2template.PackerConfig) hcl.Diagnostics } } + if pc.Bucket.Slug == "" { + return append(diags, &hcl.Diagnostic{ + Summary: "bucket name cannot be empty", + Detail: "empty bucket name, please set it with the HCP_PACKER_BUCKET_NAME environment variable, or in a `hcp_packer_registry` block", + Severity: hcl.DiagError, + }) + } + vals, diags := pc.Datasources.Values() if diags != nil { return diags @@ -254,7 +266,11 @@ func iterValueToDSOutput(iterVal map[string]cty.Value) iterds.DatasourceOutput { } func setupRegistryForPackerCore(cfg *CoreWrapper) hcl.Diagnostics { - if !env.IsPAREnabled() { + if env.IsHCPDisabled() { + return nil + } + + if !env.HasPackerRegistryBucket() { return nil } @@ -276,6 +292,14 @@ func setupRegistryForPackerCore(cfg *CoreWrapper) hcl.Diagnostics { } core.Bucket.LoadDefaultSettingsFromEnv() + if core.Bucket.Slug == "" { + return append(diags, &hcl.Diagnostic{ + Summary: "bucket name cannot be empty", + Detail: "empty bucket name, please set it with the HCP_PACKER_BUCKET_NAME environment variable", + Severity: hcl.DiagError, + }) + } + for _, b := range core.Template.Builders { // Get all builds slated within config ignoring any only or exclude flags. core.Bucket.RegisterBuildForComponent(b.Name) diff --git a/internal/registry/env/env.go b/internal/registry/env/env.go index 9f8f49612..beb9397ef 100644 --- a/internal/registry/env/env.go +++ b/internal/registry/env/env.go @@ -6,18 +6,23 @@ import ( ) func HasClientID() bool { - _, ok := os.LookupEnv(HCPClientID) - return ok + return hasEnvVar(HCPClientID) } func HasClientSecret() bool { - _, ok := os.LookupEnv(HCPClientSecret) - return ok + return hasEnvVar(HCPClientSecret) } func HasPackerRegistryBucket() bool { - _, ok := os.LookupEnv(HCPPackerBucket) - return ok + return hasEnvVar(HCPPackerBucket) +} + +func hasEnvVar(varName string) bool { + val, ok := os.LookupEnv(varName) + if !ok { + return false + } + return val != "" } func HasHCPCredentials() bool { @@ -35,7 +40,7 @@ func HasHCPCredentials() bool { return true } -func IsPAREnabled() bool { - val, ok := os.LookupEnv(HCPPackerRegistry) - return ok && strings.ToLower(val) != "off" && val != "0" +func IsHCPDisabled() bool { + hcp, ok := os.LookupEnv(HCPPackerRegistry) + return ok && strings.ToLower(hcp) == "off" || hcp == "0" } diff --git a/internal/registry/env/env_test.go b/internal/registry/env/env_test.go index 5d3a9afa4..c2fd27598 100644 --- a/internal/registry/env/env_test.go +++ b/internal/registry/env/env_test.go @@ -1,50 +1,46 @@ package env import ( - "os" "testing" ) -func Test_IsPAREnabled(t *testing.T) { +func Test_IsHCPDisabled(t *testing.T) { tcs := []struct { - name string - value string - output bool + name string + registry_value string + output bool }{ { - name: "set with 1", - value: "1", - output: true, + name: "nothing set", + registry_value: "", + output: false, }, { - name: "set with ON", - value: "ON", - output: true, + name: "registry set with 1", + registry_value: "1", + output: false, }, { - name: "set with 0", - value: "0", - output: false, + name: "registry set with 0", + registry_value: "0", + output: true, }, { - name: "set with OFF", - value: "OFF", - output: false, + name: "registry set with OFF", + registry_value: "OFF", + output: true, }, { - name: "unset", - value: "", - output: false, + name: "registry set with off", + registry_value: "off", + output: true, }, } for _, tc := range tcs { t.Run(tc.name, func(t *testing.T) { - if tc.value != "" { - _ = os.Setenv(HCPPackerRegistry, tc.value) - defer os.Unsetenv(HCPPackerRegistry) - } - out := IsPAREnabled() + t.Setenv(HCPPackerRegistry, tc.registry_value) + out := IsHCPDisabled() if out != tc.output { t.Fatalf("unexpected output: %t", out) }