From 2fe3a2309437e0c96eeff30b6f42f1d97ecb3a88 Mon Sep 17 00:00:00 2001 From: Brandon Croft Date: Tue, 24 Jan 2023 16:51:31 -0700 Subject: [PATCH] Add generic hostname (localterraform.com) support to cloud backend Aliases the backend hostname config as "localterraform.com" and duplicates any existing auth credentials during cloud backend configuration. --- go.mod | 2 +- go.sum | 4 ++-- internal/cloud/backend.go | 20 ++++++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 458d5b9298..e7df6aae8f 100644 --- a/go.mod +++ b/go.mod @@ -46,7 +46,7 @@ require ( github.com/hashicorp/hcl/v2 v2.15.0 github.com/hashicorp/terraform-config-inspect v0.0.0-20210209133302-4fd17a0faac2 github.com/hashicorp/terraform-registry-address v0.0.0-20220623143253-7d51757b572c - github.com/hashicorp/terraform-svchost v0.0.1 + github.com/hashicorp/terraform-svchost v0.1.0 github.com/jmespath/go-jmespath v0.4.0 github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 github.com/lib/pq v1.10.3 diff --git a/go.sum b/go.sum index ff712e7fe9..e0f2f32814 100644 --- a/go.sum +++ b/go.sum @@ -410,8 +410,8 @@ github.com/hashicorp/terraform-config-inspect v0.0.0-20210209133302-4fd17a0faac2 github.com/hashicorp/terraform-registry-address v0.0.0-20220623143253-7d51757b572c h1:D8aRO6+mTqHfLsK/BC3j5OAoogv1WLRWzY1AaTo3rBg= github.com/hashicorp/terraform-registry-address v0.0.0-20220623143253-7d51757b572c/go.mod h1:Wn3Na71knbXc1G8Lh+yu/dQWWJeFQEpDeJMtWMtlmNI= github.com/hashicorp/terraform-svchost v0.0.0-20200729002733-f050f53b9734/go.mod h1:kNDNcF7sN4DocDLBkQYz73HGKwN1ANB1blq4lIYLYvg= -github.com/hashicorp/terraform-svchost v0.0.1 h1:Zj6fR5wnpOHnJUmLyWozjMeDaVuE+cstMPj41/eKmSQ= -github.com/hashicorp/terraform-svchost v0.0.1/go.mod h1:ut8JaH0vumgdCfJaihdcZULqkAwHdQNwNH7taIDdsZM= +github.com/hashicorp/terraform-svchost v0.1.0 h1:0+RcgZdZYNd81Vw7tu62g9JiLLvbOigp7QtyNh6CjXk= +github.com/hashicorp/terraform-svchost v0.1.0/go.mod h1:ut8JaH0vumgdCfJaihdcZULqkAwHdQNwNH7taIDdsZM= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d h1:kJCB4vdITiW1eC1vq2e6IsrXKrZit1bv/TDYFGMp4BQ= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= diff --git a/internal/cloud/backend.go b/internal/cloud/backend.go index c01cf71ed0..2fa9eb33f9 100644 --- a/internal/cloud/backend.go +++ b/internal/cloud/backend.go @@ -39,6 +39,7 @@ const ( tfeServiceID = "tfe.v2" headerSourceKey = "X-Terraform-Integration" headerSourceValue = "cloud" + genericHostname = "localterraform.com" ) // Cloud is an implementation of EnhancedBackend in service of the Terraform Cloud/Enterprise @@ -193,6 +194,23 @@ func (b *Cloud) PrepareConfig(obj cty.Value) (cty.Value, tfdiags.Diagnostics) { return obj, diags } +// configureGenericHost aliases the cloud backend hostname configuration +// as a generic "localterraform.com" hostname. This was originally added as a +// Terraform Enterprise feature and is useful for re-using whatever the +// Cloud/Enterprise backend host is in nested module sources in order +// to prevent code churn when re-using config between multiple +// Terraform Enterprise environments. +func (b *Cloud) configureGenericHostname() { + // This won't be an error for the given constant value + genericHost, _ := svchost.ForComparison(genericHostname) + + // This won't be an error because, by this time, the hostname has been parsed and + // service discovery requests made against it. + targetHost, _ := svchost.ForComparison(b.hostname) + + b.services.Alias(genericHost, targetHost) +} + // Configure implements backend.Enhanced. func (b *Cloud) Configure(obj cty.Value) tfdiags.Diagnostics { var diags tfdiags.Diagnostics @@ -258,6 +276,8 @@ func (b *Cloud) Configure(obj cty.Value) tfdiags.Diagnostics { return diags } + b.configureGenericHostname() + if b.client == nil { cfg := &tfe.Config{ Address: service.String(),