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 }