github.com/rliebz/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/azurerm/resource_arm_virtual_machine_scale_set_test.go (about) 1 package azurerm 2 3 import ( 4 "fmt" 5 "net/http" 6 "testing" 7 8 "github.com/hashicorp/terraform/helper/acctest" 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 ) 12 13 func TestAccAzureRMVirtualMachineScaleSet_basicLinux(t *testing.T) { 14 ri := acctest.RandInt() 15 config := fmt.Sprintf(testAccAzureRMVirtualMachineScaleSet_basicLinux, ri, ri, ri, ri, ri, ri, ri, ri) 16 resource.Test(t, resource.TestCase{ 17 PreCheck: func() { testAccPreCheck(t) }, 18 Providers: testAccProviders, 19 CheckDestroy: testCheckAzureRMVirtualMachineScaleSetDestroy, 20 Steps: []resource.TestStep{ 21 { 22 Config: config, 23 Check: resource.ComposeTestCheckFunc( 24 testCheckAzureRMVirtualMachineScaleSetExists("azurerm_virtual_machine_scale_set.test"), 25 ), 26 }, 27 }, 28 }) 29 } 30 31 func TestAccAzureRMVirtualMachineScaleSet_basicLinux_disappears(t *testing.T) { 32 ri := acctest.RandInt() 33 config := fmt.Sprintf(testAccAzureRMVirtualMachineScaleSet_basicLinux, ri, ri, ri, ri, ri, ri, ri, ri) 34 resource.Test(t, resource.TestCase{ 35 PreCheck: func() { testAccPreCheck(t) }, 36 Providers: testAccProviders, 37 CheckDestroy: testCheckAzureRMVirtualMachineScaleSetDestroy, 38 Steps: []resource.TestStep{ 39 { 40 Config: config, 41 Check: resource.ComposeTestCheckFunc( 42 testCheckAzureRMVirtualMachineScaleSetExists("azurerm_virtual_machine_scale_set.test"), 43 testCheckAzureRMVirtualMachineScaleSetDisappears("azurerm_virtual_machine_scale_set.test"), 44 ), 45 ExpectNonEmptyPlan: true, 46 }, 47 }, 48 }) 49 } 50 51 func TestAccAzureRMVirtualMachineScaleSet_loadBalancer(t *testing.T) { 52 ri := acctest.RandInt() 53 config := fmt.Sprintf(testAccAzureRMVirtualMachineScaleSetLoadbalancerTemplate, ri, ri, ri, ri, ri, ri, ri) 54 resource.Test(t, resource.TestCase{ 55 PreCheck: func() { testAccPreCheck(t) }, 56 Providers: testAccProviders, 57 CheckDestroy: testCheckAzureRMVirtualMachineScaleSetDestroy, 58 Steps: []resource.TestStep{ 59 { 60 Config: config, 61 Check: resource.ComposeTestCheckFunc( 62 testCheckAzureRMVirtualMachineScaleSetExists("azurerm_virtual_machine_scale_set.test"), 63 testCheckAzureRMVirtualMachineScaleSetHasLoadbalancer("azurerm_virtual_machine_scale_set.test"), 64 ), 65 }, 66 }, 67 }) 68 } 69 70 func TestAccAzureRMVirtualMachineScaleSet_overprovision(t *testing.T) { 71 ri := acctest.RandInt() 72 config := fmt.Sprintf(testAccAzureRMVirtualMachineScaleSetOverprovisionTemplate, ri, ri, ri, ri, ri, ri) 73 resource.Test(t, resource.TestCase{ 74 PreCheck: func() { testAccPreCheck(t) }, 75 Providers: testAccProviders, 76 CheckDestroy: testCheckAzureRMVirtualMachineScaleSetDestroy, 77 Steps: []resource.TestStep{ 78 { 79 Config: config, 80 Check: resource.ComposeTestCheckFunc( 81 testCheckAzureRMVirtualMachineScaleSetExists("azurerm_virtual_machine_scale_set.test"), 82 testCheckAzureRMVirtualMachineScaleSetOverprovision("azurerm_virtual_machine_scale_set.test"), 83 ), 84 }, 85 }, 86 }) 87 } 88 89 func testCheckAzureRMVirtualMachineScaleSetExists(name string) resource.TestCheckFunc { 90 return func(s *terraform.State) error { 91 // Ensure we have enough information in state to look up in API 92 rs, ok := s.RootModule().Resources[name] 93 if !ok { 94 return fmt.Errorf("Not found: %s", name) 95 } 96 97 name := rs.Primary.Attributes["name"] 98 resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"] 99 if !hasResourceGroup { 100 return fmt.Errorf("Bad: no resource group found in state for virtual machine: scale set %s", name) 101 } 102 103 conn := testAccProvider.Meta().(*ArmClient).vmScaleSetClient 104 105 resp, err := conn.Get(resourceGroup, name) 106 if err != nil { 107 return fmt.Errorf("Bad: Get on vmScaleSetClient: %s", err) 108 } 109 110 if resp.StatusCode == http.StatusNotFound { 111 return fmt.Errorf("Bad: VirtualMachineScaleSet %q (resource group: %q) does not exist", name, resourceGroup) 112 } 113 114 return nil 115 } 116 } 117 118 func testCheckAzureRMVirtualMachineScaleSetDisappears(name string) resource.TestCheckFunc { 119 return func(s *terraform.State) error { 120 // Ensure we have enough information in state to look up in API 121 rs, ok := s.RootModule().Resources[name] 122 if !ok { 123 return fmt.Errorf("Not found: %s", name) 124 } 125 126 name := rs.Primary.Attributes["name"] 127 resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"] 128 if !hasResourceGroup { 129 return fmt.Errorf("Bad: no resource group found in state for virtual machine: scale set %s", name) 130 } 131 132 conn := testAccProvider.Meta().(*ArmClient).vmScaleSetClient 133 134 _, err := conn.Delete(resourceGroup, name, make(chan struct{})) 135 if err != nil { 136 return fmt.Errorf("Bad: Delete on vmScaleSetClient: %s", err) 137 } 138 139 return nil 140 } 141 } 142 143 func testCheckAzureRMVirtualMachineScaleSetDestroy(s *terraform.State) error { 144 conn := testAccProvider.Meta().(*ArmClient).vmScaleSetClient 145 146 for _, rs := range s.RootModule().Resources { 147 if rs.Type != "azurerm_virtual_machine_scale_set" { 148 continue 149 } 150 151 name := rs.Primary.Attributes["name"] 152 resourceGroup := rs.Primary.Attributes["resource_group_name"] 153 154 resp, err := conn.Get(resourceGroup, name) 155 156 if err != nil { 157 return nil 158 } 159 160 if resp.StatusCode != http.StatusNotFound { 161 return fmt.Errorf("Virtual Machine Scale Set still exists:\n%#v", resp.VirtualMachineScaleSetProperties) 162 } 163 } 164 165 return nil 166 } 167 168 func testCheckAzureRMVirtualMachineScaleSetHasLoadbalancer(name string) resource.TestCheckFunc { 169 return func(s *terraform.State) error { 170 // Ensure we have enough information in state to look up in API 171 rs, ok := s.RootModule().Resources[name] 172 if !ok { 173 return fmt.Errorf("Not found: %s", name) 174 } 175 176 name := rs.Primary.Attributes["name"] 177 resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"] 178 if !hasResourceGroup { 179 return fmt.Errorf("Bad: no resource group found in state for virtual machine: scale set %s", name) 180 } 181 182 conn := testAccProvider.Meta().(*ArmClient).vmScaleSetClient 183 resp, err := conn.Get(resourceGroup, name) 184 if err != nil { 185 return fmt.Errorf("Bad: Get on vmScaleSetClient: %s", err) 186 } 187 188 if resp.StatusCode == http.StatusNotFound { 189 return fmt.Errorf("Bad: VirtualMachineScaleSet %q (resource group: %q) does not exist", name, resourceGroup) 190 } 191 192 n := resp.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations 193 if n == nil || len(*n) == 0 { 194 return fmt.Errorf("Bad: Could not get network interface configurations for scale set %v", name) 195 } 196 197 ip := (*n)[0].IPConfigurations 198 if ip == nil || len(*ip) == 0 { 199 return fmt.Errorf("Bad: Could not get ip configurations for scale set %v", name) 200 } 201 202 pools := (*ip)[0].LoadBalancerBackendAddressPools 203 if pools == nil || len(*pools) == 0 { 204 return fmt.Errorf("Bad: Load balancer backend pools is empty for scale set %v", name) 205 } 206 207 return nil 208 } 209 } 210 211 func testCheckAzureRMVirtualMachineScaleSetOverprovision(name string) resource.TestCheckFunc { 212 return func(s *terraform.State) error { 213 // Ensure we have enough information in state to look up in API 214 rs, ok := s.RootModule().Resources[name] 215 if !ok { 216 return fmt.Errorf("Not found: %s", name) 217 } 218 219 name := rs.Primary.Attributes["name"] 220 resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"] 221 if !hasResourceGroup { 222 return fmt.Errorf("Bad: no resource group found in state for virtual machine: scale set %s", name) 223 } 224 225 conn := testAccProvider.Meta().(*ArmClient).vmScaleSetClient 226 resp, err := conn.Get(resourceGroup, name) 227 if err != nil { 228 return fmt.Errorf("Bad: Get on vmScaleSetClient: %s", err) 229 } 230 231 if resp.StatusCode == http.StatusNotFound { 232 return fmt.Errorf("Bad: VirtualMachineScaleSet %q (resource group: %q) does not exist", name, resourceGroup) 233 } 234 235 if *resp.Overprovision { 236 return fmt.Errorf("Bad: Overprovision should have been false for scale set %v", name) 237 } 238 239 return nil 240 } 241 } 242 243 var testAccAzureRMVirtualMachineScaleSet_basicLinux = ` 244 resource "azurerm_resource_group" "test" { 245 name = "acctestRG-%d" 246 location = "West US" 247 } 248 249 resource "azurerm_virtual_network" "test" { 250 name = "acctvn-%d" 251 address_space = ["10.0.0.0/16"] 252 location = "West US" 253 resource_group_name = "${azurerm_resource_group.test.name}" 254 } 255 256 resource "azurerm_subnet" "test" { 257 name = "acctsub-%d" 258 resource_group_name = "${azurerm_resource_group.test.name}" 259 virtual_network_name = "${azurerm_virtual_network.test.name}" 260 address_prefix = "10.0.2.0/24" 261 } 262 263 resource "azurerm_network_interface" "test" { 264 name = "acctni-%d" 265 location = "West US" 266 resource_group_name = "${azurerm_resource_group.test.name}" 267 268 ip_configuration { 269 name = "testconfiguration1" 270 subnet_id = "${azurerm_subnet.test.id}" 271 private_ip_address_allocation = "dynamic" 272 } 273 } 274 275 resource "azurerm_storage_account" "test" { 276 name = "accsa%d" 277 resource_group_name = "${azurerm_resource_group.test.name}" 278 location = "westus" 279 account_type = "Standard_LRS" 280 281 tags { 282 environment = "staging" 283 } 284 } 285 286 resource "azurerm_storage_container" "test" { 287 name = "vhds" 288 resource_group_name = "${azurerm_resource_group.test.name}" 289 storage_account_name = "${azurerm_storage_account.test.name}" 290 container_access_type = "private" 291 } 292 293 resource "azurerm_virtual_machine_scale_set" "test" { 294 name = "acctvmss-%d" 295 location = "West US" 296 resource_group_name = "${azurerm_resource_group.test.name}" 297 upgrade_policy_mode = "Manual" 298 299 sku { 300 name = "Standard_A0" 301 tier = "Standard" 302 capacity = 2 303 } 304 305 os_profile { 306 computer_name_prefix = "testvm-%d" 307 admin_username = "myadmin" 308 admin_password = "Passwword1234" 309 } 310 311 network_profile { 312 name = "TestNetworkProfile-%d" 313 primary = true 314 ip_configuration { 315 name = "TestIPConfiguration" 316 subnet_id = "${azurerm_subnet.test.id}" 317 } 318 } 319 320 storage_profile_os_disk { 321 name = "osDiskProfile" 322 caching = "ReadWrite" 323 create_option = "FromImage" 324 vhd_containers = ["${azurerm_storage_account.test.primary_blob_endpoint}${azurerm_storage_container.test.name}"] 325 } 326 327 storage_profile_image_reference { 328 publisher = "Canonical" 329 offer = "UbuntuServer" 330 sku = "14.04.2-LTS" 331 version = "latest" 332 } 333 } 334 ` 335 336 var testAccAzureRMVirtualMachineScaleSetLoadbalancerTemplate = ` 337 resource "azurerm_resource_group" "test" { 338 name = "acctestrg-%d" 339 location = "southcentralus" 340 } 341 342 resource "azurerm_virtual_network" "test" { 343 name = "acctvn-%d" 344 address_space = ["10.0.0.0/16"] 345 location = "southcentralus" 346 resource_group_name = "${azurerm_resource_group.test.name}" 347 } 348 349 resource "azurerm_subnet" "test" { 350 name = "acctsub-%d" 351 resource_group_name = "${azurerm_resource_group.test.name}" 352 virtual_network_name = "${azurerm_virtual_network.test.name}" 353 address_prefix = "10.0.2.0/24" 354 } 355 356 resource "azurerm_storage_account" "test" { 357 name = "accsa%d" 358 resource_group_name = "${azurerm_resource_group.test.name}" 359 location = "southcentralus" 360 account_type = "Standard_LRS" 361 } 362 363 resource "azurerm_storage_container" "test" { 364 name = "vhds" 365 resource_group_name = "${azurerm_resource_group.test.name}" 366 storage_account_name = "${azurerm_storage_account.test.name}" 367 container_access_type = "private" 368 } 369 370 resource "azurerm_lb" "test" { 371 name = "acctestlb-%d" 372 location = "southcentralus" 373 resource_group_name = "${azurerm_resource_group.test.name}" 374 375 frontend_ip_configuration { 376 name = "default" 377 subnet_id = "${azurerm_subnet.test.id}" 378 private_ip_address_allocation = "Dynamic" 379 } 380 } 381 382 resource "azurerm_lb_backend_address_pool" "test" { 383 name = "test" 384 resource_group_name = "${azurerm_resource_group.test.name}" 385 location = "southcentralus" 386 loadbalancer_id = "${azurerm_lb.test.id}" 387 } 388 389 resource "azurerm_virtual_machine_scale_set" "test" { 390 name = "acctvmss-%d" 391 location = "southcentralus" 392 resource_group_name = "${azurerm_resource_group.test.name}" 393 upgrade_policy_mode = "Manual" 394 395 sku { 396 name = "Standard_A0" 397 tier = "Standard" 398 capacity = 1 399 } 400 401 os_profile { 402 computer_name_prefix = "testvm-%d" 403 admin_username = "myadmin" 404 admin_password = "Passwword1234" 405 } 406 407 network_profile { 408 name = "TestNetworkProfile" 409 primary = true 410 ip_configuration { 411 name = "TestIPConfiguration" 412 subnet_id = "${azurerm_subnet.test.id}" 413 load_balancer_backend_address_pool_ids = [ "${azurerm_lb_backend_address_pool.test.id}" ] 414 } 415 } 416 417 storage_profile_os_disk { 418 name = "os-disk" 419 caching = "ReadWrite" 420 create_option = "FromImage" 421 vhd_containers = [ "${azurerm_storage_account.test.primary_blob_endpoint}${azurerm_storage_container.test.name}" ] 422 } 423 424 storage_profile_image_reference { 425 publisher = "Canonical" 426 offer = "UbuntuServer" 427 sku = "14.04.2-LTS" 428 version = "latest" 429 } 430 } 431 ` 432 433 var testAccAzureRMVirtualMachineScaleSetOverprovisionTemplate = ` 434 resource "azurerm_resource_group" "test" { 435 name = "acctestrg-%d" 436 location = "southcentralus" 437 } 438 439 resource "azurerm_virtual_network" "test" { 440 name = "acctvn-%d" 441 address_space = ["10.0.0.0/16"] 442 location = "southcentralus" 443 resource_group_name = "${azurerm_resource_group.test.name}" 444 } 445 446 resource "azurerm_subnet" "test" { 447 name = "acctsub-%d" 448 resource_group_name = "${azurerm_resource_group.test.name}" 449 virtual_network_name = "${azurerm_virtual_network.test.name}" 450 address_prefix = "10.0.2.0/24" 451 } 452 453 resource "azurerm_storage_account" "test" { 454 name = "accsa%d" 455 resource_group_name = "${azurerm_resource_group.test.name}" 456 location = "southcentralus" 457 account_type = "Standard_LRS" 458 } 459 460 resource "azurerm_storage_container" "test" { 461 name = "vhds" 462 resource_group_name = "${azurerm_resource_group.test.name}" 463 storage_account_name = "${azurerm_storage_account.test.name}" 464 container_access_type = "private" 465 } 466 467 resource "azurerm_virtual_machine_scale_set" "test" { 468 name = "acctvmss-%d" 469 location = "southcentralus" 470 resource_group_name = "${azurerm_resource_group.test.name}" 471 upgrade_policy_mode = "Manual" 472 overprovision = false 473 474 sku { 475 name = "Standard_A0" 476 tier = "Standard" 477 capacity = 1 478 } 479 480 os_profile { 481 computer_name_prefix = "testvm-%d" 482 admin_username = "myadmin" 483 admin_password = "Passwword1234" 484 } 485 486 network_profile { 487 name = "TestNetworkProfile" 488 primary = true 489 ip_configuration { 490 name = "TestIPConfiguration" 491 subnet_id = "${azurerm_subnet.test.id}" 492 } 493 } 494 495 storage_profile_os_disk { 496 name = "os-disk" 497 caching = "ReadWrite" 498 create_option = "FromImage" 499 vhd_containers = [ "${azurerm_storage_account.test.primary_blob_endpoint}${azurerm_storage_container.test.name}" ] 500 } 501 502 storage_profile_image_reference { 503 publisher = "Canonical" 504 offer = "UbuntuServer" 505 sku = "14.04.2-LTS" 506 version = "latest" 507 } 508 } 509 `