Skip to content

Commit 7a5e165

Browse files
Image error (#13863) (#22809)
[upstream:1c17945b11b3b0dac71f1ba4ae924b71e96ac4ec] Signed-off-by: Modular Magician <[email protected]>
1 parent f7f888e commit 7a5e165

File tree

5 files changed

+67
-1
lines changed

5 files changed

+67
-1
lines changed

google/acctest/provider_test_utils.go

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

4343
sdkProvider := provider.Provider()
4444
rc := terraform.ResourceConfig{}
45+
46+
// `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
47+
// 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
48+
universeDomain := envvar.GetTestUniverseDomainFromEnv(t)
49+
if universeDomain != "" && universeDomain != "googleapis.com" {
50+
rc.Config = make(map[string]interface{})
51+
rc.Config["universe_domain"] = universeDomain
52+
}
4553
sdkProvider.Configure(context.Background(), &rc)
4654
return sdkProvider.Meta().(*transport_tpg.Config)
4755
}

google/envvar/envvar_utils.go

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

91+
var ProjectPrefixEnvVars = []string{
92+
"GOOGLE_PROJECT_PREFIX",
93+
}
94+
9195
// This is the billing account that will be charged for the infrastructure used during testing. For
9296
// that reason, it is also the billing account used for creating new projects.
9397
var BillingAccountEnvVars = []string{
@@ -148,6 +152,11 @@ func GetTestUniverseDomainFromEnv(t *testing.T) string {
148152
return transport_tpg.MultiEnvSearch(UniverseDomainEnvVars)
149153
}
150154

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

google/provider/provider.go

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

google/provider/universe/universe_domain_compute_test.go

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

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

@@ -87,6 +112,28 @@ resource "google_compute_instance_template" "instance_template" {
87112
`, universeDomain)
88113
}
89114

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

google/services/compute/image.go

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

0 commit comments

Comments
 (0)