Skip to content

Commit c56733a

Browse files
hao-nan-lirileykarson
authored andcommitted
Co-authored-by: Riley Karson <rileykarson@google.com>
1 parent 0533791 commit c56733a

File tree

5 files changed

+67
-1
lines changed

5 files changed

+67
-1
lines changed

mmv1/third_party/terraform/acctest/provider_test_utils.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,14 @@ func GoogleProviderConfig(t *testing.T) *transport_tpg.Config {
4040

4141
sdkProvider := provider.Provider()
4242
rc := terraform.ResourceConfig{}
43+
44+
// `universe_domain` must be specified through config (i.e. unlike most provider settings there's no environment variable), and we check the value matches the credentials during provider initilization
45+
// In the test environment we seed the value through a test-only environment variable, and we need to pre-seed a value in ResourceConfig as if it was in config to pass the check
46+
universeDomain := envvar.GetTestUniverseDomainFromEnv(t)
47+
if universeDomain != "" && universeDomain != "googleapis.com" {
48+
rc.Config = make(map[string]interface{})
49+
rc.Config["universe_domain"] = universeDomain
50+
}
4351
sdkProvider.Configure(context.Background(), &rc)
4452
return sdkProvider.Meta().(*transport_tpg.Config)
4553
}

mmv1/third_party/terraform/envvar/envvar_utils.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ var UniverseDomainEnvVars = []string{
8686
"GOOGLE_UNIVERSE_DOMAIN",
8787
}
8888

89+
var ProjectPrefixEnvVars = []string{
90+
"GOOGLE_PROJECT_PREFIX",
91+
}
92+
8993
// This is the billing account that will be charged for the infrastructure used during testing. For
9094
// that reason, it is also the billing account used for creating new projects.
9195
var BillingAccountEnvVars = []string{
@@ -146,6 +150,11 @@ func GetTestUniverseDomainFromEnv(t *testing.T) string {
146150
return transport_tpg.MultiEnvSearch(UniverseDomainEnvVars)
147151
}
148152

153+
// Project Prefix of different universes
154+
func GetProjectPrefixFromEnv() string {
155+
return transport_tpg.MultiEnvSearch(ProjectPrefixEnvVars)
156+
}
157+
149158
// AccTestPreCheck ensures at least one of the region env variables is set.
150159
func GetTestRegionFromEnv() string {
151160
return transport_tpg.MultiEnvSearch(RegionEnvVars)

mmv1/third_party/terraform/provider/provider.go.tmpl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,6 @@ func ProviderConfigure(ctx context.Context, d *schema.ResourceData, p *schema.Pr
426426
if err := config.LoadAndValidate(stopCtx); err != nil {
427427
return nil, diag.FromErr(err)
428428
}
429-
430429
// Verify that universe domains match between credentials and configuration
431430
if v, ok := d.GetOk("universe_domain"); ok {
432431
if config.UniverseDomain == "" && v.(string) != "googleapis.com" { // v can't be "", as it wouldn't pass `ok` above

mmv1/third_party/terraform/provider/universe/universe_domain_compute_test.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,31 @@ func TestAccUniverseDomainDisk(t *testing.T) {
3333
})
3434
}
3535

36+
func TestAccUniverseDomainDiskImage(t *testing.T) {
37+
38+
universeDomain := envvar.GetTestUniverseDomainFromEnv(t)
39+
zone := envvar.GetTestZoneFromEnv()
40+
prefix := envvar.GetProjectPrefixFromEnv()
41+
image_project := ""
42+
43+
if prefix != "" {
44+
image_project = prefix + ":debian-cloud"
45+
} else {
46+
image_project = "debian-cloud"
47+
}
48+
49+
acctest.VcrTest(t, resource.TestCase{
50+
PreCheck: func() { acctest.AccTestPreCheck(t) },
51+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
52+
CheckDestroy: testAccCheckComputeDiskDestroyProducer(t),
53+
Steps: []resource.TestStep{
54+
{
55+
Config: testAccUniverseDomain_basic_disk_image(universeDomain, zone, image_project),
56+
},
57+
},
58+
})
59+
}
60+
3661
func TestAccDefaultUniverseDomainDisk(t *testing.T) {
3762
universeDomain := "googleapis.com"
3863

@@ -85,6 +110,28 @@ resource "google_compute_instance_template" "instance_template" {
85110
`, universeDomain)
86111
}
87112

113+
func testAccUniverseDomain_basic_disk_image(universeDomain, zone, image_project string) string {
114+
return fmt.Sprintf(`
115+
provider "google" {
116+
universe_domain = "%s"
117+
}
118+
119+
data "google_compute_images" "debian" {
120+
project = "%s"
121+
filter = "name=debian-12*"
122+
}
123+
124+
resource "google_compute_disk" "primary" {
125+
name = "async-test-disk"
126+
type = "pd-ssd"
127+
zone = "%s"
128+
129+
physical_block_size_bytes = 4096
130+
image = "projects/%s/global/images/${data.google_compute_images.debian.images[0].name}"
131+
}
132+
`, universeDomain, image_project, zone, image_project)
133+
}
134+
88135
func testAccCheckComputeDiskDestroyProducer(t *testing.T) func(s *terraform.State) error {
89136
return func(s *terraform.State) error {
90137
for name, rs := range s.RootModule().Resources {

mmv1/third_party/terraform/services/compute/image.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ func ResolveImage(c *transport_tpg.Config, project, name, userAgent string) (str
106106
break
107107
}
108108
}
109+
if c.UniverseDomain != "" && c.UniverseDomain != "googleapis.com" {
110+
resolveImageLink = regexp.MustCompile(fmt.Sprintf("^https://compute.%s/compute/[a-z0-9]+/projects/(%s)/global/images/(%s)", c.UniverseDomain, verify.ProjectRegex, resolveImageImageRegex))
111+
}
109112
switch {
110113
case resolveImageLink.MatchString(name): // https://www.googleapis.com/compute/v1/projects/xyz/global/images/xyz
111114
return name, nil

0 commit comments

Comments
 (0)