Skip to content

Commit e2d7de3

Browse files
authored
fix vm creation when using image id (#475)
* fix vm creation when using image id * add log entry
1 parent fd42765 commit e2d7de3

File tree

1 file changed

+45
-38
lines changed

1 file changed

+45
-38
lines changed

pkg/driver/driver_azure.go

Lines changed: 45 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ func (d *AzureDriver) getNICParameters(vmName string, subnet *network.Subnet) ne
8888
return NICParameters
8989
}
9090

91-
func (d *AzureDriver) getVMParameters(vmName string, image compute.VirtualMachineImage, networkInterfaceReferenceID string) compute.VirtualMachine {
91+
func (d *AzureDriver) getVMParameters(vmName string, image *compute.VirtualMachineImage, networkInterfaceReferenceID string) compute.VirtualMachine {
9292

9393
var (
9494
diskName = dependencyNameFromVMName(vmName, diskSuffix)
@@ -105,7 +105,7 @@ func (d *AzureDriver) getVMParameters(vmName string, image compute.VirtualMachin
105105
imageReference := getImageReference(d)
106106

107107
var plan *compute.Plan
108-
if image.Plan != nil {
108+
if image != nil && image.Plan != nil {
109109
// If image.Plan exists, create a plan object and attach it to the VM
110110
klog.V(2).Infof("Creating a plan object and attaching it to the VM - %q", vmName)
111111
plan = &compute.Plan{
@@ -435,6 +435,7 @@ func (d *AzureDriver) createVMNicDisk() (*compute.VirtualMachine, error) {
435435
subnetName = d.AzureMachineClass.Spec.SubnetInfo.SubnetName
436436
nicName = dependencyNameFromVMName(vmName, nicSuffix)
437437
diskName = dependencyNameFromVMName(vmName, diskSuffix)
438+
vmImageRef *compute.VirtualMachineImage
438439
)
439440

440441
clients, err := d.setup()
@@ -515,35 +516,18 @@ func (d *AzureDriver) createVMNicDisk() (*compute.VirtualMachine, error) {
515516
/*
516517
VM creation
517518
*/
519+
imageRefClass := d.AzureMachineClass.Spec.Properties.StorageProfile.ImageReference
520+
// if ID is not set the image is referenced using a URN
521+
if imageRefClass.ID == "" {
518522

519-
imageReference := getImageReference(d)
520-
vmImage, err := clients.images.Get(
521-
ctx,
522-
d.AzureMachineClass.Spec.Location,
523-
*imageReference.Publisher,
524-
*imageReference.Offer,
525-
*imageReference.Sku,
526-
*imageReference.Version)
527-
528-
if err != nil {
529-
//Since machine creation failed, delete any infra resources created
530-
deleteErr := clients.deleteVMNicDisks(ctx, resourceGroupName, vmName, nicName, diskName, dataDiskNames)
531-
if deleteErr != nil {
532-
klog.Errorf("Error occurred during resource clean up: %s", deleteErr)
533-
}
534-
535-
return nil, onARMAPIErrorFail(prometheusServiceVM, err, "VirtualMachineImagesClient.Get failed for %s", d.AzureMachineClass.Name)
536-
}
537-
538-
if vmImage.Plan != nil {
539-
// If VMImage.Plan exists, check if agreement is accepted and if not accept it for the subscription
540-
541-
agreement, err := clients.marketplace.Get(
523+
imageReference := getImageReference(d)
524+
vmImage, err := clients.images.Get(
542525
ctx,
543-
*vmImage.Plan.Publisher,
544-
*vmImage.Plan.Product,
545-
*vmImage.Plan.Name,
546-
)
526+
d.AzureMachineClass.Spec.Location,
527+
*imageReference.Publisher,
528+
*imageReference.Offer,
529+
*imageReference.Sku,
530+
*imageReference.Version)
547531

548532
if err != nil {
549533
//Since machine creation failed, delete any infra resources created
@@ -552,20 +536,17 @@ func (d *AzureDriver) createVMNicDisk() (*compute.VirtualMachine, error) {
552536
klog.Errorf("Error occurred during resource clean up: %s", deleteErr)
553537
}
554538

555-
return nil, onARMAPIErrorFail(prometheusServiceVM, err, "MarketplaceAgreementsClient.Get failed for %s", d.AzureMachineClass.Name)
539+
return nil, onARMAPIErrorFail(prometheusServiceVM, err, "VirtualMachineImagesClient.Get failed for %s", d.AzureMachineClass.Name)
556540
}
557541

558-
if agreement.Accepted == nil || *agreement.Accepted == false {
559-
// Need to accept the terms at least once for the subscription
560-
klog.V(2).Info("Accepting terms for subscription to make use of the plan")
542+
if vmImage.Plan != nil {
543+
// If VMImage.Plan exists, check if agreement is accepted and if not accept it for the subscription
561544

562-
agreement.Accepted = to.BoolPtr(true)
563-
_, err = clients.marketplace.Create(
545+
agreement, err := clients.marketplace.Get(
564546
ctx,
565547
*vmImage.Plan.Publisher,
566548
*vmImage.Plan.Product,
567549
*vmImage.Plan.Name,
568-
agreement,
569550
)
570551

571552
if err != nil {
@@ -575,13 +556,39 @@ func (d *AzureDriver) createVMNicDisk() (*compute.VirtualMachine, error) {
575556
klog.Errorf("Error occurred during resource clean up: %s", deleteErr)
576557
}
577558

578-
return nil, onARMAPIErrorFail(prometheusServiceVM, err, "MarketplaceAgreementsClient.Create failed for %s", d.AzureMachineClass.Name)
559+
return nil, onARMAPIErrorFail(prometheusServiceVM, err, "MarketplaceAgreementsClient.Get failed for %s", d.AzureMachineClass.Name)
560+
}
561+
562+
if agreement.Accepted == nil || *agreement.Accepted == false {
563+
// Need to accept the terms at least once for the subscription
564+
klog.V(2).Info("Accepting terms for subscription to make use of the plan")
565+
566+
agreement.Accepted = to.BoolPtr(true)
567+
_, err = clients.marketplace.Create(
568+
ctx,
569+
*vmImage.Plan.Publisher,
570+
*vmImage.Plan.Product,
571+
*vmImage.Plan.Name,
572+
agreement,
573+
)
574+
575+
if err != nil {
576+
//Since machine creation failed, delete any infra resources created
577+
deleteErr := clients.deleteVMNicDisks(ctx, resourceGroupName, vmName, nicName, diskName, dataDiskNames)
578+
if deleteErr != nil {
579+
klog.Errorf("Error occurred during resource clean up: %s", deleteErr)
580+
}
581+
582+
return nil, onARMAPIErrorFail(prometheusServiceVM, err, "MarketplaceAgreementsClient.Create failed for %s", d.AzureMachineClass.Name)
583+
}
579584
}
580585
}
586+
587+
vmImageRef = &vmImage
581588
}
582589

583590
// Creating VMParameters for new VM creation request
584-
VMParameters := d.getVMParameters(vmName, vmImage, *NIC.ID)
591+
VMParameters := d.getVMParameters(vmName, vmImageRef, *NIC.ID)
585592

586593
// VM creation request
587594
VMFuture, err := clients.vm.CreateOrUpdate(ctx, resourceGroupName, *VMParameters.Name, VMParameters)

0 commit comments

Comments
 (0)