Skip to content

Commit 1af93c6

Browse files
Added handling of arm64 images (#6325) (#12184)
Signed-off-by: Modular Magician <[email protected]>
1 parent 3a9c629 commit 1af93c6

File tree

4 files changed

+102
-8
lines changed

4 files changed

+102
-8
lines changed

.changelog/6325.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
compute: fixed perma-diff on `google_compute_disk` for new arm64 images
3+
```

google/image.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ var (
2626
resolveImageLink = regexp.MustCompile(fmt.Sprintf("^https://www.googleapis.com/compute/[a-z0-9]+/projects/(%s)/global/images/(%s)", ProjectRegex, resolveImageImageRegex))
2727

2828
windowsSqlImage = regexp.MustCompile("^sql-(?:server-)?([0-9]{4})-([a-z]+)-windows-(?:server-)?([0-9]{4})(?:-r([0-9]+))?-dc-v[0-9]+$")
29-
canonicalUbuntuLtsImage = regexp.MustCompile("^ubuntu-(minimal-)?([0-9]+)-")
29+
canonicalUbuntuLtsImage = regexp.MustCompile("^ubuntu-(minimal-)?([0-9]+)(?:.*(arm64))?.*$")
3030
cosLtsImage = regexp.MustCompile("^cos-([0-9]+)-")
3131
)
3232

google/resource_compute_disk.go

+15-4
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,14 @@ func diskImageEquals(oldImageName, newImageName string) bool {
141141
func diskImageFamilyEquals(imageName, familyName string) bool {
142142
// Handles the case when the image name includes the family name
143143
// e.g. image name: debian-9-drawfork-v20180109, family name: debian-9
144-
if strings.Contains(imageName, familyName) {
145-
return true
144+
// We have to check for arm64 because of cases like:
145+
// image name: opensuse-leap-15-4-v20220713-arm64, family name: opensuse-leap (should not suppress)
146+
if strings.Contains(imageName, strings.TrimSuffix(familyName, "-arm64")) {
147+
if strings.Contains(imageName, "-arm64") {
148+
return strings.HasSuffix(familyName, "-arm64")
149+
} else {
150+
return !strings.HasSuffix(familyName, "-arm64")
151+
}
146152
}
147153

148154
if suppressCanonicalFamilyDiff(imageName, familyName) {
@@ -167,8 +173,13 @@ func diskImageFamilyEquals(imageName, familyName string) bool {
167173
// e.g. image: ubuntu-1404-trusty-v20180122, family: ubuntu-1404-lts
168174
func suppressCanonicalFamilyDiff(imageName, familyName string) bool {
169175
parts := canonicalUbuntuLtsImage.FindStringSubmatch(imageName)
170-
if len(parts) == 3 {
171-
f := fmt.Sprintf("ubuntu-%s%s-lts", parts[1], parts[2])
176+
if len(parts) == 4 {
177+
var f string
178+
if parts[3] == "" {
179+
f = fmt.Sprintf("ubuntu-%s%s-lts", parts[1], parts[2])
180+
} else {
181+
f = fmt.Sprintf("ubuntu-%s%s-lts-%s", parts[1], parts[2], parts[3])
182+
}
172183
if f == familyName {
173184
return true
174185
}

google/resource_compute_disk_test.go

+83-3
Original file line numberDiff line numberDiff line change
@@ -171,12 +171,92 @@ func TestDiskImageDiffSuppress(t *testing.T) {
171171
New: "different-cloud/debian-8",
172172
ExpectDiffSuppress: false,
173173
},
174+
// arm images
175+
"matching image opensuse arm64 self_link": {
176+
Old: "https://www.googleapis.com/compute/v1/projects/opensuse-cloud/global/images/opensuse-leap-15-4-v20220713-arm64",
177+
New: "opensuse-leap-arm64",
178+
ExpectDiffSuppress: true,
179+
},
180+
"matching image sles arm64 self_link": {
181+
Old: "https://www.googleapis.com/compute/v1/projects/suse-cloud/global/images/sles-15-sp4-v20220713-arm64",
182+
New: "sles-15-arm64",
183+
ExpectDiffSuppress: true,
184+
},
185+
"matching image ubuntu arm64 self_link": {
186+
Old: "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1804-bionic-arm64-v20220712",
187+
New: "ubuntu-1804-lts-arm64",
188+
ExpectDiffSuppress: true,
189+
},
190+
"matching image ubuntu-minimal arm64 self_link": {
191+
Old: "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-minimal-2004-focal-arm64-v20220713",
192+
New: "ubuntu-minimal-2004-lts-arm64",
193+
ExpectDiffSuppress: true,
194+
},
195+
"matching image debian arm64 self_link": {
196+
Old: "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-arm64-v20220719",
197+
New: "debian-11-arm64",
198+
ExpectDiffSuppress: true,
199+
},
200+
"different architecture image opensuse arm64 self_link": {
201+
Old: "https://www.googleapis.com/compute/v1/projects/opensuse-cloud/global/images/opensuse-leap-15-4-v20220713-arm64",
202+
New: "opensuse-leap",
203+
ExpectDiffSuppress: false,
204+
},
205+
"different architecture image sles arm64 self_link": {
206+
Old: "https://www.googleapis.com/compute/v1/projects/suse-cloud/global/images/sles-15-sp4-v20220713-arm64",
207+
New: "sles-15",
208+
ExpectDiffSuppress: false,
209+
},
210+
"different architecture image ubuntu arm64 self_link": {
211+
Old: "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1804-bionic-arm64-v20220712",
212+
New: "ubuntu-1804-lts",
213+
ExpectDiffSuppress: false,
214+
},
215+
"different architecture image ubuntu-minimal arm64 self_link": {
216+
Old: "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-minimal-2004-focal-arm64-v20220713",
217+
New: "ubuntu-minimal-2004-lts",
218+
ExpectDiffSuppress: false,
219+
},
220+
"different architecture image debian arm64 self_link": {
221+
Old: "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-arm64-v20220719",
222+
New: "debian-11",
223+
ExpectDiffSuppress: false,
224+
},
225+
"different architecture image opensuse arm64 family": {
226+
Old: "https://www.googleapis.com/compute/v1/projects/opensuse-cloud/global/images/opensuse-leap-15-2-v20200702",
227+
New: "opensuse-leap-arm64",
228+
ExpectDiffSuppress: false,
229+
},
230+
"different architecture image sles arm64 family": {
231+
Old: "https://www.googleapis.com/compute/v1/projects/suse-cloud/global/images/sles-15-sp4-v20220722-x86-64",
232+
New: "sles-15-arm64",
233+
ExpectDiffSuppress: false,
234+
},
235+
"different architecture image ubuntu arm64 family": {
236+
Old: "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1804-bionic-v20220712",
237+
New: "ubuntu-1804-lts-arm64",
238+
ExpectDiffSuppress: false,
239+
},
240+
"different architecture image ubuntu-minimal arm64 family": {
241+
Old: "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-minimal-2004-focal-v20220713",
242+
New: "ubuntu-minimal-2004-lts-arm64",
243+
ExpectDiffSuppress: false,
244+
},
245+
"different architecture image debian arm64 family": {
246+
Old: "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20220719",
247+
New: "debian-11-arm64",
248+
ExpectDiffSuppress: false,
249+
},
174250
}
175251

176252
for tn, tc := range cases {
177-
if diskImageDiffSuppress("image", tc.Old, tc.New, nil) != tc.ExpectDiffSuppress {
178-
t.Errorf("bad: %s, %q => %q expect DiffSuppress to return %t", tn, tc.Old, tc.New, tc.ExpectDiffSuppress)
179-
}
253+
tc := tc
254+
t.Run(tn, func(t *testing.T) {
255+
t.Parallel()
256+
if diskImageDiffSuppress("image", tc.Old, tc.New, nil) != tc.ExpectDiffSuppress {
257+
t.Fatalf("%q => %q expect DiffSuppress to return %t", tc.Old, tc.New, tc.ExpectDiffSuppress)
258+
}
259+
})
180260
}
181261
}
182262

0 commit comments

Comments
 (0)