PageRenderTime 38ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

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

http://github.com/WindowsAzure/azure-sdk-for-java
Java | 590 lines | 432 code | 49 blank | 109 comment | 13 complexity | 6993d0fd3187c7d7b1796cbdc457b0dc 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.management.resources.ResourceGroup;
  6. import com.azure.management.resources.fluentcore.arm.Region;
  7. import com.azure.management.resources.fluentcore.model.Creatable;
  8. import java.util.Map;
  9. import com.azure.management.resources.fluentcore.profile.AzureProfile;
  10. import org.junit.jupiter.api.Assertions;
  11. import org.junit.jupiter.api.Test;
  12. public class VirtualMachineManagedDiskOperationsTests extends ComputeManagementTest {
  13. private String rgName = "";
  14. private Region region = Region.US_EAST;
  15. private KnownLinuxVirtualMachineImage linuxImage = KnownLinuxVirtualMachineImage.UBUNTU_SERVER_16_04_LTS;
  16. @Override
  17. protected void initializeClients(HttpPipeline httpPipeline, AzureProfile profile) {
  18. rgName = generateRandomResourceName("javacsmrg", 15);
  19. super.initializeClients(httpPipeline, profile);
  20. }
  21. @Override
  22. protected void cleanUpResources() {
  23. resourceManager.resourceGroups().deleteByName(rgName);
  24. }
  25. @Test
  26. public void canCreateVirtualMachineFromPIRImageWithManagedOsDisk() {
  27. final String vmName1 = "myvm1";
  28. final String publicIpDnsLabel = generateRandomResourceName("pip", 20);
  29. final String uname = "juser";
  30. final String password = "123tEst!@|ac";
  31. VirtualMachine virtualMachine =
  32. computeManager
  33. .virtualMachines()
  34. .define(vmName1)
  35. .withRegion(region)
  36. .withNewResourceGroup(rgName)
  37. .withNewPrimaryNetwork("10.0.0.0/28")
  38. .withPrimaryPrivateIPAddressDynamic()
  39. .withNewPrimaryPublicIPAddress(publicIpDnsLabel)
  40. .withPopularLinuxImage(linuxImage)
  41. .withRootUsername(uname)
  42. .withRootPassword(password)
  43. .withSize(VirtualMachineSizeTypes.STANDARD_D5_V2)
  44. .withOSDiskCaching(CachingTypes.READ_WRITE)
  45. .create();
  46. // Ensure default to managed disk
  47. //
  48. Assertions.assertTrue(virtualMachine.isManagedDiskEnabled());
  49. // Validate caching, size and the default storage account type set for the managed disk
  50. // backing os disk
  51. //
  52. Assertions.assertNotNull(virtualMachine.osDiskStorageAccountType());
  53. Assertions.assertEquals(virtualMachine.osDiskCachingType(), CachingTypes.READ_WRITE);
  54. Assertions.assertEquals(virtualMachine.size(), VirtualMachineSizeTypes.STANDARD_D5_V2);
  55. // Validate the implicit managed disk created by CRP to back the os disk
  56. //
  57. Assertions.assertNotNull(virtualMachine.osDiskId());
  58. Disk osDisk = computeManager.disks().getById(virtualMachine.osDiskId());
  59. Assertions.assertTrue(osDisk.isAttachedToVirtualMachine());
  60. Assertions.assertEquals(osDisk.osType(), OperatingSystemTypes.LINUX);
  61. // Check the auto created public ip
  62. //
  63. String publicIpId = virtualMachine.getPrimaryPublicIPAddressId();
  64. Assertions.assertNotNull(publicIpId);
  65. // Validates the options which are valid only for native disks
  66. //
  67. Assertions.assertNull(virtualMachine.osUnmanagedDiskVhdUri());
  68. Assertions.assertNotNull(virtualMachine.unmanagedDataDisks());
  69. Assertions.assertTrue(virtualMachine.unmanagedDataDisks().size() == 0);
  70. }
  71. @Test
  72. public void canCreateUpdateVirtualMachineWithEmptyManagedDataDisks() {
  73. final String publicIpDnsLabel = generateRandomResourceName("pip", 20);
  74. final String uname = "juser";
  75. final String password = "123tEst!@|ac";
  76. // Create with implicit + explicit empty disks, check default and override
  77. //
  78. final String vmName1 = "myvm1";
  79. final String explicitlyCreatedEmptyDiskName1 = generateRandomResourceName(vmName1 + "_mdisk_", 25);
  80. final String explicitlyCreatedEmptyDiskName2 = generateRandomResourceName(vmName1 + "_mdisk_", 25);
  81. final String explicitlyCreatedEmptyDiskName3 = generateRandomResourceName(vmName1 + "_mdisk_", 25);
  82. ResourceGroup resourceGroup = resourceManager.resourceGroups().define(rgName).withRegion(region).create();
  83. Creatable<Disk> creatableEmptyDisk1 =
  84. computeManager
  85. .disks()
  86. .define(explicitlyCreatedEmptyDiskName1)
  87. .withRegion(region)
  88. .withExistingResourceGroup(resourceGroup)
  89. .withData()
  90. .withSizeInGB(150);
  91. Creatable<Disk> creatableEmptyDisk2 =
  92. computeManager
  93. .disks()
  94. .define(explicitlyCreatedEmptyDiskName2)
  95. .withRegion(region)
  96. .withExistingResourceGroup(resourceGroup)
  97. .withData()
  98. .withSizeInGB(150);
  99. Creatable<Disk> creatableEmptyDisk3 =
  100. computeManager
  101. .disks()
  102. .define(explicitlyCreatedEmptyDiskName3)
  103. .withRegion(region)
  104. .withExistingResourceGroup(resourceGroup)
  105. .withData()
  106. .withSizeInGB(150);
  107. VirtualMachine virtualMachine =
  108. computeManager
  109. .virtualMachines()
  110. .define(vmName1)
  111. .withRegion(region)
  112. .withExistingResourceGroup(resourceGroup)
  113. .withNewPrimaryNetwork("10.0.0.0/28")
  114. .withPrimaryPrivateIPAddressDynamic()
  115. .withNewPrimaryPublicIPAddress(publicIpDnsLabel)
  116. .withPopularLinuxImage(linuxImage)
  117. .withRootUsername(uname)
  118. .withRootPassword(password)
  119. // Start: Add 5 empty managed disks
  120. .withNewDataDisk(100) // CreateOption: EMPTY
  121. .withNewDataDisk(100, 1, CachingTypes.READ_ONLY) // CreateOption: EMPTY
  122. .withNewDataDisk(creatableEmptyDisk1) // CreateOption: ATTACH
  123. .withNewDataDisk(creatableEmptyDisk2, 2, CachingTypes.NONE) // CreateOption: ATTACH
  124. .withNewDataDisk(creatableEmptyDisk3, 3, CachingTypes.NONE) // CreateOption: ATTACH
  125. // End : Add 5 empty managed disks
  126. .withSize(VirtualMachineSizeTypes.STANDARD_D5_V2)
  127. .withOSDiskCaching(CachingTypes.READ_WRITE)
  128. .create();
  129. Assertions.assertTrue(virtualMachine.isManagedDiskEnabled());
  130. // There should not be any un-managed data disks
  131. //
  132. Assertions.assertNotNull(virtualMachine.unmanagedDataDisks());
  133. Assertions.assertEquals(virtualMachine.unmanagedDataDisks().size(), 0);
  134. // Validate the managed data disks
  135. //
  136. Map<Integer, VirtualMachineDataDisk> dataDisks = virtualMachine.dataDisks();
  137. Assertions.assertNotNull(dataDisks);
  138. Assertions.assertTrue(dataDisks.size() == 5);
  139. Assertions.assertTrue(dataDisks.containsKey(1));
  140. VirtualMachineDataDisk dataDiskLun1 = dataDisks.get(1);
  141. Assertions.assertNotNull(dataDiskLun1.id());
  142. Assertions.assertEquals(dataDiskLun1.cachingType(), CachingTypes.READ_ONLY);
  143. Assertions.assertEquals(dataDiskLun1.size(), 100);
  144. Assertions.assertTrue(dataDisks.containsKey(2));
  145. VirtualMachineDataDisk dataDiskLun2 = dataDisks.get(2);
  146. Assertions.assertNotNull(dataDiskLun2.id());
  147. Assertions.assertEquals(dataDiskLun2.cachingType(), CachingTypes.NONE);
  148. Assertions.assertEquals(dataDiskLun2.size(), 150);
  149. Assertions.assertTrue(dataDisks.containsKey(3));
  150. VirtualMachineDataDisk dataDiskLun3 = dataDisks.get(3);
  151. Assertions.assertNotNull(dataDiskLun3.id());
  152. Assertions.assertEquals(dataDiskLun3.cachingType(), CachingTypes.NONE);
  153. Assertions.assertEquals(dataDiskLun3.size(), 150);
  154. // Validate the defaults assigned
  155. //
  156. for (VirtualMachineDataDisk dataDisk : dataDisks.values()) {
  157. if (dataDisk.lun() != 1 && dataDisk.lun() != 2 && dataDisk.lun() != 3) {
  158. Assertions.assertEquals(dataDisk.cachingType(), CachingTypes.READ_WRITE);
  159. Assertions.assertEquals(dataDisk.storageAccountType(), StorageAccountTypes.STANDARD_LRS);
  160. }
  161. }
  162. // Updating and adding disk as part of VM Update seems consistency failing, CRP is aware of
  163. // this, hence until it is fixed comment-out the test
  164. //
  165. // {
  166. // "startTime": "2017-01-26T05:48:59.9290573+00:00",
  167. // "endTime": "2017-01-26T05:49:02.2884052+00:00",
  168. // "status": "Failed",
  169. // "error": {
  170. // "code": "InternalExecutionError",
  171. // "message": "An internal execution error occurred."
  172. // },
  173. // "name": "bc8072a7-38bb-445b-ae59-f16cf125342c"
  174. // }
  175. //
  176. // virtualMachine.deallocate();
  177. //
  178. // virtualMachine.update()
  179. // .withDataDiskUpdated(1, 200)
  180. // .withDataDiskUpdated(2, 200, CachingTypes.READ_WRITE)
  181. // .withNewDataDisk(60)
  182. // .apply();
  183. //
  184. // Assertions.assertTrue(virtualMachine.isManagedDiskEnabled());
  185. // // There should not be any un-managed data disks
  186. // //
  187. // Assertions.assertNotNull(virtualMachine.unmanagedDataDisks());
  188. // Assertions.assertEquals(virtualMachine.unmanagedDataDisks().size(), 0);
  189. //
  190. // // Validate the managed data disks
  191. // //
  192. // dataDisks = virtualMachine.dataDisks();
  193. // Assertions.assertNotNull(dataDisks);
  194. // Assertions.assertTrue(dataDisks.size() == 6);
  195. // Assertions.assertTrue(dataDisks.containsKey(1));
  196. // dataDiskLun1 = dataDisks.get(1);
  197. // Assertions.assertNotNull(dataDiskLun1.id());
  198. // Assertions.assertEquals(dataDiskLun1.cachingType(), CachingTypes.READ_ONLY);
  199. // Assertions.assertEquals(dataDiskLun1.size(), 200); // 100 -> 200
  200. //
  201. // Assertions.assertTrue(dataDisks.containsKey(2));
  202. // dataDiskLun2 = dataDisks.get(2);
  203. // Assertions.assertNotNull(dataDiskLun2.id());
  204. // Assertions.assertEquals(dataDiskLun2.cachingType(), CachingTypes.READ_WRITE); // NONE -> READ_WRITE
  205. // Assertions.assertEquals(dataDiskLun2.size(), 200); // 150 -> 200
  206. //
  207. // Assertions.assertTrue(dataDisks.containsKey(3));
  208. // dataDiskLun3 = dataDisks.get(3);
  209. // Assertions.assertNotNull(dataDiskLun3.id());
  210. // Assertions.assertEquals(dataDiskLun3.cachingType(), CachingTypes.NONE);
  211. // Assertions.assertEquals(dataDiskLun3.size(), 150);
  212. //
  213. // // Ensure defaults of other disks are not affected
  214. // for (VirtualMachineDataDisk dataDisk : dataDisks.values()) {
  215. // if (dataDisk.lun() != 1 && dataDisk.lun() != 3) {
  216. // Assertions.assertEquals(dataDisk.cachingType(), CachingTypes.READ_WRITE);
  217. // Assertions.assertEquals(dataDisk.storageAccountType(), StorageAccountTypes.STANDARD_LRS);
  218. // }
  219. // }
  220. }
  221. @Test
  222. public void canCreateVirtualMachineFromCustomImageWithManagedDisks() {
  223. final String publicIpDnsLabel = generateRandomResourceName("pip", 20);
  224. final String uname = "juser";
  225. final String password = "123tEst!@|ac";
  226. // Create with implicit + explicit empty disks, check default and override
  227. //
  228. final String vmName1 = "myvm1";
  229. final String explicitlyCreatedEmptyDiskName1 = generateRandomResourceName(vmName1 + "_mdisk_", 25);
  230. final String explicitlyCreatedEmptyDiskName2 = generateRandomResourceName(vmName1 + "_mdisk_", 25);
  231. final String explicitlyCreatedEmptyDiskName3 = generateRandomResourceName(vmName1 + "_mdisk_", 25);
  232. ResourceGroup resourceGroup = resourceManager.resourceGroups().define(rgName).withRegion(region).create();
  233. Creatable<Disk> creatableEmptyDisk1 =
  234. computeManager
  235. .disks()
  236. .define(explicitlyCreatedEmptyDiskName1)
  237. .withRegion(region)
  238. .withExistingResourceGroup(resourceGroup)
  239. .withData()
  240. .withSizeInGB(150);
  241. Creatable<Disk> creatableEmptyDisk2 =
  242. computeManager
  243. .disks()
  244. .define(explicitlyCreatedEmptyDiskName2)
  245. .withRegion(region)
  246. .withExistingResourceGroup(resourceGroup)
  247. .withData()
  248. .withSizeInGB(150);
  249. Creatable<Disk> creatableEmptyDisk3 =
  250. computeManager
  251. .disks()
  252. .define(explicitlyCreatedEmptyDiskName3)
  253. .withRegion(region)
  254. .withExistingResourceGroup(resourceGroup)
  255. .withData()
  256. .withSizeInGB(150);
  257. VirtualMachine virtualMachine1 =
  258. computeManager
  259. .virtualMachines()
  260. .define(vmName1)
  261. .withRegion(region)
  262. .withExistingResourceGroup(resourceGroup)
  263. .withNewPrimaryNetwork("10.0.0.0/28")
  264. .withPrimaryPrivateIPAddressDynamic()
  265. .withNewPrimaryPublicIPAddress(publicIpDnsLabel)
  266. .withPopularLinuxImage(linuxImage)
  267. .withRootUsername(uname)
  268. .withRootPassword(password)
  269. // Start: Add bunch of empty managed disks
  270. .withNewDataDisk(100) // CreateOption: EMPTY
  271. .withNewDataDisk(100, 1, CachingTypes.READ_ONLY) // CreateOption: EMPTY
  272. .withNewDataDisk(creatableEmptyDisk1) // CreateOption: ATTACH
  273. .withNewDataDisk(creatableEmptyDisk2, 2, CachingTypes.NONE) // CreateOption: ATTACH
  274. .withNewDataDisk(creatableEmptyDisk3, 3, CachingTypes.NONE) // CreateOption: ATTACH
  275. // End : Add bunch of empty managed disks
  276. .withSize(VirtualMachineSizeTypes.STANDARD_D5_V2)
  277. .withOSDiskCaching(CachingTypes.READ_WRITE)
  278. .create();
  279. System.out.println("Waiting for some time before de-provision");
  280. sleep(60 * 1000); // Wait for some time to ensure vm is publicly accessible
  281. deprovisionAgentInLinuxVM(virtualMachine1.getPrimaryPublicIPAddress().fqdn(), 22, uname, password);
  282. virtualMachine1.deallocate();
  283. virtualMachine1.generalize();
  284. final String customImageName = generateRandomResourceName("img-", 10);
  285. VirtualMachineCustomImage customImage =
  286. computeManager
  287. .virtualMachineCustomImages()
  288. .define(customImageName)
  289. .withRegion(region)
  290. .withExistingResourceGroup(resourceGroup)
  291. .fromVirtualMachine(virtualMachine1)
  292. .create();
  293. Assertions.assertNotNull(customImage);
  294. Assertions.assertNotNull(customImage.sourceVirtualMachineId());
  295. Assertions
  296. .assertTrue(customImage.sourceVirtualMachineId().equalsIgnoreCase(virtualMachine1.id().toLowerCase()));
  297. Assertions.assertNotNull(customImage.osDiskImage());
  298. Assertions.assertEquals(customImage.osDiskImage().osState(), OperatingSystemStateTypes.GENERALIZED);
  299. Assertions.assertEquals(customImage.osDiskImage().osType(), OperatingSystemTypes.LINUX);
  300. Assertions.assertNotNull(customImage.dataDiskImages());
  301. Assertions.assertEquals(customImage.dataDiskImages().size(), 5);
  302. for (ImageDataDisk imageDataDisk : customImage.dataDiskImages().values()) {
  303. Assertions.assertNull(imageDataDisk.blobUri());
  304. Assertions.assertNotNull(imageDataDisk.managedDisk().id());
  305. }
  306. // Create virtual machine from the custom image
  307. // This one relies on CRP's capability to create implicit data disks from the virtual machine
  308. // image data disk images.
  309. //
  310. final String vmName2 = "myvm2";
  311. VirtualMachine virtualMachine2 =
  312. computeManager
  313. .virtualMachines()
  314. .define(vmName2)
  315. .withRegion(region)
  316. .withExistingResourceGroup(resourceGroup)
  317. .withNewPrimaryNetwork("10.0.0.0/28")
  318. .withPrimaryPrivateIPAddressDynamic()
  319. .withoutPrimaryPublicIPAddress()
  320. .withLinuxCustomImage(customImage.id())
  321. .withRootUsername(uname)
  322. .withRootPassword(password)
  323. // No explicit data disks, let CRP create it from the image's data disk images
  324. .withSize(VirtualMachineSizeTypes.STANDARD_D5_V2)
  325. .withOSDiskCaching(CachingTypes.READ_WRITE)
  326. .create();
  327. Map<Integer, VirtualMachineDataDisk> dataDisks = virtualMachine2.dataDisks();
  328. Assertions.assertNotNull(dataDisks);
  329. Assertions.assertEquals(dataDisks.size(), customImage.dataDiskImages().size());
  330. for (ImageDataDisk imageDataDisk : customImage.dataDiskImages().values()) {
  331. Assertions.assertTrue(dataDisks.containsKey(imageDataDisk.lun()));
  332. VirtualMachineDataDisk dataDisk = dataDisks.get(imageDataDisk.lun());
  333. Assertions.assertEquals(dataDisk.cachingType(), imageDataDisk.caching());
  334. // Fails due to CRP bug: Managed disk size is not returned on gets.
  335. // Assertions.assertEquals(dataDisk.size(), (long) imageDataDisk.diskSizeGB());
  336. }
  337. // Create virtual machine from the custom image
  338. // This one override the size and caching type of data disks from data disk images and
  339. // adds one additional disk
  340. //
  341. final String vmName3 = "myvm3";
  342. VirtualMachine.DefinitionStages.WithManagedCreate creatableVirtualMachine3 =
  343. computeManager
  344. .virtualMachines()
  345. .define(vmName3)
  346. .withRegion(region)
  347. .withExistingResourceGroup(resourceGroup)
  348. .withNewPrimaryNetwork("10.0.0.0/28")
  349. .withPrimaryPrivateIPAddressDynamic()
  350. .withoutPrimaryPublicIPAddress()
  351. .withLinuxCustomImage(customImage.id())
  352. .withRootUsername(uname)
  353. .withRootPassword(password);
  354. for (ImageDataDisk dataDiskImage : customImage.dataDiskImages().values()) {
  355. // Explicitly override the properties of the data disks created from disk image
  356. //
  357. // CreateOption: FROM_IMAGE
  358. VirtualMachineDataDisk dataDisk = dataDisks.get(dataDiskImage.lun());
  359. creatableVirtualMachine3
  360. .withNewDataDiskFromImage(
  361. dataDiskImage.lun(),
  362. dataDisk.size() + 10, // increase size by 10 GB
  363. CachingTypes.READ_ONLY);
  364. }
  365. VirtualMachine virtualMachine3 =
  366. creatableVirtualMachine3
  367. .withNewDataDisk(200) // CreateOption: EMPTY
  368. .withSize(VirtualMachineSizeTypes.STANDARD_D5_V2)
  369. .withOSDiskCaching(CachingTypes.READ_WRITE)
  370. .create();
  371. dataDisks = virtualMachine3.dataDisks();
  372. Assertions.assertNotNull(dataDisks);
  373. Assertions
  374. .assertEquals(dataDisks.size(), customImage.dataDiskImages().size() + 1 /* count one extra empty disk */);
  375. for (ImageDataDisk imageDataDisk : customImage.dataDiskImages().values()) {
  376. Assertions.assertTrue(dataDisks.containsKey(imageDataDisk.lun()));
  377. VirtualMachineDataDisk dataDisk = dataDisks.get(imageDataDisk.lun());
  378. Assertions.assertEquals(dataDisk.cachingType(), CachingTypes.READ_ONLY);
  379. // Fails due to CRP bug: Managed disk size is not returned on gets.
  380. // Assertions.assertEquals(dataDisk.size(), (long) imageDataDisk.diskSizeGB() + 10);
  381. }
  382. }
  383. @Test
  384. public void canUpdateVirtualMachineByAddingAndRemovingManagedDisks() {
  385. final String publicIpDnsLabel = generateRandomResourceName("pip", 20);
  386. final String uname = "juser";
  387. final String password = "123tEst!@|ac";
  388. // Create with implicit + explicit empty disks, check default and override
  389. //
  390. final String vmName1 = "myvm1";
  391. final String explicitlyCreatedEmptyDiskName1 = generateRandomResourceName(vmName1 + "_mdisk_", 25);
  392. final String explicitlyCreatedEmptyDiskName2 = generateRandomResourceName(vmName1 + "_mdisk_", 25);
  393. final String explicitlyCreatedEmptyDiskName3 = generateRandomResourceName(vmName1 + "_mdisk_", 25);
  394. ResourceGroup resourceGroup = resourceManager.resourceGroups().define(rgName).withRegion(region).create();
  395. Creatable<Disk> creatableEmptyDisk1 =
  396. computeManager
  397. .disks()
  398. .define(explicitlyCreatedEmptyDiskName1)
  399. .withRegion(region)
  400. .withExistingResourceGroup(resourceGroup)
  401. .withData()
  402. .withSizeInGB(150);
  403. Creatable<Disk> creatableEmptyDisk2 =
  404. computeManager
  405. .disks()
  406. .define(explicitlyCreatedEmptyDiskName2)
  407. .withRegion(region)
  408. .withExistingResourceGroup(resourceGroup)
  409. .withData()
  410. .withSizeInGB(150);
  411. Creatable<Disk> creatableEmptyDisk3 =
  412. computeManager
  413. .disks()
  414. .define(explicitlyCreatedEmptyDiskName3)
  415. .withRegion(region)
  416. .withExistingResourceGroup(resourceGroup)
  417. .withData()
  418. .withSizeInGB(150);
  419. VirtualMachine virtualMachine1 =
  420. computeManager
  421. .virtualMachines()
  422. .define(vmName1)
  423. .withRegion(region)
  424. .withExistingResourceGroup(resourceGroup)
  425. .withNewPrimaryNetwork("10.0.0.0/28")
  426. .withPrimaryPrivateIPAddressDynamic()
  427. .withNewPrimaryPublicIPAddress(publicIpDnsLabel)
  428. .withPopularLinuxImage(linuxImage)
  429. .withRootUsername(uname)
  430. .withRootPassword(password)
  431. // Start: Add bunch of empty managed disks
  432. .withNewDataDisk(100) // CreateOption: EMPTY
  433. .withNewDataDisk(100, 1, CachingTypes.READ_WRITE) // CreateOption: EMPTY
  434. .withNewDataDisk(creatableEmptyDisk1) // CreateOption: ATTACH
  435. .withNewDataDisk(creatableEmptyDisk2, 2, CachingTypes.NONE) // CreateOption: ATTACH
  436. .withNewDataDisk(creatableEmptyDisk3, 3, CachingTypes.NONE) // CreateOption: ATTACH
  437. // End : Add bunch of empty managed disks
  438. .withDataDiskDefaultCachingType(CachingTypes.READ_ONLY)
  439. .withDataDiskDefaultStorageAccountType(StorageAccountTypes.STANDARD_LRS)
  440. .withSize(VirtualMachineSizeTypes.STANDARD_D5_V2)
  441. .withOSDiskCaching(CachingTypes.READ_WRITE)
  442. .create();
  443. virtualMachine1
  444. .update()
  445. .withoutDataDisk(1)
  446. .withNewDataDisk(100, 6, CachingTypes.READ_WRITE) // CreateOption: EMPTY
  447. .apply();
  448. Map<Integer, VirtualMachineDataDisk> dataDisks = virtualMachine1.dataDisks();
  449. Assertions.assertNotNull(dataDisks);
  450. Assertions.assertEquals(dataDisks.size(), 5); // Removed one added another
  451. Assertions.assertTrue(dataDisks.containsKey(6));
  452. Assertions.assertFalse(dataDisks.containsKey(1));
  453. }
  454. @Test
  455. public void canCreateVirtualMachineByAttachingManagedOsDisk() {
  456. final String uname = "juser";
  457. final String password = "123tEst!@|ac";
  458. final String vmName = "myvm6";
  459. final String storageAccountName = generateRandomResourceName("stg", 17);
  460. // Creates a native virtual machine
  461. //
  462. VirtualMachine nativeVm =
  463. computeManager
  464. .virtualMachines()
  465. .define(vmName)
  466. .withRegion(region)
  467. .withNewResourceGroup(rgName)
  468. .withNewPrimaryNetwork("10.0.0.0/28")
  469. .withPrimaryPrivateIPAddressDynamic()
  470. .withoutPrimaryPublicIPAddress()
  471. .withLatestLinuxImage("Canonical", "UbuntuServer", "14.04.2-LTS")
  472. .withRootUsername(uname)
  473. .withRootPassword(password)
  474. .withUnmanagedDisks() /* UN-MANAGED OS and DATA DISKS */
  475. .withSize(VirtualMachineSizeTypes.STANDARD_D5_V2)
  476. .withNewStorageAccount(storageAccountName)
  477. .withOSDiskCaching(CachingTypes.READ_WRITE)
  478. .create();
  479. Assertions.assertFalse(nativeVm.isManagedDiskEnabled());
  480. String osVhdUri = nativeVm.osUnmanagedDiskVhdUri();
  481. Assertions.assertNotNull(osVhdUri);
  482. computeManager.virtualMachines().deleteById(nativeVm.id());
  483. final String diskName = generateRandomResourceName("dsk-", 15);
  484. Disk osDisk =
  485. computeManager
  486. .disks()
  487. .define(diskName)
  488. .withRegion(region)
  489. .withExistingResourceGroup(rgName)
  490. .withLinuxFromVhd(osVhdUri)
  491. .withStorageAccountName(storageAccountName)
  492. .create();
  493. // Creates a managed virtual machine
  494. //
  495. VirtualMachine managedVm =
  496. computeManager
  497. .virtualMachines()
  498. .define(vmName)
  499. .withRegion(region)
  500. .withExistingResourceGroup(rgName)
  501. .withNewPrimaryNetwork("10.0.0.0/28")
  502. .withPrimaryPrivateIPAddressDynamic()
  503. .withoutPrimaryPublicIPAddress()
  504. .withSpecializedOSDisk(osDisk, OperatingSystemTypes.LINUX)
  505. .withSize(VirtualMachineSizeTypes.STANDARD_D5_V2)
  506. .withOSDiskCaching(CachingTypes.READ_WRITE)
  507. .create();
  508. Assertions.assertTrue(managedVm.isManagedDiskEnabled());
  509. Assertions.assertTrue(managedVm.osDiskId().equalsIgnoreCase(osDisk.id().toLowerCase()));
  510. }
  511. @Test
  512. public void canCreateVirtualMachineWithManagedDiskInManagedAvailabilitySet() {
  513. final String availSetName = generateRandomResourceName("av-", 15);
  514. final String uname = "juser";
  515. final String password = "123tEst!@|ac";
  516. final String vmName = "myvm6";
  517. VirtualMachine managedVm =
  518. computeManager
  519. .virtualMachines()
  520. .define(vmName)
  521. .withRegion(region)
  522. .withNewResourceGroup(rgName)
  523. .withNewPrimaryNetwork("10.0.0.0/28")
  524. .withPrimaryPrivateIPAddressDynamic()
  525. .withoutPrimaryPublicIPAddress()
  526. .withPopularLinuxImage(linuxImage)
  527. .withRootUsername(uname)
  528. .withRootPassword(password)
  529. .withNewDataDisk(100)
  530. .withNewDataDisk(100, 1, CachingTypes.READ_ONLY)
  531. .withNewDataDisk(100, 2, CachingTypes.READ_WRITE, StorageAccountTypes.STANDARD_LRS)
  532. .withNewAvailabilitySet(availSetName) // Default to managed availability set
  533. .withSize(VirtualMachineSizeTypes.STANDARD_D5_V2)
  534. .withOSDiskCaching(CachingTypes.READ_WRITE)
  535. .create();
  536. Assertions.assertNotNull(managedVm.availabilitySetId());
  537. AvailabilitySet availabilitySet = computeManager.availabilitySets().getById(managedVm.availabilitySetId());
  538. Assertions.assertTrue(availabilitySet.virtualMachineIds().size() > 0);
  539. Assertions.assertEquals(availabilitySet.sku(), AvailabilitySetSkuTypes.ALIGNED);
  540. }
  541. }