From 4af6bae9fd823fa23559b483b8681bfeb71fa5c9 Mon Sep 17 00:00:00 2001 From: k8s-infra-cherrypick-robot <90416843+k8s-infra-cherrypick-robot@users.noreply.github.com> Date: Wed, 9 Nov 2022 10:16:13 -0800 Subject: [PATCH] [release-1.5] fix: format azure compute gallery image ID (#2794) * Add unit test to verify formatting of compute gallery image id * fix: format azure compute gallery image ID * add nil check for SharedGallery and ComputeGallery * Fix error message text to use actual field names Co-authored-by: Matt Boersma Co-authored-by: shalin patel Co-authored-by: Matt Boersma --- azure/converters/image.go | 9 ++-- azure/converters/image_test.go | 81 ++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 3 deletions(-) diff --git a/azure/converters/image.go b/azure/converters/image.go index 5e32334ce66..767ede42f55 100644 --- a/azure/converters/image.go +++ b/azure/converters/image.go @@ -50,8 +50,11 @@ func mpImageToSDK(image *infrav1.Image) (*compute.ImageReference, error) { } func computeImageToSDK(image *infrav1.Image) (*compute.ImageReference, error) { - idTemplate := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/galleries/%s/images/%s/versions/%s" + if image.ComputeGallery == nil && image.SharedGallery == nil { + return nil, errors.New("unable to convert compute image to SDK as SharedGallery or ComputeGallery fields are not set") + } + idTemplate := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/galleries/%s/images/%s/versions/%s" if image.SharedGallery != nil { return &compute.ImageReference{ ID: to.StringPtr(fmt.Sprintf(idTemplate, @@ -69,8 +72,8 @@ func computeImageToSDK(image *infrav1.Image) (*compute.ImageReference, error) { if image.ComputeGallery.ResourceGroup != nil && image.ComputeGallery.SubscriptionID != nil { return &compute.ImageReference{ ID: to.StringPtr(fmt.Sprintf(idTemplate, - image.ComputeGallery.SubscriptionID, - image.ComputeGallery.ResourceGroup, + to.String(image.ComputeGallery.SubscriptionID), + to.String(image.ComputeGallery.ResourceGroup), image.ComputeGallery.Gallery, image.ComputeGallery.Name, image.ComputeGallery.Version, diff --git a/azure/converters/image_test.go b/azure/converters/image_test.go index abe985bf6ca..c68e3faa80a 100644 --- a/azure/converters/image_test.go +++ b/azure/converters/image_test.go @@ -146,3 +146,84 @@ func Test_ImageToPlan(t *testing.T) { }) } } + +func Test_ComputeImageToSDK(t *testing.T) { + cases := []struct { + name string + image *infrav1.Image + expect func(*GomegaWithT, *compute.ImageReference, error) + }{ + { + name: "Should return parsed compute gallery image id", + image: &infrav1.Image{ + ComputeGallery: &infrav1.AzureComputeGalleryImage{ + ResourceGroup: to.StringPtr("my-resourcegroup"), + SubscriptionID: to.StringPtr("my-subscription-id"), + Gallery: "my-gallery", + Name: "my-image", + Version: "my-version", + }, + }, + expect: func(g *GomegaWithT, result *compute.ImageReference, err error) { + g.Expect(err).Should(BeNil()) + g.Expect(result).To(Equal(&compute.ImageReference{ + ID: to.StringPtr("/subscriptions/my-subscription-id/resourceGroups/my-resourcegroup/providers/Microsoft.Compute/galleries/my-gallery/images/my-image/versions/my-version"), + })) + }, + }, + { + name: "Should return parsed shared gallery image id", + image: &infrav1.Image{ + SharedGallery: &infrav1.AzureSharedGalleryImage{ + ResourceGroup: "my-resourcegroup", + SubscriptionID: "my-subscription-id", + Gallery: "my-gallery", + Name: "my-image", + Version: "my-version", + }, + }, + expect: func(g *GomegaWithT, result *compute.ImageReference, err error) { + g.Expect(err).Should(BeNil()) + g.Expect(result).To(Equal(&compute.ImageReference{ + ID: to.StringPtr("/subscriptions/my-subscription-id/resourceGroups/my-resourcegroup/providers/Microsoft.Compute/galleries/my-gallery/images/my-image/versions/my-version"), + })) + }, + }, + { + name: "Should return parsed community gallery image id", + image: &infrav1.Image{ + ComputeGallery: &infrav1.AzureComputeGalleryImage{ + Gallery: "my-gallery", + Name: "my-image", + Version: "my-version", + }, + }, + expect: func(g *GomegaWithT, result *compute.ImageReference, err error) { + g.Expect(err).Should(BeNil()) + g.Expect(result).To(Equal(&compute.ImageReference{ + CommunityGalleryImageID: to.StringPtr("/CommunityGalleries/my-gallery/Images/my-image/Versions/my-version"), + })) + }, + }, + { + name: "Should return error if SharedGallery and ComputeGallery are nil", + image: &infrav1.Image{ + ComputeGallery: nil, + SharedGallery: nil, + }, + expect: func(g *GomegaWithT, result *compute.ImageReference, err error) { + g.Expect(err).ShouldNot(BeNil()) + }, + }, + } + + for _, c := range cases { + c := c + t.Run(c.name, func(t *testing.T) { + t.Parallel() + g := NewGomegaWithT(t) + result, err := computeImageToSDK(c.image) + c.expect(g, result, err) + }) + } +}