Skip to content

Commit d66f4df

Browse files
committed
Look up CI versions via Community gallery too
1 parent e2792e3 commit d66f4df

File tree

5 files changed

+30
-57
lines changed

5 files changed

+30
-57
lines changed

azure/services/virtualmachineimages/images.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424

2525
infrav1 "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1"
2626
"sigs.k8s.io/cluster-api-provider-azure/azure"
27+
"sigs.k8s.io/cluster-api-provider-azure/util/tele"
2728
)
2829

2930
// Service provides operations on Azure VM Images.
@@ -45,7 +46,10 @@ func New(auth azure.Authorizer) (*Service, error) {
4546
}
4647

4748
// GetDefaultUbuntuImage returns the default image spec for Ubuntu.
48-
func (s *Service) GetDefaultUbuntuImage(ctx context.Context, location, k8sVersion string) (*infrav1.Image, error) {
49+
func (s *Service) GetDefaultUbuntuImage(ctx context.Context, _, k8sVersion string) (*infrav1.Image, error) {
50+
_, _, done := tele.StartSpanWithLogger(ctx, "azure.services.virtualmachineimages.GetDefaultUbuntuImage")
51+
defer done()
52+
4953
v, err := semver.ParseTolerant(k8sVersion)
5054
if err != nil {
5155
return nil, errors.Wrapf(err, "unable to parse Kubernetes version \"%s\"", k8sVersion)
@@ -63,12 +67,23 @@ func (s *Service) GetDefaultUbuntuImage(ctx context.Context, location, k8sVersio
6367
}
6468

6569
// GetDefaultWindowsImage returns the default image spec for Windows.
66-
func (s *Service) GetDefaultWindowsImage(ctx context.Context, location, k8sVersion, runtime, osAndVersion string) (*infrav1.Image, error) {
70+
func (s *Service) GetDefaultWindowsImage(ctx context.Context, _, k8sVersion, runtime, osAndVersion string) (*infrav1.Image, error) {
71+
_, _, done := tele.StartSpanWithLogger(ctx, "azure.services.virtualmachineimages.GetDefaultWindowsImage")
72+
defer done()
73+
6774
v, err := semver.ParseTolerant(k8sVersion)
6875
if err != nil {
6976
return nil, errors.Wrapf(err, "unable to parse Kubernetes version \"%s\"", k8sVersion)
7077
}
7178

79+
if runtime != "" && runtime != "containerd" {
80+
return nil, errors.Errorf("unsupported runtime %s", runtime)
81+
}
82+
83+
if osAndVersion != "" && osAndVersion != "windows-2022" {
84+
return nil, errors.Errorf("unsupported osAndVersion %s", osAndVersion)
85+
}
86+
7287
defaultImage := &infrav1.Image{
7388
ComputeGallery: &infrav1.AzureComputeGalleryImage{
7489
Gallery: azure.DefaultPublicGalleryName,

azure/services/virtualmachineimages/images_test.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -581,17 +581,8 @@ func TestGetDefaultImageSKUID(t *testing.T) {
581581
List(gomock.Any(), location, azure.DefaultPublicGalleryName, azure.DefaultLinuxGalleryImageName).
582582
Return(test.versions, nil)
583583
}
584-
// id, version, err := svc.getSKUAndVersion(context.TODO(), location, azure.DefaultImagePublisherID,
585-
// offer, test.k8sVersion, test.osAndVersion)
586584

587585
g := NewWithT(t)
588-
// if test.expectedError {
589-
// g.Expect(err).To(HaveOccurred())
590-
// } else {
591-
// g.Expect(err).NotTo(HaveOccurred())
592-
// }
593-
// g.Expect(id).To(Equal(test.expectedSKU))
594-
// g.Expect(version).To(Equal(test.expectedVersion))
595586

596587
// TODO: temp hack
597588
g.Expect(svc).NotTo(BeNil())

hack/create-dev-cluster.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export CONTROL_PLANE_MACHINE_COUNT=${CONTROL_PLANE_MACHINE_COUNT:-3}
5353
export AZURE_CONTROL_PLANE_MACHINE_TYPE="${CONTROL_PLANE_MACHINE_TYPE:-Standard_B2s}"
5454
export AZURE_NODE_MACHINE_TYPE="${NODE_MACHINE_TYPE:-Standard_B2s}"
5555
export WORKER_MACHINE_COUNT=${WORKER_MACHINE_COUNT:-2}
56-
export KUBERNETES_VERSION="${KUBERNETES_VERSION:-v1.29.5}"
56+
export KUBERNETES_VERSION="${KUBERNETES_VERSION:-v1.29.9}"
5757
export CLUSTER_TEMPLATE="${CLUSTER_TEMPLATE:-cluster-template.yaml}"
5858

5959
# identity secret settings.

test/e2e/common.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ const (
8888
capiImagePublisher = "cncf-upstream"
8989
capiOfferName = "capi"
9090
capiWindowsOfferName = "capi-windows"
91+
capiCommunityGallery = "capzed-489de9a5-a0a0-4e79-a806-ad5479ec43a5"
9192
aksClusterNameSuffix = "aks"
9293
flatcarCAPICommunityGallery = "flatcar4capi-742ef0cb-dcaa-4ecb-9cb0-bfd2e43dccc0"
9394
defaultNamespace = "default"

test/e2e/helpers.go

Lines changed: 11 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -699,13 +699,13 @@ func resolveKubetestRepoListPath(version string, path string) (string, error) {
699699
// resolveKubernetesVersions looks at Kubernetes versions set as variables in the e2e config and sets them to a valid k8s version
700700
// that has an existing capi offer image available. For example, if the version is "stable-1.22", the function will set it to the latest 1.22 version that has a published reference image.
701701
func resolveKubernetesVersions(config *clusterctl.E2EConfig) {
702-
ubuntuVersions := getVersionsInOffer(context.TODO(), os.Getenv(AzureLocation), capiImagePublisher, capiOfferName)
703-
windowsVersions := getVersionsInOffer(context.TODO(), os.Getenv(AzureLocation), capiImagePublisher, capiWindowsOfferName)
702+
linuxVersions := getVersionsInCommunityGallery(context.TODO(), os.Getenv(AzureLocation), capiCommunityGallery, "capi-ubun2-2404")
703+
windowsVersions := getVersionsInCommunityGallery(context.TODO(), os.Getenv(AzureLocation), capiCommunityGallery, "capi-win-2022-containerd")
704704
flatcarK8sVersions := getFlatcarK8sVersions(context.TODO(), os.Getenv(AzureLocation), flatcarCAPICommunityGallery)
705705

706706
// find the intersection of ubuntu and windows versions available, since we need an image for both.
707707
var versions semver.Versions
708-
for k, v := range ubuntuVersions {
708+
for k, v := range linuxVersions {
709709
if _, ok := windowsVersions[k]; ok {
710710
versions = append(versions, v)
711711
}
@@ -758,16 +758,6 @@ func resolveFlatcarVersion(config *clusterctl.E2EConfig, versions semver.Version
758758
resolveVariable(config, varName, version)
759759
}
760760

761-
// newImagesClient returns a new VM images client using environmental settings for auth.
762-
func newImagesClient() *armcompute.VirtualMachineImagesClient {
763-
cred, err := azidentity.NewDefaultAzureCredential(nil)
764-
Expect(err).NotTo(HaveOccurred())
765-
imagesClient, err := armcompute.NewVirtualMachineImagesClient(getSubscriptionID(Default), cred, nil)
766-
Expect(err).NotTo(HaveOccurred())
767-
768-
return imagesClient
769-
}
770-
771761
func newCommunityGalleryImagesClient() *armcompute.CommunityGalleryImagesClient {
772762
cred, err := azidentity.NewDefaultAzureCredential(nil)
773763
Expect(err).NotTo(HaveOccurred())
@@ -786,40 +776,16 @@ func newCommunityGalleryImageVersionsClient() *armcompute.CommunityGalleryImageV
786776
return communityGalleryImageVersionsClient
787777
}
788778

789-
// getVersionsInOffer returns a map of Kubernetes versions as strings to semver.Versions.
790-
func getVersionsInOffer(ctx context.Context, location, publisher, offer string) map[string]semver.Version {
791-
Logf("Finding image skus and versions for offer %s/%s in %s", publisher, offer, location)
792-
var versions map[string]semver.Version
793-
capiSku := regexp.MustCompile(`^[\w-]+-gen[12]$`)
794-
capiVersion := regexp.MustCompile(`^(\d)(\d{1,2})\.(\d{1,2})\.\d{8}$`)
795-
oldCapiSku := regexp.MustCompile(`^k8s-(0|[1-9][0-9]*)dot(0|[1-9][0-9]*)dot(0|[1-9][0-9]*)-[a-z]*.*$`)
796-
imagesClient := newImagesClient()
797-
resp, err := imagesClient.ListSKUs(ctx, location, publisher, offer, nil)
798-
Expect(err).NotTo(HaveOccurred())
799-
800-
skus := resp.VirtualMachineImageResourceArray
779+
func getVersionsInCommunityGallery(ctx context.Context, location, galleryName, image string) map[string]semver.Version {
780+
versions := make(map[string]semver.Version)
801781

802-
versions = make(map[string]semver.Version, len(skus))
803-
for _, sku := range skus {
804-
res, err := imagesClient.List(ctx, location, publisher, offer, *sku.Name, nil)
782+
client := newCommunityGalleryImageVersionsClient()
783+
pager := client.NewListPager(location, galleryName, image, nil)
784+
for pager.More() {
785+
resp, err := pager.NextPage(ctx)
805786
Expect(err).NotTo(HaveOccurred())
806-
// Don't use SKUs without existing images. See https://github.com/Azure/azure-cli/issues/20115.
807-
if len(res.VirtualMachineImageResourceArray) > 0 {
808-
// New SKUs don't contain the Kubernetes version and are named like "ubuntu-2004-gen1".
809-
if match := capiSku.FindStringSubmatch(*sku.Name); len(match) > 0 {
810-
for _, vmImage := range res.VirtualMachineImageResourceArray {
811-
// Versions are named like "121.13.20220601", for Kubernetes v1.21.13 published on June 1, 2022.
812-
match = capiVersion.FindStringSubmatch(*vmImage.Name)
813-
stringVer := fmt.Sprintf("%s.%s.%s", match[1], match[2], match[3])
814-
versions[stringVer] = semver.MustParse(stringVer)
815-
}
816-
continue
817-
}
818-
// Old SKUs before 1.21.12, 1.22.9, or 1.23.6 are named like "k8s-1dot21dot2-ubuntu-2004".
819-
if match := oldCapiSku.FindStringSubmatch(*sku.Name); len(match) > 0 {
820-
stringVer := fmt.Sprintf("%s.%s.%s", match[1], match[2], match[3])
821-
versions[stringVer] = semver.MustParse(stringVer)
822-
}
787+
for _, version := range resp.Value {
788+
versions[*version.Name] = semver.MustParse(*version.Name)
823789
}
824790
}
825791

0 commit comments

Comments
 (0)