@@ -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