PageRenderTime 47ms CodeModel.GetById 4ms RepoModel.GetById 0ms app.codeStats 0ms

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

http://github.com/WindowsAzure/azure-sdk-for-java
Java | 468 lines | 399 code | 63 blank | 6 comment | 18 complexity | 3835f0f9bcd9de330612d93d0f71d473 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.compute.models.VirtualMachineScaleSetInner;
  6. import com.azure.management.network.LoadBalancer;
  7. import com.azure.management.network.LoadBalancerSkuType;
  8. import com.azure.management.network.Network;
  9. import com.azure.management.resources.ResourceGroup;
  10. import com.azure.management.resources.fluentcore.arm.Region;
  11. import com.azure.management.resources.fluentcore.model.Creatable;
  12. import com.azure.management.resources.fluentcore.profile.AzureProfile;
  13. import com.azure.management.storage.StorageAccount;
  14. import java.util.ArrayList;
  15. import java.util.List;
  16. import org.junit.jupiter.api.Assertions;
  17. import org.junit.jupiter.api.Test;
  18. public class VirtualMachineScaleSetBootDiagnosticsTests extends ComputeManagementTest {
  19. private String rgName = "";
  20. private final Region region = Region.US_SOUTH_CENTRAL;
  21. private final String vmName = "javavm";
  22. @Override
  23. protected void initializeClients(HttpPipeline httpPipeline, AzureProfile profile) {
  24. rgName = generateRandomResourceName("javacsmrg", 15);
  25. super.initializeClients(httpPipeline, profile);
  26. }
  27. @Override
  28. protected void cleanUpResources() {
  29. resourceManager.resourceGroups().deleteByName(rgName);
  30. }
  31. @Test
  32. public void canEnableBootDiagnosticsWithImplicitStorageOnManagedVMSSCreation() throws Exception {
  33. final String vmssName = generateRandomResourceName("vmss", 10);
  34. ResourceGroup resourceGroup = this.resourceManager.resourceGroups().define(rgName).withRegion(region).create();
  35. Network network =
  36. this
  37. .networkManager
  38. .networks()
  39. .define("vmssvnet")
  40. .withRegion(region)
  41. .withExistingResourceGroup(resourceGroup)
  42. .withAddressSpace("10.0.0.0/28")
  43. .withSubnet("subnet1", "10.0.0.0/28")
  44. .create();
  45. LoadBalancer publicLoadBalancer =
  46. createInternetFacingLoadBalancer(region, resourceGroup, "1", LoadBalancerSkuType.BASIC);
  47. List<String> backends = new ArrayList<>();
  48. for (String backend : publicLoadBalancer.backends().keySet()) {
  49. backends.add(backend);
  50. }
  51. Assertions.assertTrue(backends.size() == 2);
  52. VirtualMachineScaleSet virtualMachineScaleSet =
  53. this
  54. .computeManager
  55. .virtualMachineScaleSets()
  56. .define(vmssName)
  57. .withRegion(region)
  58. .withExistingResourceGroup(resourceGroup)
  59. .withSku(VirtualMachineScaleSetSkuTypes.STANDARD_A0)
  60. .withExistingPrimaryNetworkSubnet(network, "subnet1")
  61. .withExistingPrimaryInternetFacingLoadBalancer(publicLoadBalancer)
  62. .withPrimaryInternetFacingLoadBalancerBackends(backends.get(0), backends.get(1))
  63. .withoutPrimaryInternalLoadBalancer()
  64. .withPopularLinuxImage(KnownLinuxVirtualMachineImage.UBUNTU_SERVER_16_04_LTS)
  65. .withRootUsername("jvuser")
  66. .withRootPassword("123OData!@#123")
  67. .withBootDiagnostics()
  68. .create();
  69. Assertions.assertNotNull(virtualMachineScaleSet);
  70. Assertions.assertTrue(virtualMachineScaleSet.isBootDiagnosticsEnabled());
  71. Assertions.assertNotNull(virtualMachineScaleSet.bootDiagnosticsStorageUri());
  72. }
  73. @Test
  74. public void canEnableBootDiagnosticsWithCreatableStorageOnManagedVMSSCreation() throws Exception {
  75. final String vmssName = generateRandomResourceName("vmss", 10);
  76. final String storageName = sdkContext.randomResourceName("st", 14);
  77. ResourceGroup resourceGroup = this.resourceManager.resourceGroups().define(rgName).withRegion(region).create();
  78. Network network =
  79. this
  80. .networkManager
  81. .networks()
  82. .define("vmssvnet")
  83. .withRegion(region)
  84. .withExistingResourceGroup(resourceGroup)
  85. .withAddressSpace("10.0.0.0/28")
  86. .withSubnet("subnet1", "10.0.0.0/28")
  87. .create();
  88. LoadBalancer publicLoadBalancer =
  89. createInternetFacingLoadBalancer(region, resourceGroup, "1", LoadBalancerSkuType.BASIC);
  90. List<String> backends = new ArrayList<>();
  91. for (String backend : publicLoadBalancer.backends().keySet()) {
  92. backends.add(backend);
  93. }
  94. Assertions.assertTrue(backends.size() == 2);
  95. Creatable<StorageAccount> creatableStorageAccount =
  96. storageManager.storageAccounts().define(storageName).withRegion(region).withExistingResourceGroup(rgName);
  97. VirtualMachineScaleSet virtualMachineScaleSet =
  98. this
  99. .computeManager
  100. .virtualMachineScaleSets()
  101. .define(vmssName)
  102. .withRegion(region)
  103. .withExistingResourceGroup(resourceGroup)
  104. .withSku(VirtualMachineScaleSetSkuTypes.STANDARD_A0)
  105. .withExistingPrimaryNetworkSubnet(network, "subnet1")
  106. .withExistingPrimaryInternetFacingLoadBalancer(publicLoadBalancer)
  107. .withPrimaryInternetFacingLoadBalancerBackends(backends.get(0), backends.get(1))
  108. .withoutPrimaryInternalLoadBalancer()
  109. .withPopularLinuxImage(KnownLinuxVirtualMachineImage.UBUNTU_SERVER_16_04_LTS)
  110. .withRootUsername("jvuser")
  111. .withRootPassword("123OData!@#123")
  112. .withBootDiagnostics(creatableStorageAccount)
  113. .create();
  114. Assertions.assertNotNull(virtualMachineScaleSet);
  115. Assertions.assertTrue(virtualMachineScaleSet.isBootDiagnosticsEnabled());
  116. Assertions.assertNotNull(virtualMachineScaleSet.bootDiagnosticsStorageUri());
  117. Assertions.assertTrue(virtualMachineScaleSet.bootDiagnosticsStorageUri().contains(storageName));
  118. }
  119. @Test
  120. public void canEnableBootDiagnosticsWithExplicitStorageOnManagedVMSSCreation() throws Exception {
  121. final String vmssName = generateRandomResourceName("vmss", 10);
  122. final String storageName = sdkContext.randomResourceName("st", 14);
  123. ResourceGroup resourceGroup = this.resourceManager.resourceGroups().define(rgName).withRegion(region).create();
  124. Network network =
  125. this
  126. .networkManager
  127. .networks()
  128. .define("vmssvnet")
  129. .withRegion(region)
  130. .withExistingResourceGroup(resourceGroup)
  131. .withAddressSpace("10.0.0.0/28")
  132. .withSubnet("subnet1", "10.0.0.0/28")
  133. .create();
  134. LoadBalancer publicLoadBalancer =
  135. createInternetFacingLoadBalancer(region, resourceGroup, "1", LoadBalancerSkuType.BASIC);
  136. List<String> backends = new ArrayList<>();
  137. for (String backend : publicLoadBalancer.backends().keySet()) {
  138. backends.add(backend);
  139. }
  140. Assertions.assertTrue(backends.size() == 2);
  141. StorageAccount storageAccount =
  142. storageManager
  143. .storageAccounts()
  144. .define(storageName)
  145. .withRegion(region)
  146. .withNewResourceGroup(rgName)
  147. .create();
  148. VirtualMachineScaleSet virtualMachineScaleSet =
  149. this
  150. .computeManager
  151. .virtualMachineScaleSets()
  152. .define(vmssName)
  153. .withRegion(region)
  154. .withExistingResourceGroup(resourceGroup)
  155. .withSku(VirtualMachineScaleSetSkuTypes.STANDARD_A0)
  156. .withExistingPrimaryNetworkSubnet(network, "subnet1")
  157. .withExistingPrimaryInternetFacingLoadBalancer(publicLoadBalancer)
  158. .withPrimaryInternetFacingLoadBalancerBackends(backends.get(0), backends.get(1))
  159. .withoutPrimaryInternalLoadBalancer()
  160. .withPopularLinuxImage(KnownLinuxVirtualMachineImage.UBUNTU_SERVER_16_04_LTS)
  161. .withRootUsername("jvuser")
  162. .withRootPassword("123OData!@#123")
  163. .withBootDiagnostics(storageAccount)
  164. .create();
  165. Assertions.assertNotNull(virtualMachineScaleSet);
  166. Assertions.assertTrue(virtualMachineScaleSet.isBootDiagnosticsEnabled());
  167. Assertions.assertNotNull(virtualMachineScaleSet.bootDiagnosticsStorageUri());
  168. Assertions.assertTrue(virtualMachineScaleSet.bootDiagnosticsStorageUri().contains(storageName));
  169. }
  170. @Test
  171. public void canDisableVMSSBootDiagnostics() throws Exception {
  172. final String vmssName = generateRandomResourceName("vmss", 10);
  173. ResourceGroup resourceGroup = this.resourceManager.resourceGroups().define(rgName).withRegion(region).create();
  174. Network network =
  175. this
  176. .networkManager
  177. .networks()
  178. .define("vmssvnet")
  179. .withRegion(region)
  180. .withExistingResourceGroup(resourceGroup)
  181. .withAddressSpace("10.0.0.0/28")
  182. .withSubnet("subnet1", "10.0.0.0/28")
  183. .create();
  184. LoadBalancer publicLoadBalancer =
  185. createInternetFacingLoadBalancer(region, resourceGroup, "1", LoadBalancerSkuType.BASIC);
  186. List<String> backends = new ArrayList<>();
  187. for (String backend : publicLoadBalancer.backends().keySet()) {
  188. backends.add(backend);
  189. }
  190. Assertions.assertTrue(backends.size() == 2);
  191. VirtualMachineScaleSet virtualMachineScaleSet =
  192. this
  193. .computeManager
  194. .virtualMachineScaleSets()
  195. .define(vmssName)
  196. .withRegion(region)
  197. .withExistingResourceGroup(resourceGroup)
  198. .withSku(VirtualMachineScaleSetSkuTypes.STANDARD_A0)
  199. .withExistingPrimaryNetworkSubnet(network, "subnet1")
  200. .withExistingPrimaryInternetFacingLoadBalancer(publicLoadBalancer)
  201. .withPrimaryInternetFacingLoadBalancerBackends(backends.get(0), backends.get(1))
  202. .withoutPrimaryInternalLoadBalancer()
  203. .withPopularLinuxImage(KnownLinuxVirtualMachineImage.UBUNTU_SERVER_16_04_LTS)
  204. .withRootUsername("jvuser")
  205. .withRootPassword("123OData!@#123")
  206. .withBootDiagnostics()
  207. .create();
  208. Assertions.assertNotNull(virtualMachineScaleSet);
  209. Assertions.assertTrue(virtualMachineScaleSet.isBootDiagnosticsEnabled());
  210. Assertions.assertNotNull(virtualMachineScaleSet.bootDiagnosticsStorageUri());
  211. virtualMachineScaleSet.update().withoutBootDiagnostics().apply();
  212. Assertions.assertFalse(virtualMachineScaleSet.isBootDiagnosticsEnabled());
  213. // Disabling boot diagnostics will not remove the storage uri from the vm payload.
  214. Assertions.assertNotNull(virtualMachineScaleSet.bootDiagnosticsStorageUri());
  215. }
  216. @Test
  217. public void bootDiagnosticsShouldUsesVMSSOSUnManagedDiskImplicitStorage() throws Exception {
  218. final String vmssName = generateRandomResourceName("vmss", 10);
  219. ResourceGroup resourceGroup = this.resourceManager.resourceGroups().define(rgName).withRegion(region).create();
  220. Network network =
  221. this
  222. .networkManager
  223. .networks()
  224. .define("vmssvnet")
  225. .withRegion(region)
  226. .withExistingResourceGroup(resourceGroup)
  227. .withAddressSpace("10.0.0.0/28")
  228. .withSubnet("subnet1", "10.0.0.0/28")
  229. .create();
  230. LoadBalancer publicLoadBalancer =
  231. createInternetFacingLoadBalancer(region, resourceGroup, "1", LoadBalancerSkuType.BASIC);
  232. List<String> backends = new ArrayList<>();
  233. for (String backend : publicLoadBalancer.backends().keySet()) {
  234. backends.add(backend);
  235. }
  236. Assertions.assertTrue(backends.size() == 2);
  237. VirtualMachineScaleSet virtualMachineScaleSet =
  238. this
  239. .computeManager
  240. .virtualMachineScaleSets()
  241. .define(vmssName)
  242. .withRegion(region)
  243. .withExistingResourceGroup(resourceGroup)
  244. .withSku(VirtualMachineScaleSetSkuTypes.STANDARD_A0)
  245. .withExistingPrimaryNetworkSubnet(network, "subnet1")
  246. .withExistingPrimaryInternetFacingLoadBalancer(publicLoadBalancer)
  247. .withPrimaryInternetFacingLoadBalancerBackends(backends.get(0), backends.get(1))
  248. .withoutPrimaryInternalLoadBalancer()
  249. .withPopularLinuxImage(KnownLinuxVirtualMachineImage.UBUNTU_SERVER_16_04_LTS)
  250. .withRootUsername("jvuser")
  251. .withRootPassword("123OData!@#123")
  252. .withUnmanagedDisks()
  253. .withBootDiagnostics()
  254. .create();
  255. Assertions.assertNotNull(virtualMachineScaleSet);
  256. Assertions.assertTrue(virtualMachineScaleSet.isBootDiagnosticsEnabled());
  257. Assertions.assertNotNull(virtualMachineScaleSet.bootDiagnosticsStorageUri());
  258. VirtualMachineScaleSetInner inner = virtualMachineScaleSet.inner();
  259. Assertions.assertNotNull(inner);
  260. Assertions.assertNotNull(inner.virtualMachineProfile());
  261. Assertions.assertNotNull(inner.virtualMachineProfile().storageProfile());
  262. Assertions.assertNotNull(inner.virtualMachineProfile().storageProfile().osDisk());
  263. List<String> containers = inner.virtualMachineProfile().storageProfile().osDisk().vhdContainers();
  264. Assertions.assertFalse(containers.isEmpty());
  265. // Boot diagnostics should share storage used for os/disk containers
  266. boolean found = false;
  267. for (String containerStorageUri : containers) {
  268. if (containerStorageUri
  269. .toLowerCase()
  270. .startsWith(virtualMachineScaleSet.bootDiagnosticsStorageUri().toLowerCase())) {
  271. found = true;
  272. break;
  273. }
  274. }
  275. Assertions.assertTrue(found);
  276. }
  277. @Test
  278. public void bootDiagnosticsShouldUseVMSSUnManagedDisksExplicitStorage() throws Exception {
  279. final String storageName = sdkContext.randomResourceName("st", 14);
  280. final String vmssName = generateRandomResourceName("vmss", 10);
  281. ResourceGroup resourceGroup = this.resourceManager.resourceGroups().define(rgName).withRegion(region).create();
  282. Network network =
  283. this
  284. .networkManager
  285. .networks()
  286. .define("vmssvnet")
  287. .withRegion(region)
  288. .withExistingResourceGroup(resourceGroup)
  289. .withAddressSpace("10.0.0.0/28")
  290. .withSubnet("subnet1", "10.0.0.0/28")
  291. .create();
  292. LoadBalancer publicLoadBalancer =
  293. createInternetFacingLoadBalancer(region, resourceGroup, "1", LoadBalancerSkuType.BASIC);
  294. List<String> backends = new ArrayList<>();
  295. for (String backend : publicLoadBalancer.backends().keySet()) {
  296. backends.add(backend);
  297. }
  298. Assertions.assertTrue(backends.size() == 2);
  299. StorageAccount storageAccount =
  300. storageManager
  301. .storageAccounts()
  302. .define(storageName)
  303. .withRegion(region)
  304. .withNewResourceGroup(rgName)
  305. .create();
  306. VirtualMachineScaleSet virtualMachineScaleSet =
  307. this
  308. .computeManager
  309. .virtualMachineScaleSets()
  310. .define(vmssName)
  311. .withRegion(region)
  312. .withExistingResourceGroup(resourceGroup)
  313. .withSku(VirtualMachineScaleSetSkuTypes.STANDARD_A0)
  314. .withExistingPrimaryNetworkSubnet(network, "subnet1")
  315. .withExistingPrimaryInternetFacingLoadBalancer(publicLoadBalancer)
  316. .withPrimaryInternetFacingLoadBalancerBackends(backends.get(0), backends.get(1))
  317. .withoutPrimaryInternalLoadBalancer()
  318. .withPopularLinuxImage(KnownLinuxVirtualMachineImage.UBUNTU_SERVER_16_04_LTS)
  319. .withRootUsername("jvuser")
  320. .withRootPassword("123OData!@#123")
  321. .withUnmanagedDisks()
  322. .withBootDiagnostics()
  323. .withExistingStorageAccount(
  324. storageAccount) // This storage account must be shared by disk and boot diagnostics
  325. .create();
  326. Assertions.assertNotNull(virtualMachineScaleSet);
  327. Assertions.assertTrue(virtualMachineScaleSet.isBootDiagnosticsEnabled());
  328. Assertions.assertNotNull(virtualMachineScaleSet.bootDiagnosticsStorageUri());
  329. Assertions.assertTrue(virtualMachineScaleSet.bootDiagnosticsStorageUri().contains(storageName));
  330. VirtualMachineScaleSetInner inner = virtualMachineScaleSet.inner();
  331. Assertions.assertNotNull(inner);
  332. Assertions.assertNotNull(inner.virtualMachineProfile());
  333. Assertions.assertNotNull(inner.virtualMachineProfile().storageProfile());
  334. Assertions.assertNotNull(inner.virtualMachineProfile().storageProfile().osDisk());
  335. List<String> containers = inner.virtualMachineProfile().storageProfile().osDisk().vhdContainers();
  336. Assertions.assertFalse(containers.isEmpty());
  337. }
  338. @Test
  339. public void canEnableBootDiagnosticsWithCreatableStorageOnUnManagedVMSSCreation() throws Exception {
  340. final String storageName = sdkContext.randomResourceName("st", 14);
  341. final String vmssName = generateRandomResourceName("vmss", 10);
  342. ResourceGroup resourceGroup = this.resourceManager.resourceGroups().define(rgName).withRegion(region).create();
  343. Network network =
  344. this
  345. .networkManager
  346. .networks()
  347. .define("vmssvnet")
  348. .withRegion(region)
  349. .withExistingResourceGroup(resourceGroup)
  350. .withAddressSpace("10.0.0.0/28")
  351. .withSubnet("subnet1", "10.0.0.0/28")
  352. .create();
  353. LoadBalancer publicLoadBalancer =
  354. createInternetFacingLoadBalancer(region, resourceGroup, "1", LoadBalancerSkuType.BASIC);
  355. List<String> backends = new ArrayList<>();
  356. for (String backend : publicLoadBalancer.backends().keySet()) {
  357. backends.add(backend);
  358. }
  359. Assertions.assertTrue(backends.size() == 2);
  360. Creatable<StorageAccount> creatableStorageAccount =
  361. storageManager.storageAccounts().define(storageName).withRegion(region).withExistingResourceGroup(rgName);
  362. VirtualMachineScaleSet virtualMachineScaleSet =
  363. this
  364. .computeManager
  365. .virtualMachineScaleSets()
  366. .define(vmssName)
  367. .withRegion(region)
  368. .withExistingResourceGroup(resourceGroup)
  369. .withSku(VirtualMachineScaleSetSkuTypes.STANDARD_A0)
  370. .withExistingPrimaryNetworkSubnet(network, "subnet1")
  371. .withExistingPrimaryInternetFacingLoadBalancer(publicLoadBalancer)
  372. .withPrimaryInternetFacingLoadBalancerBackends(backends.get(0), backends.get(1))
  373. .withoutPrimaryInternalLoadBalancer()
  374. .withPopularLinuxImage(KnownLinuxVirtualMachineImage.UBUNTU_SERVER_16_04_LTS)
  375. .withRootUsername("jvuser")
  376. .withRootPassword("123OData!@#123")
  377. .withUnmanagedDisks()
  378. .withBootDiagnostics(
  379. creatableStorageAccount) // This storage account should be used for BDiagnostics not OS disk storage
  380. // account
  381. .create();
  382. Assertions.assertNotNull(virtualMachineScaleSet);
  383. Assertions.assertTrue(virtualMachineScaleSet.isBootDiagnosticsEnabled());
  384. Assertions.assertNotNull(virtualMachineScaleSet.bootDiagnosticsStorageUri());
  385. Assertions.assertTrue(virtualMachineScaleSet.bootDiagnosticsStorageUri().contains(storageName));
  386. // There should be a different storage account created for VMSS OS Disk
  387. VirtualMachineScaleSetInner inner = virtualMachineScaleSet.inner();
  388. Assertions.assertNotNull(inner);
  389. Assertions.assertNotNull(inner.virtualMachineProfile());
  390. Assertions.assertNotNull(inner.virtualMachineProfile().storageProfile());
  391. Assertions.assertNotNull(inner.virtualMachineProfile().storageProfile().osDisk());
  392. List<String> containers = inner.virtualMachineProfile().storageProfile().osDisk().vhdContainers();
  393. Assertions.assertFalse(containers.isEmpty());
  394. boolean notFound = true;
  395. for (String containerStorageUri : containers) {
  396. if (containerStorageUri
  397. .toLowerCase()
  398. .startsWith(virtualMachineScaleSet.bootDiagnosticsStorageUri().toLowerCase())) {
  399. notFound = false;
  400. break;
  401. }
  402. }
  403. Assertions.assertTrue(notFound);
  404. }
  405. }