Skip to content

Commit 1646bfb

Browse files
committed
azure: Skip image upload if env var is set
Adding option to skip the image upload from the installer if an environment variable is set since it takes a lot of time and the marketplace images can be used to skip this step.
1 parent 48241a0 commit 1646bfb

File tree

4 files changed

+134
-96
lines changed

4 files changed

+134
-96
lines changed

pkg/asset/installconfig/azure/validation.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"net"
77
"net/url"
8+
"os"
89
"sort"
910
"strconv"
1011
"strings"
@@ -628,12 +629,46 @@ func ValidateForProvisioning(client API, ic *types.InstallConfig) error {
628629
allErrs = append(allErrs, validateResourceGroup(client, field.NewPath("platform").Child("azure"), ic.Azure)...)
629630
allErrs = append(allErrs, ValidateDiskEncryptionSet(client, ic)...)
630631
allErrs = append(allErrs, ValidateSecurityProfileDiskEncryptionSet(client, ic)...)
632+
allErrs = append(allErrs, validateSkipImageUpload(field.NewPath("image"), ic)...)
631633
if ic.Azure.CloudName == aztypes.StackCloud {
632634
allErrs = append(allErrs, checkAzureStackClusterOSImageSet(ic.Azure.ClusterOSImage, field.NewPath("platform").Child("azure"))...)
633635
}
634636
return allErrs.ToAggregate()
635637
}
636638

639+
func validateSkipImageUpload(fieldPath *field.Path, ic *types.InstallConfig) field.ErrorList {
640+
allErrs := field.ErrorList{}
641+
defaultOSImage := aztypes.OSImage{}
642+
if ic.Azure.DefaultMachinePlatform != nil {
643+
defaultOSImage = aztypes.OSImage{
644+
Plan: ic.Azure.DefaultMachinePlatform.OSImage.Plan,
645+
Publisher: ic.Azure.DefaultMachinePlatform.OSImage.Publisher,
646+
SKU: ic.Azure.DefaultMachinePlatform.OSImage.SKU,
647+
Version: ic.Azure.DefaultMachinePlatform.OSImage.Version,
648+
Offer: ic.Azure.DefaultMachinePlatform.OSImage.Offer,
649+
}
650+
}
651+
controlPlaneOSImage := defaultOSImage
652+
if ic.ControlPlane.Platform.Azure != nil {
653+
controlPlaneOSImage = ic.ControlPlane.Platform.Azure.OSImage
654+
}
655+
allErrs = append(allErrs, validateOSImage(fieldPath.Child("controlplane"), controlPlaneOSImage)...)
656+
computeOSImage := defaultOSImage
657+
if len(ic.Compute) > 0 && ic.Compute[0].Platform.Azure != nil {
658+
computeOSImage = ic.Compute[0].Platform.Azure.OSImage
659+
}
660+
allErrs = append(allErrs, validateOSImage(fieldPath.Child("compute"), computeOSImage)...)
661+
return allErrs
662+
}
663+
func validateOSImage(fieldPath *field.Path, osImage aztypes.OSImage) field.ErrorList {
664+
if _, ok := os.LookupEnv("OPENSHIFT_INSTALL_SKIP_IMAGE_UPLOAD"); ok {
665+
if len(osImage.SKU) > 0 {
666+
return nil
667+
}
668+
return field.ErrorList{field.Invalid(fieldPath, "image", "cannot skip image upload without marketplace image specified")}
669+
}
670+
return nil
671+
}
637672
func validateResourceGroup(client API, fieldPath *field.Path, platform *aztypes.Platform) field.ErrorList {
638673
allErrs := field.ErrorList{}
639674
if len(platform.ResourceGroupName) == 0 {

pkg/asset/machines/azure/azuremachines.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ func GenerateMachines(platform *azure.Platform, pool *types.MachinePool, userDat
5858
Offer: osImage.Offer,
5959
SKU: osImage.SKU,
6060
},
61-
Version: osImage.Version,
61+
Version: osImage.Version,
62+
ThirdPartyImage: osImage.Plan != azure.ImageNoPurchasePlan,
6263
},
6364
}
6465
case useImageGallery:

pkg/clusterapi/system.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,6 @@ func (c *system) Run(ctx context.Context) error {
173173
&Azure,
174174
[]string{
175175
"-v=2",
176-
"--diagnostics-address=0",
177176
"--health-addr={{suggestHealthHostPort}}",
178177
"--webhook-port={{.WebhookPort}}",
179178
"--webhook-cert-dir={{.WebhookCertDir}}",

pkg/infrastructure/azure/azure.go

Lines changed: 97 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"math/rand"
77
"net/http"
8+
"os"
89
"strings"
910
"time"
1011

@@ -235,105 +236,107 @@ func (p *Provider) InfraReady(ctx context.Context, in clusterapi.InfraReadyInput
235236
logrus.Debugf("BlobContainer.ID=%s", *blobContainer.ID)
236237

237238
// Upload the image to the container
238-
_, err = CreatePageBlob(ctx, &CreatePageBlobInput{
239-
StorageURL: storageURL,
240-
BlobURL: blobURL,
241-
ImageURL: imageURL,
242-
ImageLength: imageLength,
243-
StorageAccountName: storageAccountName,
244-
StorageAccountKeys: storageAccountKeys,
245-
CloudConfiguration: cloudConfiguration,
246-
})
247-
if err != nil {
248-
return err
249-
}
250-
251-
// Create image gallery
252-
createImageGalleryOutput, err := CreateImageGallery(ctx, &CreateImageGalleryInput{
253-
SubscriptionID: subscriptionID,
254-
ResourceGroupName: resourceGroupName,
255-
GalleryName: galleryName,
256-
Region: platform.Region,
257-
Tags: tags,
258-
TokenCredential: tokenCredential,
259-
CloudConfiguration: cloudConfiguration,
260-
})
261-
if err != nil {
262-
return err
263-
}
239+
if _, ok := os.LookupEnv("OPENSHIFT_INSTALL_SKIP_IMAGE_UPLOAD"); !ok {
240+
_, err = CreatePageBlob(ctx, &CreatePageBlobInput{
241+
StorageURL: storageURL,
242+
BlobURL: blobURL,
243+
ImageURL: imageURL,
244+
ImageLength: imageLength,
245+
StorageAccountName: storageAccountName,
246+
StorageAccountKeys: storageAccountKeys,
247+
CloudConfiguration: cloudConfiguration,
248+
})
249+
if err != nil {
250+
return err
251+
}
264252

265-
computeClientFactory := createImageGalleryOutput.ComputeClientFactory
253+
// Create image gallery
254+
createImageGalleryOutput, err := CreateImageGallery(ctx, &CreateImageGalleryInput{
255+
SubscriptionID: subscriptionID,
256+
ResourceGroupName: resourceGroupName,
257+
GalleryName: galleryName,
258+
Region: platform.Region,
259+
Tags: tags,
260+
TokenCredential: tokenCredential,
261+
CloudConfiguration: cloudConfiguration,
262+
})
263+
if err != nil {
264+
return err
265+
}
266266

267-
// Create gallery images
268-
_, err = CreateGalleryImage(ctx, &CreateGalleryImageInput{
269-
ResourceGroupName: resourceGroupName,
270-
GalleryName: galleryName,
271-
GalleryImageName: galleryImageName,
272-
Region: platform.Region,
273-
Tags: tags,
274-
TokenCredential: tokenCredential,
275-
CloudConfiguration: cloudConfiguration,
276-
OSType: armcompute.OperatingSystemTypesLinux,
277-
OSState: armcompute.OperatingSystemStateTypesGeneralized,
278-
HyperVGeneration: armcompute.HyperVGenerationV1,
279-
Publisher: "RedHat",
280-
Offer: "rhcos",
281-
SKU: "basic",
282-
ComputeClientFactory: computeClientFactory,
283-
})
284-
if err != nil {
285-
return err
286-
}
267+
computeClientFactory := createImageGalleryOutput.ComputeClientFactory
268+
269+
// Create gallery images
270+
_, err = CreateGalleryImage(ctx, &CreateGalleryImageInput{
271+
ResourceGroupName: resourceGroupName,
272+
GalleryName: galleryName,
273+
GalleryImageName: galleryImageName,
274+
Region: platform.Region,
275+
Tags: tags,
276+
TokenCredential: tokenCredential,
277+
CloudConfiguration: cloudConfiguration,
278+
OSType: armcompute.OperatingSystemTypesLinux,
279+
OSState: armcompute.OperatingSystemStateTypesGeneralized,
280+
HyperVGeneration: armcompute.HyperVGenerationV1,
281+
Publisher: "RedHat",
282+
Offer: "rhcos",
283+
SKU: "basic",
284+
ComputeClientFactory: computeClientFactory,
285+
})
286+
if err != nil {
287+
return err
288+
}
287289

288-
_, err = CreateGalleryImage(ctx, &CreateGalleryImageInput{
289-
ResourceGroupName: resourceGroupName,
290-
GalleryName: galleryName,
291-
GalleryImageName: galleryGen2ImageName,
292-
Region: platform.Region,
293-
Tags: tags,
294-
TokenCredential: tokenCredential,
295-
CloudConfiguration: cloudConfiguration,
296-
OSType: armcompute.OperatingSystemTypesLinux,
297-
OSState: armcompute.OperatingSystemStateTypesGeneralized,
298-
HyperVGeneration: armcompute.HyperVGenerationV1,
299-
Publisher: "RedHat-gen2",
300-
Offer: "rhcos-gen2",
301-
SKU: "gen2",
302-
ComputeClientFactory: computeClientFactory,
303-
})
304-
if err != nil {
305-
return err
306-
}
290+
_, err = CreateGalleryImage(ctx, &CreateGalleryImageInput{
291+
ResourceGroupName: resourceGroupName,
292+
GalleryName: galleryName,
293+
GalleryImageName: galleryGen2ImageName,
294+
Region: platform.Region,
295+
Tags: tags,
296+
TokenCredential: tokenCredential,
297+
CloudConfiguration: cloudConfiguration,
298+
OSType: armcompute.OperatingSystemTypesLinux,
299+
OSState: armcompute.OperatingSystemStateTypesGeneralized,
300+
HyperVGeneration: armcompute.HyperVGenerationV1,
301+
Publisher: "RedHat-gen2",
302+
Offer: "rhcos-gen2",
303+
SKU: "gen2",
304+
ComputeClientFactory: computeClientFactory,
305+
})
306+
if err != nil {
307+
return err
308+
}
307309

308-
// Create gallery image versions
309-
_, err = CreateGalleryImageVersion(ctx, &CreateGalleryImageVersionInput{
310-
ResourceGroupName: resourceGroupName,
311-
StorageAccountID: *storageAccount.ID,
312-
GalleryName: galleryName,
313-
GalleryImageName: galleryImageName,
314-
GalleryImageVersionName: galleryImageVersionName,
315-
Region: platform.Region,
316-
BlobURL: blobURL,
317-
RegionalReplicaCount: int32(1),
318-
ComputeClientFactory: computeClientFactory,
319-
})
320-
if err != nil {
321-
return err
322-
}
310+
// Create gallery image versions
311+
_, err = CreateGalleryImageVersion(ctx, &CreateGalleryImageVersionInput{
312+
ResourceGroupName: resourceGroupName,
313+
StorageAccountID: *storageAccount.ID,
314+
GalleryName: galleryName,
315+
GalleryImageName: galleryImageName,
316+
GalleryImageVersionName: galleryImageVersionName,
317+
Region: platform.Region,
318+
BlobURL: blobURL,
319+
RegionalReplicaCount: int32(1),
320+
ComputeClientFactory: computeClientFactory,
321+
})
322+
if err != nil {
323+
return err
324+
}
323325

324-
_, err = CreateGalleryImageVersion(ctx, &CreateGalleryImageVersionInput{
325-
ResourceGroupName: resourceGroupName,
326-
StorageAccountID: *storageAccount.ID,
327-
GalleryName: galleryName,
328-
GalleryImageName: galleryGen2ImageName,
329-
GalleryImageVersionName: galleryGen2ImageVersionName,
330-
Region: platform.Region,
331-
BlobURL: blobURL,
332-
RegionalReplicaCount: int32(1),
333-
ComputeClientFactory: computeClientFactory,
334-
})
335-
if err != nil {
336-
return err
326+
_, err = CreateGalleryImageVersion(ctx, &CreateGalleryImageVersionInput{
327+
ResourceGroupName: resourceGroupName,
328+
StorageAccountID: *storageAccount.ID,
329+
GalleryName: galleryName,
330+
GalleryImageName: galleryGen2ImageName,
331+
GalleryImageVersionName: galleryGen2ImageVersionName,
332+
Region: platform.Region,
333+
BlobURL: blobURL,
334+
RegionalReplicaCount: int32(1),
335+
ComputeClientFactory: computeClientFactory,
336+
})
337+
if err != nil {
338+
return err
339+
}
337340
}
338341

339342
networkClientFactory, err := armnetwork.NewClientFactory(subscriptionID, session.TokenCreds,

0 commit comments

Comments
 (0)