@@ -463,6 +463,8 @@ public AzureVMDeploymentInfo createDeployment(
463463 putVariable (tmp , "ephemeralOSDisk" , Boolean .toString (ephemeralOSDisk ));
464464 putVariableIfNotBlank (tmp , "image" , template .getImageReference ().getUri ());
465465
466+ String imageId = getImageId (properties );
467+
466468 // Gallery Image is a special case for custom image, reuse the logic of custom image by replacing the imageId here
467469 if (referenceType == ImageReferenceType .GALLERY ) {
468470 GalleryImageVersion galleryImageVersion ;
@@ -488,11 +490,17 @@ public AzureVMDeploymentInfo createDeployment(
488490 if (galleryImageVersion == null ) {
489491 throw AzureCloudException .create ("Can not find the right version for the gallery image." );
490492 }
491- String galleryImageId = galleryImageVersion .id ();
492- LOGGER .log (Level .INFO , "Create VM with gallery image id {0}" , new Object []{galleryImageId });
493- putVariableIfNotBlank (tmp , "imageId" , galleryImageId );
493+ imageId = galleryImageVersion .id ();
494+ LOGGER .log (Level .INFO , "Create VM with gallery image id {0}" , new Object []{imageId });
495+ putVariableIfNotBlank (tmp , "imageId" , imageId );
496+ }
497+
498+ if (imageId != null ) {
499+ addTagToVm (tmp , "JenkinsImageId" , imageId );
494500 }
495501
502+
503+
496504 // If using the custom script extension (vs. SSH) to startup the powershell scripts,
497505 // add variables for that and upload the init script to the storage account
498506 if (useCustomScriptExtension ) {
@@ -613,6 +621,35 @@ public AzureVMDeploymentInfo createDeployment(
613621 }
614622 }
615623
624+ private String getImageId (Map <String , Object > properties ) {
625+ Object imageId = properties .get ("imageId" );
626+ Object imagePublisherObj = properties .get ("imagePublisher" );
627+ if (imageId == null && imagePublisherObj == null ) {
628+ return null ;
629+ }
630+
631+ if (imagePublisherObj != null ) {
632+ Object imageOfferObj = properties .get ("imageOffer" );
633+ Object imageSkuObj = properties .get ("imageSku" );
634+ Object imageVersionObj = properties .get ("imageVersion" );
635+
636+ imageId = imagePublisherObj + "::" + imageOfferObj + "::" + imageSkuObj + "::" + imageVersionObj ;
637+ }
638+ return (String ) imageId ;
639+ }
640+
641+ private void addTagToVm (JsonNode template , String key , String value ) {
642+ ArrayNode resources = (ArrayNode ) template .get ("resources" );
643+ for (JsonNode resource : resources ) {
644+ String type = resource .get ("type" ).asText ();
645+ if (type .contains ("virtualMachine" )) {
646+ ObjectNode tags = (ObjectNode ) resource .get ("tags" );
647+ tags .put (key , StringUtils .left (value , 255 ));
648+ return ;
649+ }
650+ }
651+ }
652+
616653 private void addSpotInstance (JsonNode template ) {
617654 ArrayNode resources = (ArrayNode ) template .get ("resources" );
618655 for (JsonNode resource : resources ) {
0 commit comments