github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/azurerm/resource_arm_managed_disk_test.go (about)

     1  package azurerm
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  	"testing"
     7  
     8  	"github.com/Azure/azure-sdk-for-go/arm/compute"
     9  	"github.com/Azure/azure-sdk-for-go/arm/disk"
    10  	"github.com/hashicorp/terraform/helper/acctest"
    11  	"github.com/hashicorp/terraform/helper/resource"
    12  	"github.com/hashicorp/terraform/terraform"
    13  )
    14  
    15  func TestAccAzureRMManagedDisk_empty(t *testing.T) {
    16  	var d disk.Model
    17  	ri := acctest.RandInt()
    18  	config := fmt.Sprintf(testAccAzureRMManagedDisk_empty, ri, ri)
    19  	resource.Test(t, resource.TestCase{
    20  		PreCheck:     func() { testAccPreCheck(t) },
    21  		Providers:    testAccProviders,
    22  		CheckDestroy: testCheckAzureRMManagedDiskDestroy,
    23  		Steps: []resource.TestStep{
    24  			{
    25  				Config: config,
    26  				Check: resource.ComposeTestCheckFunc(
    27  					testCheckAzureRMManagedDiskExists("azurerm_managed_disk.test", &d, true),
    28  				),
    29  			},
    30  		},
    31  	})
    32  }
    33  
    34  func TestAccAzureRMManagedDisk_import(t *testing.T) {
    35  	var d disk.Model
    36  	var vm compute.VirtualMachine
    37  	ri := acctest.RandInt()
    38  	vmConfig := fmt.Sprintf(testAccAzureRMVirtualMachine_basicLinuxMachine, ri, ri, ri, ri, ri, ri, ri)
    39  	config := fmt.Sprintf(testAccAzureRMManagedDisk_import, ri, ri, ri)
    40  	resource.Test(t, resource.TestCase{
    41  		PreCheck:     func() { testAccPreCheck(t) },
    42  		Providers:    testAccProviders,
    43  		CheckDestroy: testCheckAzureRMManagedDiskDestroy,
    44  		Steps: []resource.TestStep{
    45  			{
    46  				//need to create a vm and then delete it so we can use the vhd to test import
    47  				Config:             vmConfig,
    48  				Destroy:            false,
    49  				ExpectNonEmptyPlan: true,
    50  				Check: resource.ComposeTestCheckFunc(
    51  					testCheckAzureRMVirtualMachineExists("azurerm_virtual_machine.test", &vm),
    52  					testDeleteAzureRMVirtualMachine("azurerm_virtual_machine.test"),
    53  				),
    54  			},
    55  			{
    56  				Config: config,
    57  				Check: resource.ComposeTestCheckFunc(
    58  					testCheckAzureRMManagedDiskExists("azurerm_managed_disk.test", &d, true),
    59  				),
    60  			},
    61  		},
    62  	})
    63  }
    64  
    65  func TestAccAzureRMManagedDisk_copy(t *testing.T) {
    66  	var d disk.Model
    67  	ri := acctest.RandInt()
    68  	config := fmt.Sprintf(testAccAzureRMManagedDisk_copy, ri, ri, ri)
    69  	resource.Test(t, resource.TestCase{
    70  		PreCheck:     func() { testAccPreCheck(t) },
    71  		Providers:    testAccProviders,
    72  		CheckDestroy: testCheckAzureRMManagedDiskDestroy,
    73  		Steps: []resource.TestStep{
    74  			{
    75  				Config: config,
    76  				Check: resource.ComposeTestCheckFunc(
    77  					testCheckAzureRMManagedDiskExists("azurerm_managed_disk.test", &d, true),
    78  				),
    79  			},
    80  		},
    81  	})
    82  }
    83  
    84  func TestAccAzureRMManagedDisk_update(t *testing.T) {
    85  	var d disk.Model
    86  
    87  	ri := acctest.RandInt()
    88  	preConfig := fmt.Sprintf(testAccAzureRMManagedDisk_empty, ri, ri)
    89  	postConfig := fmt.Sprintf(testAccAzureRMManagedDisk_empty_updated, ri, ri)
    90  	resource.Test(t, resource.TestCase{
    91  		PreCheck:     func() { testAccPreCheck(t) },
    92  		Providers:    testAccProviders,
    93  		CheckDestroy: testCheckAzureRMManagedDiskDestroy,
    94  		Steps: []resource.TestStep{
    95  			{
    96  				Config: preConfig,
    97  				Check: resource.ComposeTestCheckFunc(
    98  					testCheckAzureRMManagedDiskExists("azurerm_managed_disk.test", &d, true),
    99  					resource.TestCheckResourceAttr(
   100  						"azurerm_managed_disk.test", "tags.%", "2"),
   101  					resource.TestCheckResourceAttr(
   102  						"azurerm_managed_disk.test", "tags.environment", "acctest"),
   103  					resource.TestCheckResourceAttr(
   104  						"azurerm_managed_disk.test", "tags.cost-center", "ops"),
   105  					resource.TestCheckResourceAttr(
   106  						"azurerm_managed_disk.test", "disk_size_gb", "1"),
   107  					resource.TestCheckResourceAttr(
   108  						"azurerm_managed_disk.test", "storage_account_type", string(disk.StandardLRS)),
   109  				),
   110  			},
   111  			{
   112  				Config: postConfig,
   113  				Check: resource.ComposeTestCheckFunc(
   114  					testCheckAzureRMManagedDiskExists("azurerm_managed_disk.test", &d, true),
   115  					resource.TestCheckResourceAttr(
   116  						"azurerm_managed_disk.test", "tags.%", "1"),
   117  					resource.TestCheckResourceAttr(
   118  						"azurerm_managed_disk.test", "tags.environment", "acctest"),
   119  					resource.TestCheckResourceAttr(
   120  						"azurerm_managed_disk.test", "disk_size_gb", "2"),
   121  					resource.TestCheckResourceAttr(
   122  						"azurerm_managed_disk.test", "storage_account_type", string(disk.PremiumLRS)),
   123  				),
   124  			},
   125  		},
   126  	})
   127  }
   128  
   129  func TestAccAzureRMManagedDisk_NonStandardCasing(t *testing.T) {
   130  	var d disk.Model
   131  	ri := acctest.RandInt()
   132  	config := testAccAzureRMManagedDiskNonStandardCasing(ri)
   133  	resource.Test(t, resource.TestCase{
   134  		PreCheck:     func() { testAccPreCheck(t) },
   135  		Providers:    testAccProviders,
   136  		CheckDestroy: testCheckAzureRMManagedDiskDestroy,
   137  		Steps: []resource.TestStep{
   138  			resource.TestStep{
   139  				Config: config,
   140  				Check: resource.ComposeTestCheckFunc(
   141  					testCheckAzureRMManagedDiskExists("azurerm_managed_disk.test", &d, true),
   142  				),
   143  			},
   144  			resource.TestStep{
   145  				Config:             config,
   146  				PlanOnly:           true,
   147  				ExpectNonEmptyPlan: false,
   148  			},
   149  		},
   150  	})
   151  }
   152  
   153  func testCheckAzureRMManagedDiskExists(name string, d *disk.Model, shouldExist bool) resource.TestCheckFunc {
   154  	return func(s *terraform.State) error {
   155  		rs, ok := s.RootModule().Resources[name]
   156  		if !ok {
   157  			return fmt.Errorf("Not found: %s", name)
   158  		}
   159  
   160  		dName := rs.Primary.Attributes["name"]
   161  		resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"]
   162  		if !hasResourceGroup {
   163  			return fmt.Errorf("Bad: no resource group found in state for disk: %s", dName)
   164  		}
   165  
   166  		conn := testAccProvider.Meta().(*ArmClient).diskClient
   167  
   168  		resp, err := conn.Get(resourceGroup, dName)
   169  		if err != nil {
   170  			return fmt.Errorf("Bad: Get on diskClient: %s", err)
   171  		}
   172  
   173  		if resp.StatusCode == http.StatusNotFound && shouldExist {
   174  			return fmt.Errorf("Bad: ManagedDisk %q (resource group %q) does not exist", dName, resourceGroup)
   175  		}
   176  		if resp.StatusCode != http.StatusNotFound && !shouldExist {
   177  			return fmt.Errorf("Bad: ManagedDisk %q (resource group %q) still exists", dName, resourceGroup)
   178  		}
   179  
   180  		*d = resp
   181  
   182  		return nil
   183  	}
   184  }
   185  
   186  func testCheckAzureRMManagedDiskDestroy(s *terraform.State) error {
   187  	conn := testAccProvider.Meta().(*ArmClient).diskClient
   188  
   189  	for _, rs := range s.RootModule().Resources {
   190  		if rs.Type != "azurerm_managed_disk" {
   191  			continue
   192  		}
   193  
   194  		name := rs.Primary.Attributes["name"]
   195  		resourceGroup := rs.Primary.Attributes["resource_group_name"]
   196  
   197  		resp, err := conn.Get(resourceGroup, name)
   198  
   199  		if err != nil {
   200  			return nil
   201  		}
   202  
   203  		if resp.StatusCode != http.StatusNotFound {
   204  			return fmt.Errorf("Managed Disk still exists: \n%#v", resp.Properties)
   205  		}
   206  	}
   207  
   208  	return nil
   209  }
   210  
   211  func testDeleteAzureRMVirtualMachine(name string) resource.TestCheckFunc {
   212  	return func(s *terraform.State) error {
   213  		rs, ok := s.RootModule().Resources[name]
   214  		if !ok {
   215  			return fmt.Errorf("Not found: %s", name)
   216  		}
   217  
   218  		vmName := rs.Primary.Attributes["name"]
   219  		resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"]
   220  		if !hasResourceGroup {
   221  			return fmt.Errorf("Bad: no resource group found in state for virtual machine: %s", vmName)
   222  		}
   223  
   224  		conn := testAccProvider.Meta().(*ArmClient).vmClient
   225  
   226  		_, error := conn.Delete(resourceGroup, vmName, make(chan struct{}))
   227  		err := <-error
   228  		if err != nil {
   229  			return fmt.Errorf("Bad: Delete on vmClient: %s", err)
   230  		}
   231  
   232  		return nil
   233  	}
   234  }
   235  
   236  var testAccAzureRMManagedDisk_empty = `
   237  resource "azurerm_resource_group" "test" {
   238      name = "acctestRG-%d"
   239      location = "West US 2"
   240  }
   241  
   242  resource "azurerm_managed_disk" "test" {
   243      name = "acctestd-%d"
   244      location = "West US 2"
   245      resource_group_name = "${azurerm_resource_group.test.name}"
   246      storage_account_type = "Standard_LRS"
   247      create_option = "Empty"
   248      disk_size_gb = "1"
   249  
   250      tags {
   251          environment = "acctest"
   252          cost-center = "ops"
   253      }
   254  }`
   255  
   256  var testAccAzureRMManagedDisk_import = `
   257  resource "azurerm_resource_group" "test" {
   258      name = "acctestRG-%d"
   259      location = "West US 2"
   260  }
   261  
   262  resource "azurerm_storage_account" "test" {
   263      name = "accsa%d"
   264      resource_group_name = "${azurerm_resource_group.test.name}"
   265      location = "West US 2"
   266      account_type = "Standard_LRS"
   267  
   268      tags {
   269          environment = "staging"
   270      }
   271  }
   272  
   273  resource "azurerm_storage_container" "test" {
   274      name = "vhds"
   275      resource_group_name = "${azurerm_resource_group.test.name}"
   276      storage_account_name = "${azurerm_storage_account.test.name}"
   277      container_access_type = "private"
   278  }
   279  
   280  resource "azurerm_managed_disk" "test" {
   281      name = "acctestd-%d"
   282      location = "West US 2"
   283      resource_group_name = "${azurerm_resource_group.test.name}"
   284      storage_account_type = "Standard_LRS"
   285      create_option = "Import"
   286      source_uri = "${azurerm_storage_account.test.primary_blob_endpoint}${azurerm_storage_container.test.name}/myosdisk1.vhd"
   287      disk_size_gb = "45"
   288  
   289      tags {
   290          environment = "acctest"
   291      }
   292  }`
   293  
   294  var testAccAzureRMManagedDisk_copy = `
   295  resource "azurerm_resource_group" "test" {
   296      name = "acctestRG-%d"
   297      location = "West US 2"
   298  }
   299  
   300  resource "azurerm_managed_disk" "source" {
   301      name = "acctestd1-%d"
   302      location = "West US 2"
   303      resource_group_name = "${azurerm_resource_group.test.name}"
   304      storage_account_type = "Standard_LRS"
   305      create_option = "Empty"
   306      disk_size_gb = "1"
   307  
   308      tags {
   309          environment = "acctest"
   310          cost-center = "ops"
   311      }
   312  }
   313  
   314  resource "azurerm_managed_disk" "test" {
   315      name = "acctestd2-%d"
   316      location = "West US 2"
   317      resource_group_name = "${azurerm_resource_group.test.name}"
   318      storage_account_type = "Standard_LRS"
   319      create_option = "Copy"
   320      source_resource_id = "${azurerm_managed_disk.source.id}"
   321      disk_size_gb = "1"
   322  
   323      tags {
   324          environment = "acctest"
   325          cost-center = "ops"
   326      }
   327  }`
   328  
   329  var testAccAzureRMManagedDisk_empty_updated = `
   330  resource "azurerm_resource_group" "test" {
   331      name = "acctestRG-%d"
   332      location = "West US 2"
   333  }
   334  
   335  resource "azurerm_managed_disk" "test" {
   336      name = "acctestd-%d"
   337      location = "West US 2"
   338      resource_group_name = "${azurerm_resource_group.test.name}"
   339      storage_account_type = "Premium_LRS"
   340      create_option = "Empty"
   341      disk_size_gb = "2"
   342  
   343      tags {
   344          environment = "acctest"
   345      }
   346  }`
   347  
   348  func testAccAzureRMManagedDiskNonStandardCasing(ri int) string {
   349  	return fmt.Sprintf(`
   350  resource "azurerm_resource_group" "test" {
   351      name = "acctestRG-%d"
   352      location = "West US 2"
   353  }
   354  resource "azurerm_managed_disk" "test" {
   355      name = "acctestd-%d"
   356      location = "West US 2"
   357      resource_group_name = "${azurerm_resource_group.test.name}"
   358      storage_account_type = "standard_lrs"
   359      create_option = "Empty"
   360      disk_size_gb = "1"
   361      tags {
   362          environment = "acctest"
   363          cost-center = "ops"
   364      }
   365  }`, ri, ri)
   366  }