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  `