Skip to content

Commit

Permalink
[release-1.5] fix: format azure compute gallery image ID (#2794)
Browse files Browse the repository at this point in the history
* 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 <[email protected]>

Co-authored-by: shalin patel <[email protected]>
Co-authored-by: Matt Boersma <[email protected]>
  • Loading branch information
3 people authored Nov 9, 2022
1 parent b85361f commit 4af6bae
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 3 deletions.
9 changes: 6 additions & 3 deletions azure/converters/image.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand Down
81 changes: 81 additions & 0 deletions azure/converters/image_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
})
}
}

0 comments on commit 4af6bae

Please sign in to comment.