PageRenderTime 134ms CodeModel.GetById 34ms RepoModel.GetById 0ms app.codeStats 0ms

/sdk/compute/mgmt/src/test/java/com/azure/management/compute/VirtualMachineCustomImageOperationsTest.java

http://github.com/WindowsAzure/azure-sdk-for-java
Java | 369 lines | 323 code | 29 blank | 17 comment | 9 complexity | 39012a23c47cda0bddd6d51a27ecb10d MD5 | raw file
Possible License(s): MIT
  1. // Copyright (c) Microsoft Corporation. All rights reserved.
  2. // Licensed under the MIT License.
  3. package com.azure.management.compute;
  4. import com.azure.core.http.HttpPipeline;
  5. import com.azure.core.http.rest.PagedIterable;
  6. import com.azure.management.compute.implementation.ComputeManager;
  7. import com.azure.management.resources.core.TestUtilities;
  8. import com.azure.management.resources.fluentcore.arm.Region;
  9. import com.azure.management.resources.fluentcore.profile.AzureProfile;
  10. import com.azure.management.storage.StorageAccount;
  11. import java.io.IOException;
  12. import java.util.Map;
  13. import org.junit.jupiter.api.Assertions;
  14. import org.junit.jupiter.api.Test;
  15. public class VirtualMachineCustomImageOperationsTest extends ComputeManagementTest {
  16. private String rgName = "";
  17. private Region region = Region.US_WEST_CENTRAL;
  18. @Override
  19. protected void initializeClients(HttpPipeline httpPipeline, AzureProfile profile) {
  20. rgName = generateRandomResourceName("javacsmrg", 15);
  21. super.initializeClients(httpPipeline, profile);
  22. }
  23. @Override
  24. protected void cleanUpResources() {
  25. resourceManager.resourceGroups().deleteByName(rgName);
  26. }
  27. @Test
  28. public void canCreateImageFromNativeVhd() throws IOException {
  29. final String vhdBasedImageName = generateRandomResourceName("img", 20);
  30. VirtualMachine linuxVM =
  31. prepareGeneralizedVmWith2EmptyDataDisks(
  32. rgName, generateRandomResourceName("muldvm", 15), region, computeManager);
  33. //
  34. VirtualMachineCustomImage.DefinitionStages.WithCreateAndDataDiskImageOSDiskSettings creatableDisk =
  35. computeManager
  36. .virtualMachineCustomImages()
  37. .define(vhdBasedImageName)
  38. .withRegion(region)
  39. .withNewResourceGroup(rgName)
  40. .withLinuxFromVhd(linuxVM.osUnmanagedDiskVhdUri(), OperatingSystemStateTypes.GENERALIZED)
  41. .withOSDiskCaching(linuxVM.osDiskCachingType());
  42. for (VirtualMachineUnmanagedDataDisk disk : linuxVM.unmanagedDataDisks().values()) {
  43. creatableDisk
  44. .defineDataDiskImage()
  45. .withLun(disk.lun())
  46. .fromVhd(disk.vhdUri())
  47. .withDiskCaching(disk.cachingType())
  48. .withDiskSizeInGB(disk.size() + 10) // Resize each data disk image by +10GB
  49. .attach();
  50. }
  51. VirtualMachineCustomImage customImage = creatableDisk.create();
  52. Assertions.assertNotNull(customImage.id());
  53. Assertions.assertEquals(customImage.name(), vhdBasedImageName);
  54. Assertions.assertFalse(customImage.isCreatedFromVirtualMachine());
  55. Assertions.assertNull(customImage.sourceVirtualMachineId());
  56. Assertions.assertNotNull(customImage.osDiskImage());
  57. Assertions.assertNotNull(customImage.osDiskImage().blobUri());
  58. Assertions.assertEquals(customImage.osDiskImage().caching(), CachingTypes.READ_WRITE);
  59. Assertions.assertEquals(customImage.osDiskImage().osState(), OperatingSystemStateTypes.GENERALIZED);
  60. Assertions.assertEquals(customImage.osDiskImage().osType(), OperatingSystemTypes.LINUX);
  61. Assertions.assertNotNull(customImage.dataDiskImages());
  62. Assertions.assertEquals(customImage.dataDiskImages().size(), linuxVM.unmanagedDataDisks().size());
  63. Assertions.assertTrue(customImage.hyperVGeneration().equals(HyperVGenerationTypes.V1));
  64. for (ImageDataDisk diskImage : customImage.dataDiskImages().values()) {
  65. VirtualMachineUnmanagedDataDisk matchedDisk = null;
  66. for (VirtualMachineUnmanagedDataDisk vmDisk : linuxVM.unmanagedDataDisks().values()) {
  67. if (vmDisk.lun() == diskImage.lun()) {
  68. matchedDisk = vmDisk;
  69. break;
  70. }
  71. }
  72. Assertions.assertNotNull(matchedDisk);
  73. Assertions.assertEquals(matchedDisk.cachingType(), diskImage.caching());
  74. Assertions.assertEquals(matchedDisk.vhdUri(), diskImage.blobUri());
  75. Assertions.assertEquals((long) matchedDisk.size() + 10, (long) diskImage.diskSizeGB());
  76. }
  77. VirtualMachineCustomImage image =
  78. computeManager.virtualMachineCustomImages().getByResourceGroup(rgName, vhdBasedImageName);
  79. Assertions.assertNotNull(image);
  80. PagedIterable<VirtualMachineCustomImage> images =
  81. computeManager.virtualMachineCustomImages().listByResourceGroup(rgName);
  82. Assertions.assertTrue(TestUtilities.getSize(images) > 0);
  83. // Create virtual machine from custom image
  84. //
  85. VirtualMachine virtualMachine =
  86. computeManager
  87. .virtualMachines()
  88. .define(generateRandomResourceName("cusvm", 15))
  89. .withRegion(region)
  90. .withNewResourceGroup(rgName)
  91. .withNewPrimaryNetwork("10.0.0.0/28")
  92. .withPrimaryPrivateIPAddressDynamic()
  93. .withoutPrimaryPublicIPAddress()
  94. .withLinuxCustomImage(image.id())
  95. .withRootUsername("javauser")
  96. .withRootPassword("12NewPA$$w0rd!")
  97. .withSize(VirtualMachineSizeTypes.STANDARD_D5_V2)
  98. .withOSDiskCaching(CachingTypes.READ_WRITE)
  99. .create();
  100. Map<Integer, VirtualMachineDataDisk> dataDisks = virtualMachine.dataDisks();
  101. Assertions.assertNotNull(dataDisks);
  102. Assertions.assertEquals(dataDisks.size(), image.dataDiskImages().size());
  103. // Create a hyperv Gen2 image
  104. VirtualMachineCustomImage.DefinitionStages.WithCreateAndDataDiskImageOSDiskSettings creatableDiskGen2 =
  105. computeManager
  106. .virtualMachineCustomImages()
  107. .define(vhdBasedImageName + "Gen2")
  108. .withRegion(region)
  109. .withNewResourceGroup(rgName)
  110. .withHyperVGeneration(HyperVGenerationTypes.V2)
  111. .withLinuxFromVhd(linuxVM.osUnmanagedDiskVhdUri(), OperatingSystemStateTypes.GENERALIZED)
  112. .withOSDiskCaching(linuxVM.osDiskCachingType());
  113. for (VirtualMachineUnmanagedDataDisk disk : linuxVM.unmanagedDataDisks().values()) {
  114. creatableDisk
  115. .defineDataDiskImage()
  116. .withLun(disk.lun())
  117. .fromVhd(disk.vhdUri())
  118. .withDiskCaching(disk.cachingType())
  119. .withDiskSizeInGB(disk.size() + 10) // Resize each data disk image by +10GB
  120. .attach();
  121. }
  122. VirtualMachineCustomImage customImageGen2 = creatableDiskGen2.create();
  123. Assertions.assertNotNull(customImageGen2.id());
  124. Assertions.assertEquals(customImageGen2.name(), vhdBasedImageName + "Gen2");
  125. Assertions.assertFalse(customImageGen2.isCreatedFromVirtualMachine());
  126. Assertions.assertNull(customImageGen2.sourceVirtualMachineId());
  127. Assertions.assertNotNull(customImageGen2.osDiskImage());
  128. Assertions.assertNotNull(customImageGen2.osDiskImage().blobUri());
  129. Assertions.assertEquals(customImageGen2.osDiskImage().caching(), CachingTypes.READ_WRITE);
  130. Assertions.assertEquals(customImageGen2.osDiskImage().osState(), OperatingSystemStateTypes.GENERALIZED);
  131. Assertions.assertEquals(customImageGen2.osDiskImage().osType(), OperatingSystemTypes.LINUX);
  132. Assertions.assertNotNull(customImageGen2.dataDiskImages());
  133. Assertions.assertEquals(customImageGen2.dataDiskImages().size(), 0);
  134. Assertions.assertTrue(customImageGen2.hyperVGeneration().equals(HyperVGenerationTypes.V2));
  135. }
  136. @Test
  137. public void canCreateImageByCapturingVM() {
  138. final String vmName = generateRandomResourceName("vm67-", 20);
  139. final String imageName = generateRandomResourceName("img", 15);
  140. VirtualMachine vm = prepareGeneralizedVmWith2EmptyDataDisks(rgName, vmName, region, computeManager);
  141. //
  142. VirtualMachineCustomImage customImage =
  143. computeManager
  144. .virtualMachineCustomImages()
  145. .define(imageName)
  146. .withRegion(region)
  147. .withNewResourceGroup(rgName)
  148. .withHyperVGeneration(HyperVGenerationTypes.V1)
  149. .fromVirtualMachine(vm.id())
  150. .create();
  151. Assertions.assertTrue(customImage.name().equalsIgnoreCase(imageName));
  152. Assertions.assertNotNull(customImage.osDiskImage());
  153. Assertions.assertEquals(customImage.osDiskImage().osState(), OperatingSystemStateTypes.GENERALIZED);
  154. Assertions.assertEquals(customImage.osDiskImage().osType(), OperatingSystemTypes.LINUX);
  155. Assertions.assertNotNull(customImage.dataDiskImages());
  156. Assertions.assertEquals(customImage.dataDiskImages().size(), 2);
  157. Assertions.assertNotNull(customImage.sourceVirtualMachineId());
  158. Assertions.assertTrue(customImage.sourceVirtualMachineId().equalsIgnoreCase(vm.id()));
  159. Assertions.assertTrue(customImage.hyperVGeneration().equals(HyperVGenerationTypes.V1));
  160. for (VirtualMachineUnmanagedDataDisk vmDisk : vm.unmanagedDataDisks().values()) {
  161. Assertions.assertTrue(customImage.dataDiskImages().containsKey(vmDisk.lun()));
  162. ImageDataDisk diskImage = customImage.dataDiskImages().get(vmDisk.lun());
  163. Assertions.assertEquals(diskImage.caching(), vmDisk.cachingType());
  164. Assertions.assertEquals((long) diskImage.diskSizeGB(), vmDisk.size());
  165. Assertions.assertNotNull(diskImage.blobUri());
  166. diskImage.blobUri().equalsIgnoreCase(vmDisk.vhdUri());
  167. }
  168. customImage = computeManager.virtualMachineCustomImages().getByResourceGroup(rgName, imageName);
  169. Assertions.assertNotNull(customImage);
  170. Assertions.assertNotNull(customImage.inner());
  171. computeManager.virtualMachineCustomImages().deleteById(customImage.id());
  172. }
  173. @Test
  174. public void canCreateImageFromManagedDisk() {
  175. final String vmName = generateRandomResourceName("vm7-", 20);
  176. final String storageAccountName = generateRandomResourceName("stg", 17);
  177. final String uname = "juser";
  178. final String password = "123tEst!@|ac";
  179. VirtualMachine nativeVm =
  180. computeManager
  181. .virtualMachines()
  182. .define(vmName)
  183. .withRegion(region)
  184. .withNewResourceGroup(rgName)
  185. .withNewPrimaryNetwork("10.0.0.0/28")
  186. .withPrimaryPrivateIPAddressDynamic()
  187. .withoutPrimaryPublicIPAddress()
  188. .withLatestLinuxImage("Canonical", "UbuntuServer", "14.04.2-LTS")
  189. .withRootUsername(uname)
  190. .withRootPassword(password)
  191. .withUnmanagedDisks() /* UN-MANAGED OS and DATA DISKS */
  192. .defineUnmanagedDataDisk("disk1")
  193. .withNewVhd(100)
  194. .withCaching(CachingTypes.READ_ONLY)
  195. .attach()
  196. .withNewUnmanagedDataDisk(100)
  197. .withSize(VirtualMachineSizeTypes.STANDARD_D5_V2)
  198. .withNewStorageAccount(storageAccountName)
  199. .withOSDiskCaching(CachingTypes.READ_WRITE)
  200. .create();
  201. Assertions.assertFalse(nativeVm.isManagedDiskEnabled());
  202. String osVhdUri = nativeVm.osUnmanagedDiskVhdUri();
  203. Assertions.assertNotNull(osVhdUri);
  204. Map<Integer, VirtualMachineUnmanagedDataDisk> dataDisks = nativeVm.unmanagedDataDisks();
  205. Assertions.assertEquals(dataDisks.size(), 2);
  206. computeManager.virtualMachines().deleteById(nativeVm.id());
  207. final String osDiskName = generateRandomResourceName("dsk", 15);
  208. // Create managed disk with Os from vm's Os disk
  209. //
  210. Disk managedOsDisk =
  211. computeManager
  212. .disks()
  213. .define(osDiskName)
  214. .withRegion(region)
  215. .withNewResourceGroup(rgName)
  216. .withLinuxFromVhd(osVhdUri)
  217. .withStorageAccountName(storageAccountName)
  218. .create();
  219. // Create managed disk with Data from vm's lun0 data disk
  220. //
  221. StorageAccount storageAccount =
  222. storageManager.storageAccounts().getByResourceGroup(rgName, storageAccountName);
  223. final String dataDiskName1 = generateRandomResourceName("dsk", 15);
  224. VirtualMachineUnmanagedDataDisk vmNativeDataDisk1 = dataDisks.get(0);
  225. Disk managedDataDisk1 =
  226. computeManager
  227. .disks()
  228. .define(dataDiskName1)
  229. .withRegion(region)
  230. .withNewResourceGroup(rgName)
  231. .withData()
  232. .fromVhd(vmNativeDataDisk1.vhdUri())
  233. .withStorageAccount(storageAccount)
  234. .create();
  235. // Create managed disk with Data from vm's lun1 data disk
  236. //
  237. final String dataDiskName2 = generateRandomResourceName("dsk", 15);
  238. VirtualMachineUnmanagedDataDisk vmNativeDataDisk2 = dataDisks.get(1);
  239. Disk managedDataDisk2 =
  240. computeManager
  241. .disks()
  242. .define(dataDiskName2)
  243. .withRegion(region)
  244. .withNewResourceGroup(rgName)
  245. .withData()
  246. .fromVhd(vmNativeDataDisk2.vhdUri())
  247. .withStorageAccountId(storageAccount.id())
  248. .create();
  249. // Create an image from the above managed disks
  250. // Note that this is not a direct user scenario, but including this as per CRP team request
  251. //
  252. final String imageName = generateRandomResourceName("img", 15);
  253. VirtualMachineCustomImage customImage =
  254. computeManager
  255. .virtualMachineCustomImages()
  256. .define(imageName)
  257. .withRegion(region)
  258. .withNewResourceGroup(rgName)
  259. .withLinuxFromDisk(managedOsDisk, OperatingSystemStateTypes.GENERALIZED)
  260. .defineDataDiskImage()
  261. .withLun(vmNativeDataDisk1.lun())
  262. .fromManagedDisk(managedDataDisk1)
  263. .withDiskCaching(vmNativeDataDisk1.cachingType())
  264. .withDiskSizeInGB(vmNativeDataDisk1.size() + 10)
  265. .attach()
  266. .defineDataDiskImage()
  267. .withLun(vmNativeDataDisk2.lun())
  268. .fromManagedDisk(managedDataDisk2)
  269. .withDiskSizeInGB(vmNativeDataDisk2.size() + 10)
  270. .attach()
  271. .create();
  272. Assertions.assertNotNull(customImage);
  273. Assertions.assertTrue(customImage.name().equalsIgnoreCase(imageName));
  274. Assertions.assertNotNull(customImage.osDiskImage());
  275. Assertions.assertEquals(customImage.osDiskImage().osState(), OperatingSystemStateTypes.GENERALIZED);
  276. Assertions.assertEquals(customImage.osDiskImage().osType(), OperatingSystemTypes.LINUX);
  277. Assertions.assertNotNull(customImage.dataDiskImages());
  278. Assertions.assertEquals(customImage.dataDiskImages().size(), 2);
  279. Assertions.assertTrue(customImage.hyperVGeneration().equals(HyperVGenerationTypes.V1));
  280. Assertions.assertNull(customImage.sourceVirtualMachineId());
  281. Assertions.assertTrue(customImage.dataDiskImages().containsKey(vmNativeDataDisk1.lun()));
  282. Assertions
  283. .assertEquals(
  284. customImage.dataDiskImages().get(vmNativeDataDisk1.lun()).caching(), vmNativeDataDisk1.cachingType());
  285. Assertions.assertTrue(customImage.dataDiskImages().containsKey(vmNativeDataDisk2.lun()));
  286. Assertions.assertEquals(customImage.dataDiskImages().get(vmNativeDataDisk2.lun()).caching(), CachingTypes.NONE);
  287. for (VirtualMachineUnmanagedDataDisk vmDisk : dataDisks.values()) {
  288. Assertions.assertTrue(customImage.dataDiskImages().containsKey(vmDisk.lun()));
  289. ImageDataDisk diskImage = customImage.dataDiskImages().get(vmDisk.lun());
  290. Assertions.assertEquals((long) diskImage.diskSizeGB(), vmDisk.size() + 10);
  291. Assertions.assertNull(diskImage.blobUri());
  292. Assertions.assertNotNull(diskImage.managedDisk());
  293. Assertions
  294. .assertTrue(
  295. diskImage.managedDisk().id().equalsIgnoreCase(managedDataDisk1.id())
  296. || diskImage.managedDisk().id().equalsIgnoreCase(managedDataDisk2.id()));
  297. }
  298. computeManager.disks().deleteById(managedOsDisk.id());
  299. computeManager.disks().deleteById(managedDataDisk1.id());
  300. computeManager.disks().deleteById(managedDataDisk2.id());
  301. computeManager.virtualMachineCustomImages().deleteById(customImage.id());
  302. }
  303. private VirtualMachine prepareGeneralizedVmWith2EmptyDataDisks(
  304. String rgName, String vmName, Region region, ComputeManager computeManager) {
  305. final String uname = "javauser";
  306. final String password = "12NewPA$$w0rd!";
  307. final KnownLinuxVirtualMachineImage linuxImage = KnownLinuxVirtualMachineImage.UBUNTU_SERVER_16_04_LTS;
  308. final String publicIpDnsLabel = generateRandomResourceName("pip", 20);
  309. VirtualMachine virtualMachine =
  310. computeManager
  311. .virtualMachines()
  312. .define(vmName)
  313. .withRegion(region)
  314. .withNewResourceGroup(rgName)
  315. .withNewPrimaryNetwork("10.0.0.0/28")
  316. .withPrimaryPrivateIPAddressDynamic()
  317. .withNewPrimaryPublicIPAddress(publicIpDnsLabel)
  318. .withPopularLinuxImage(linuxImage)
  319. .withRootUsername(uname)
  320. .withRootPassword(password)
  321. .withUnmanagedDisks()
  322. .defineUnmanagedDataDisk("disk-1")
  323. .withNewVhd(30)
  324. .withCaching(CachingTypes.READ_WRITE)
  325. .attach()
  326. .defineUnmanagedDataDisk("disk-2")
  327. .withNewVhd(60)
  328. .withCaching(CachingTypes.READ_ONLY)
  329. .attach()
  330. .withSize(VirtualMachineSizeTypes.STANDARD_D5_V2)
  331. .withNewStorageAccount(generateRandomResourceName("stg", 17))
  332. .withOSDiskCaching(CachingTypes.READ_WRITE)
  333. .create();
  334. //
  335. deprovisionAgentInLinuxVM(virtualMachine.getPrimaryPublicIPAddress().fqdn(), 22, uname, password);
  336. virtualMachine.deallocate();
  337. virtualMachine.generalize();
  338. return virtualMachine;
  339. }
  340. }