github.com/keshavdv/terraform@v0.7.0-rc2.0.20160711232630-d69256dcb425/builtin/providers/google/resource_compute_instance_test.go (about) 1 package google 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 8 "github.com/hashicorp/terraform/helper/acctest" 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 "google.golang.org/api/compute/v1" 12 ) 13 14 func TestAccComputeInstance_basic_deprecated_network(t *testing.T) { 15 var instance compute.Instance 16 var instanceName = fmt.Sprintf("instance-test-%s", acctest.RandString(10)) 17 18 resource.Test(t, resource.TestCase{ 19 PreCheck: func() { testAccPreCheck(t) }, 20 Providers: testAccProviders, 21 CheckDestroy: testAccCheckComputeInstanceDestroy, 22 Steps: []resource.TestStep{ 23 resource.TestStep{ 24 Config: testAccComputeInstance_basic_deprecated_network(instanceName), 25 Check: resource.ComposeTestCheckFunc( 26 testAccCheckComputeInstanceExists( 27 "google_compute_instance.foobar", &instance), 28 testAccCheckComputeInstanceTag(&instance, "foo"), 29 testAccCheckComputeInstanceMetadata(&instance, "foo", "bar"), 30 testAccCheckComputeInstanceDisk(&instance, instanceName, true, true), 31 ), 32 }, 33 }, 34 }) 35 } 36 37 func TestAccComputeInstance_basic1(t *testing.T) { 38 var instance compute.Instance 39 var instanceName = fmt.Sprintf("instance-test-%s", acctest.RandString(10)) 40 41 resource.Test(t, resource.TestCase{ 42 PreCheck: func() { testAccPreCheck(t) }, 43 Providers: testAccProviders, 44 CheckDestroy: testAccCheckComputeInstanceDestroy, 45 Steps: []resource.TestStep{ 46 resource.TestStep{ 47 Config: testAccComputeInstance_basic(instanceName), 48 Check: resource.ComposeTestCheckFunc( 49 testAccCheckComputeInstanceExists( 50 "google_compute_instance.foobar", &instance), 51 testAccCheckComputeInstanceTag(&instance, "foo"), 52 testAccCheckComputeInstanceMetadata(&instance, "foo", "bar"), 53 testAccCheckComputeInstanceMetadata(&instance, "baz", "qux"), 54 testAccCheckComputeInstanceDisk(&instance, instanceName, true, true), 55 ), 56 }, 57 }, 58 }) 59 } 60 61 func TestAccComputeInstance_basic2(t *testing.T) { 62 var instance compute.Instance 63 var instanceName = fmt.Sprintf("instance-test-%s", acctest.RandString(10)) 64 65 resource.Test(t, resource.TestCase{ 66 PreCheck: func() { testAccPreCheck(t) }, 67 Providers: testAccProviders, 68 CheckDestroy: testAccCheckComputeInstanceDestroy, 69 Steps: []resource.TestStep{ 70 resource.TestStep{ 71 Config: testAccComputeInstance_basic2(instanceName), 72 Check: resource.ComposeTestCheckFunc( 73 testAccCheckComputeInstanceExists( 74 "google_compute_instance.foobar", &instance), 75 testAccCheckComputeInstanceTag(&instance, "foo"), 76 testAccCheckComputeInstanceMetadata(&instance, "foo", "bar"), 77 testAccCheckComputeInstanceDisk(&instance, instanceName, true, true), 78 ), 79 }, 80 }, 81 }) 82 } 83 84 func TestAccComputeInstance_basic3(t *testing.T) { 85 var instance compute.Instance 86 var instanceName = fmt.Sprintf("instance-test-%s", acctest.RandString(10)) 87 88 resource.Test(t, resource.TestCase{ 89 PreCheck: func() { testAccPreCheck(t) }, 90 Providers: testAccProviders, 91 CheckDestroy: testAccCheckComputeInstanceDestroy, 92 Steps: []resource.TestStep{ 93 resource.TestStep{ 94 Config: testAccComputeInstance_basic3(instanceName), 95 Check: resource.ComposeTestCheckFunc( 96 testAccCheckComputeInstanceExists( 97 "google_compute_instance.foobar", &instance), 98 testAccCheckComputeInstanceTag(&instance, "foo"), 99 testAccCheckComputeInstanceMetadata(&instance, "foo", "bar"), 100 testAccCheckComputeInstanceDisk(&instance, instanceName, true, true), 101 ), 102 }, 103 }, 104 }) 105 } 106 107 func TestAccComputeInstance_IP(t *testing.T) { 108 var instance compute.Instance 109 var ipName = fmt.Sprintf("instance-test-%s", acctest.RandString(10)) 110 var instanceName = fmt.Sprintf("instance-test-%s", acctest.RandString(10)) 111 112 resource.Test(t, resource.TestCase{ 113 PreCheck: func() { testAccPreCheck(t) }, 114 Providers: testAccProviders, 115 CheckDestroy: testAccCheckComputeInstanceDestroy, 116 Steps: []resource.TestStep{ 117 resource.TestStep{ 118 Config: testAccComputeInstance_ip(ipName, instanceName), 119 Check: resource.ComposeTestCheckFunc( 120 testAccCheckComputeInstanceExists( 121 "google_compute_instance.foobar", &instance), 122 testAccCheckComputeInstanceAccessConfigHasIP(&instance), 123 ), 124 }, 125 }, 126 }) 127 } 128 129 func TestAccComputeInstance_disksWithoutAutodelete(t *testing.T) { 130 var instance compute.Instance 131 var instanceName = fmt.Sprintf("instance-test-%s", acctest.RandString(10)) 132 var diskName = fmt.Sprintf("instance-testd-%s", acctest.RandString(10)) 133 134 resource.Test(t, resource.TestCase{ 135 PreCheck: func() { testAccPreCheck(t) }, 136 Providers: testAccProviders, 137 CheckDestroy: testAccCheckComputeInstanceDestroy, 138 Steps: []resource.TestStep{ 139 resource.TestStep{ 140 Config: testAccComputeInstance_disks(diskName, instanceName, false), 141 Check: resource.ComposeTestCheckFunc( 142 testAccCheckComputeInstanceExists( 143 "google_compute_instance.foobar", &instance), 144 testAccCheckComputeInstanceDisk(&instance, instanceName, true, true), 145 testAccCheckComputeInstanceDisk(&instance, diskName, false, false), 146 ), 147 }, 148 }, 149 }) 150 } 151 152 func TestAccComputeInstance_disksWithAutodelete(t *testing.T) { 153 var instance compute.Instance 154 var instanceName = fmt.Sprintf("instance-test-%s", acctest.RandString(10)) 155 var diskName = fmt.Sprintf("instance-testd-%s", acctest.RandString(10)) 156 157 resource.Test(t, resource.TestCase{ 158 PreCheck: func() { testAccPreCheck(t) }, 159 Providers: testAccProviders, 160 CheckDestroy: testAccCheckComputeInstanceDestroy, 161 Steps: []resource.TestStep{ 162 resource.TestStep{ 163 Config: testAccComputeInstance_disks(diskName, instanceName, true), 164 Check: resource.ComposeTestCheckFunc( 165 testAccCheckComputeInstanceExists( 166 "google_compute_instance.foobar", &instance), 167 testAccCheckComputeInstanceDisk(&instance, instanceName, true, true), 168 testAccCheckComputeInstanceDisk(&instance, diskName, true, false), 169 ), 170 }, 171 }, 172 }) 173 } 174 175 func TestAccComputeInstance_local_ssd(t *testing.T) { 176 var instance compute.Instance 177 var instanceName = fmt.Sprintf("instance-test-%s", acctest.RandString(10)) 178 179 resource.Test(t, resource.TestCase{ 180 PreCheck: func() { testAccPreCheck(t) }, 181 Providers: testAccProviders, 182 CheckDestroy: testAccCheckComputeInstanceDestroy, 183 Steps: []resource.TestStep{ 184 resource.TestStep{ 185 Config: testAccComputeInstance_local_ssd(instanceName), 186 Check: resource.ComposeTestCheckFunc( 187 testAccCheckComputeInstanceExists( 188 "google_compute_instance.local-ssd", &instance), 189 testAccCheckComputeInstanceDisk(&instance, instanceName, true, true), 190 ), 191 }, 192 }, 193 }) 194 } 195 196 func TestAccComputeInstance_update_deprecated_network(t *testing.T) { 197 var instance compute.Instance 198 var instanceName = fmt.Sprintf("instance-test-%s", acctest.RandString(10)) 199 200 resource.Test(t, resource.TestCase{ 201 PreCheck: func() { testAccPreCheck(t) }, 202 Providers: testAccProviders, 203 CheckDestroy: testAccCheckComputeInstanceDestroy, 204 Steps: []resource.TestStep{ 205 resource.TestStep{ 206 Config: testAccComputeInstance_basic_deprecated_network(instanceName), 207 Check: resource.ComposeTestCheckFunc( 208 testAccCheckComputeInstanceExists( 209 "google_compute_instance.foobar", &instance), 210 ), 211 }, 212 resource.TestStep{ 213 Config: testAccComputeInstance_update_deprecated_network(instanceName), 214 Check: resource.ComposeTestCheckFunc( 215 testAccCheckComputeInstanceExists( 216 "google_compute_instance.foobar", &instance), 217 testAccCheckComputeInstanceMetadata( 218 &instance, "bar", "baz"), 219 testAccCheckComputeInstanceTag(&instance, "baz"), 220 ), 221 }, 222 }, 223 }) 224 } 225 226 func TestAccComputeInstance_forceNewAndChangeMetadata(t *testing.T) { 227 var instance compute.Instance 228 var instanceName = fmt.Sprintf("instance-test-%s", acctest.RandString(10)) 229 230 resource.Test(t, resource.TestCase{ 231 PreCheck: func() { testAccPreCheck(t) }, 232 Providers: testAccProviders, 233 CheckDestroy: testAccCheckComputeInstanceDestroy, 234 Steps: []resource.TestStep{ 235 resource.TestStep{ 236 Config: testAccComputeInstance_basic(instanceName), 237 Check: resource.ComposeTestCheckFunc( 238 testAccCheckComputeInstanceExists( 239 "google_compute_instance.foobar", &instance), 240 ), 241 }, 242 resource.TestStep{ 243 Config: testAccComputeInstance_forceNewAndChangeMetadata(instanceName), 244 Check: resource.ComposeTestCheckFunc( 245 testAccCheckComputeInstanceExists( 246 "google_compute_instance.foobar", &instance), 247 testAccCheckComputeInstanceMetadata( 248 &instance, "qux", "true"), 249 ), 250 }, 251 }, 252 }) 253 } 254 255 func TestAccComputeInstance_update(t *testing.T) { 256 var instance compute.Instance 257 var instanceName = fmt.Sprintf("instance-test-%s", acctest.RandString(10)) 258 259 resource.Test(t, resource.TestCase{ 260 PreCheck: func() { testAccPreCheck(t) }, 261 Providers: testAccProviders, 262 CheckDestroy: testAccCheckComputeInstanceDestroy, 263 Steps: []resource.TestStep{ 264 resource.TestStep{ 265 Config: testAccComputeInstance_basic(instanceName), 266 Check: resource.ComposeTestCheckFunc( 267 testAccCheckComputeInstanceExists( 268 "google_compute_instance.foobar", &instance), 269 ), 270 }, 271 resource.TestStep{ 272 Config: testAccComputeInstance_update(instanceName), 273 Check: resource.ComposeTestCheckFunc( 274 testAccCheckComputeInstanceExists( 275 "google_compute_instance.foobar", &instance), 276 testAccCheckComputeInstanceMetadata( 277 &instance, "bar", "baz"), 278 testAccCheckComputeInstanceTag(&instance, "baz"), 279 testAccCheckComputeInstanceAccessConfig(&instance), 280 ), 281 }, 282 }, 283 }) 284 } 285 286 func TestAccComputeInstance_service_account(t *testing.T) { 287 var instance compute.Instance 288 var instanceName = fmt.Sprintf("instance-test-%s", acctest.RandString(10)) 289 290 resource.Test(t, resource.TestCase{ 291 PreCheck: func() { testAccPreCheck(t) }, 292 Providers: testAccProviders, 293 CheckDestroy: testAccCheckComputeInstanceDestroy, 294 Steps: []resource.TestStep{ 295 resource.TestStep{ 296 Config: testAccComputeInstance_service_account(instanceName), 297 Check: resource.ComposeTestCheckFunc( 298 testAccCheckComputeInstanceExists( 299 "google_compute_instance.foobar", &instance), 300 testAccCheckComputeInstanceServiceAccount(&instance, 301 "https://www.googleapis.com/auth/compute.readonly"), 302 testAccCheckComputeInstanceServiceAccount(&instance, 303 "https://www.googleapis.com/auth/devstorage.read_only"), 304 testAccCheckComputeInstanceServiceAccount(&instance, 305 "https://www.googleapis.com/auth/userinfo.email"), 306 ), 307 }, 308 }, 309 }) 310 } 311 312 func TestAccComputeInstance_scheduling(t *testing.T) { 313 var instance compute.Instance 314 var instanceName = fmt.Sprintf("instance-test-%s", acctest.RandString(10)) 315 316 resource.Test(t, resource.TestCase{ 317 PreCheck: func() { testAccPreCheck(t) }, 318 Providers: testAccProviders, 319 CheckDestroy: testAccCheckComputeInstanceDestroy, 320 Steps: []resource.TestStep{ 321 resource.TestStep{ 322 Config: testAccComputeInstance_scheduling(instanceName), 323 Check: resource.ComposeTestCheckFunc( 324 testAccCheckComputeInstanceExists( 325 "google_compute_instance.foobar", &instance), 326 ), 327 }, 328 }, 329 }) 330 } 331 332 func TestAccComputeInstance_subnet_auto(t *testing.T) { 333 var instance compute.Instance 334 var instanceName = fmt.Sprintf("instance-test-%s", acctest.RandString(10)) 335 336 resource.Test(t, resource.TestCase{ 337 PreCheck: func() { testAccPreCheck(t) }, 338 Providers: testAccProviders, 339 CheckDestroy: testAccCheckComputeInstanceDestroy, 340 Steps: []resource.TestStep{ 341 resource.TestStep{ 342 Config: testAccComputeInstance_subnet_auto(instanceName), 343 Check: resource.ComposeTestCheckFunc( 344 testAccCheckComputeInstanceExists( 345 "google_compute_instance.foobar", &instance), 346 testAccCheckComputeInstanceHasSubnet(&instance), 347 ), 348 }, 349 }, 350 }) 351 } 352 353 func TestAccComputeInstance_subnet_custom(t *testing.T) { 354 var instance compute.Instance 355 var instanceName = fmt.Sprintf("instance-test-%s", acctest.RandString(10)) 356 357 resource.Test(t, resource.TestCase{ 358 PreCheck: func() { testAccPreCheck(t) }, 359 Providers: testAccProviders, 360 CheckDestroy: testAccCheckComputeInstanceDestroy, 361 Steps: []resource.TestStep{ 362 resource.TestStep{ 363 Config: testAccComputeInstance_subnet_custom(instanceName), 364 Check: resource.ComposeTestCheckFunc( 365 testAccCheckComputeInstanceExists( 366 "google_compute_instance.foobar", &instance), 367 testAccCheckComputeInstanceHasSubnet(&instance), 368 ), 369 }, 370 }, 371 }) 372 } 373 374 func testAccCheckComputeInstanceDestroy(s *terraform.State) error { 375 config := testAccProvider.Meta().(*Config) 376 377 for _, rs := range s.RootModule().Resources { 378 if rs.Type != "google_compute_instance" { 379 continue 380 } 381 382 _, err := config.clientCompute.Instances.Get( 383 config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do() 384 if err == nil { 385 return fmt.Errorf("Instance still exists") 386 } 387 } 388 389 return nil 390 } 391 392 func testAccCheckComputeInstanceExists(n string, instance *compute.Instance) resource.TestCheckFunc { 393 return func(s *terraform.State) error { 394 rs, ok := s.RootModule().Resources[n] 395 if !ok { 396 return fmt.Errorf("Not found: %s", n) 397 } 398 399 if rs.Primary.ID == "" { 400 return fmt.Errorf("No ID is set") 401 } 402 403 config := testAccProvider.Meta().(*Config) 404 405 found, err := config.clientCompute.Instances.Get( 406 config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do() 407 if err != nil { 408 return err 409 } 410 411 if found.Name != rs.Primary.ID { 412 return fmt.Errorf("Instance not found") 413 } 414 415 *instance = *found 416 417 return nil 418 } 419 } 420 421 func testAccCheckComputeInstanceMetadata( 422 instance *compute.Instance, 423 k string, v string) resource.TestCheckFunc { 424 return func(s *terraform.State) error { 425 if instance.Metadata == nil { 426 return fmt.Errorf("no metadata") 427 } 428 429 for _, item := range instance.Metadata.Items { 430 if k != item.Key { 431 continue 432 } 433 434 if item.Value != nil && v == *item.Value { 435 return nil 436 } 437 438 return fmt.Errorf("bad value for %s: %s", k, *item.Value) 439 } 440 441 return fmt.Errorf("metadata not found: %s", k) 442 } 443 } 444 445 func testAccCheckComputeInstanceAccessConfig(instance *compute.Instance) resource.TestCheckFunc { 446 return func(s *terraform.State) error { 447 for _, i := range instance.NetworkInterfaces { 448 if len(i.AccessConfigs) == 0 { 449 return fmt.Errorf("no access_config") 450 } 451 } 452 453 return nil 454 } 455 } 456 457 func testAccCheckComputeInstanceAccessConfigHasIP(instance *compute.Instance) resource.TestCheckFunc { 458 return func(s *terraform.State) error { 459 for _, i := range instance.NetworkInterfaces { 460 for _, c := range i.AccessConfigs { 461 if c.NatIP == "" { 462 return fmt.Errorf("no NAT IP") 463 } 464 } 465 } 466 467 return nil 468 } 469 } 470 471 func testAccCheckComputeInstanceDisk(instance *compute.Instance, source string, delete bool, boot bool) resource.TestCheckFunc { 472 return func(s *terraform.State) error { 473 if instance.Disks == nil { 474 return fmt.Errorf("no disks") 475 } 476 477 for _, disk := range instance.Disks { 478 if strings.LastIndex(disk.Source, "/"+source) == len(disk.Source)-len(source)-1 && disk.AutoDelete == delete && disk.Boot == boot { 479 return nil 480 } 481 } 482 483 return fmt.Errorf("Disk not found: %s", source) 484 } 485 } 486 487 func testAccCheckComputeInstanceTag(instance *compute.Instance, n string) resource.TestCheckFunc { 488 return func(s *terraform.State) error { 489 if instance.Tags == nil { 490 return fmt.Errorf("no tags") 491 } 492 493 for _, k := range instance.Tags.Items { 494 if k == n { 495 return nil 496 } 497 } 498 499 return fmt.Errorf("tag not found: %s", n) 500 } 501 } 502 503 func testAccCheckComputeInstanceServiceAccount(instance *compute.Instance, scope string) resource.TestCheckFunc { 504 return func(s *terraform.State) error { 505 if count := len(instance.ServiceAccounts); count != 1 { 506 return fmt.Errorf("Wrong number of ServiceAccounts: expected 1, got %d", count) 507 } 508 509 for _, val := range instance.ServiceAccounts[0].Scopes { 510 if val == scope { 511 return nil 512 } 513 } 514 515 return fmt.Errorf("Scope not found: %s", scope) 516 } 517 } 518 519 func testAccCheckComputeInstanceHasSubnet(instance *compute.Instance) resource.TestCheckFunc { 520 return func(s *terraform.State) error { 521 for _, i := range instance.NetworkInterfaces { 522 if i.Subnetwork == "" { 523 return fmt.Errorf("no subnet") 524 } 525 } 526 527 return nil 528 } 529 } 530 531 func testAccComputeInstance_basic_deprecated_network(instance string) string { 532 return fmt.Sprintf(` 533 resource "google_compute_instance" "foobar" { 534 name = "%s" 535 machine_type = "n1-standard-1" 536 zone = "us-central1-a" 537 can_ip_forward = false 538 tags = ["foo", "bar"] 539 540 disk { 541 image = "debian-7-wheezy-v20160301" 542 } 543 544 network { 545 source = "default" 546 } 547 548 metadata { 549 foo = "bar" 550 } 551 }`, instance) 552 } 553 554 func testAccComputeInstance_update_deprecated_network(instance string) string { 555 return fmt.Sprintf(` 556 resource "google_compute_instance" "foobar" { 557 name = "%s" 558 machine_type = "n1-standard-1" 559 zone = "us-central1-a" 560 tags = ["baz"] 561 562 disk { 563 image = "debian-7-wheezy-v20160301" 564 } 565 566 network { 567 source = "default" 568 } 569 570 metadata { 571 bar = "baz" 572 } 573 }`, instance) 574 } 575 576 func testAccComputeInstance_basic(instance string) string { 577 return fmt.Sprintf(` 578 resource "google_compute_instance" "foobar" { 579 name = "%s" 580 machine_type = "n1-standard-1" 581 zone = "us-central1-a" 582 can_ip_forward = false 583 tags = ["foo", "bar"] 584 585 disk { 586 image = "debian-7-wheezy-v20160301" 587 } 588 589 network_interface { 590 network = "default" 591 } 592 593 metadata { 594 foo = "bar" 595 baz = "qux" 596 } 597 598 metadata_startup_script = "echo Hello" 599 }`, instance) 600 } 601 602 func testAccComputeInstance_basic2(instance string) string { 603 return fmt.Sprintf(` 604 resource "google_compute_instance" "foobar" { 605 name = "%s" 606 machine_type = "n1-standard-1" 607 zone = "us-central1-a" 608 can_ip_forward = false 609 tags = ["foo", "bar"] 610 611 disk { 612 image = "debian-cloud/debian-7-wheezy-v20160301" 613 } 614 615 network_interface { 616 network = "default" 617 } 618 619 620 metadata { 621 foo = "bar" 622 } 623 }`, instance) 624 } 625 626 func testAccComputeInstance_basic3(instance string) string { 627 return fmt.Sprintf(` 628 resource "google_compute_instance" "foobar" { 629 name = "%s" 630 machine_type = "n1-standard-1" 631 zone = "us-central1-a" 632 can_ip_forward = false 633 tags = ["foo", "bar"] 634 635 disk { 636 image = "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20160301" 637 } 638 639 network_interface { 640 network = "default" 641 } 642 643 metadata { 644 foo = "bar" 645 } 646 }`, instance) 647 } 648 649 // Update zone to ForceNew, and change metadata k/v entirely 650 // Generates diff mismatch 651 func testAccComputeInstance_forceNewAndChangeMetadata(instance string) string { 652 return fmt.Sprintf(` 653 resource "google_compute_instance" "foobar" { 654 name = "%s" 655 machine_type = "n1-standard-1" 656 zone = "us-central1-a" 657 zone = "us-central1-b" 658 tags = ["baz"] 659 660 disk { 661 image = "debian-7-wheezy-v20160301" 662 } 663 664 network_interface { 665 network = "default" 666 access_config { } 667 } 668 669 metadata { 670 qux = "true" 671 } 672 }`, instance) 673 } 674 675 // Update metadata, tags, and network_interface 676 func testAccComputeInstance_update(instance string) string { 677 return fmt.Sprintf(` 678 resource "google_compute_instance" "foobar" { 679 name = "%s" 680 machine_type = "n1-standard-1" 681 zone = "us-central1-a" 682 tags = ["baz"] 683 684 disk { 685 image = "debian-7-wheezy-v20160301" 686 } 687 688 network_interface { 689 network = "default" 690 access_config { } 691 } 692 693 metadata { 694 bar = "baz" 695 } 696 }`, instance) 697 } 698 699 func testAccComputeInstance_ip(ip, instance string) string { 700 return fmt.Sprintf(` 701 resource "google_compute_address" "foo" { 702 name = "%s" 703 } 704 705 resource "google_compute_instance" "foobar" { 706 name = "%s" 707 machine_type = "n1-standard-1" 708 zone = "us-central1-a" 709 tags = ["foo", "bar"] 710 711 disk { 712 image = "debian-7-wheezy-v20160301" 713 } 714 715 network_interface { 716 network = "default" 717 access_config { 718 nat_ip = "${google_compute_address.foo.address}" 719 } 720 } 721 722 metadata { 723 foo = "bar" 724 } 725 }`, ip, instance) 726 } 727 728 func testAccComputeInstance_disks(disk, instance string, autodelete bool) string { 729 return fmt.Sprintf(` 730 resource "google_compute_disk" "foobar" { 731 name = "%s" 732 size = 10 733 type = "pd-ssd" 734 zone = "us-central1-a" 735 } 736 737 resource "google_compute_instance" "foobar" { 738 name = "%s" 739 machine_type = "n1-standard-1" 740 zone = "us-central1-a" 741 742 disk { 743 image = "debian-7-wheezy-v20160301" 744 } 745 746 disk { 747 disk = "${google_compute_disk.foobar.name}" 748 auto_delete = %v 749 } 750 751 network_interface { 752 network = "default" 753 } 754 755 metadata { 756 foo = "bar" 757 } 758 }`, disk, instance, autodelete) 759 } 760 761 func testAccComputeInstance_local_ssd(instance string) string { 762 return fmt.Sprintf(` 763 resource "google_compute_instance" "local-ssd" { 764 name = "%s" 765 machine_type = "n1-standard-1" 766 zone = "us-central1-a" 767 768 disk { 769 image = "debian-7-wheezy-v20160301" 770 } 771 772 disk { 773 type = "local-ssd" 774 scratch = true 775 } 776 777 network_interface { 778 network = "default" 779 } 780 781 }`, instance) 782 } 783 784 func testAccComputeInstance_service_account(instance string) string { 785 return fmt.Sprintf(` 786 resource "google_compute_instance" "foobar" { 787 name = "%s" 788 machine_type = "n1-standard-1" 789 zone = "us-central1-a" 790 791 disk { 792 image = "debian-7-wheezy-v20160301" 793 } 794 795 network_interface { 796 network = "default" 797 } 798 799 service_account { 800 scopes = [ 801 "userinfo-email", 802 "compute-ro", 803 "storage-ro", 804 ] 805 } 806 }`, instance) 807 } 808 809 func testAccComputeInstance_scheduling(instance string) string { 810 return fmt.Sprintf(` 811 resource "google_compute_instance" "foobar" { 812 name = "%s" 813 machine_type = "n1-standard-1" 814 zone = "us-central1-a" 815 816 disk { 817 image = "debian-7-wheezy-v20160301" 818 } 819 820 network_interface { 821 network = "default" 822 } 823 824 scheduling { 825 } 826 }`, instance) 827 } 828 829 func testAccComputeInstance_subnet_auto(instance string) string { 830 return fmt.Sprintf(` 831 resource "google_compute_network" "inst-test-network" { 832 name = "inst-test-network-%s" 833 auto_create_subnetworks = true 834 } 835 836 resource "google_compute_instance" "foobar" { 837 name = "%s" 838 machine_type = "n1-standard-1" 839 zone = "us-central1-a" 840 841 disk { 842 image = "debian-7-wheezy-v20160301" 843 } 844 845 network_interface { 846 network = "${google_compute_network.inst-test-network.name}" 847 access_config { } 848 } 849 850 }`, acctest.RandString(10), instance) 851 } 852 853 func testAccComputeInstance_subnet_custom(instance string) string { 854 return fmt.Sprintf(` 855 resource "google_compute_network" "inst-test-network" { 856 name = "inst-test-network-%s" 857 auto_create_subnetworks = false 858 } 859 860 resource "google_compute_subnetwork" "inst-test-subnetwork" { 861 name = "inst-test-subnetwork-%s" 862 ip_cidr_range = "10.0.0.0/16" 863 region = "us-central1" 864 network = "${google_compute_network.inst-test-network.self_link}" 865 } 866 867 resource "google_compute_instance" "foobar" { 868 name = "%s" 869 machine_type = "n1-standard-1" 870 zone = "us-central1-a" 871 872 disk { 873 image = "debian-7-wheezy-v20160301" 874 } 875 876 network_interface { 877 subnetwork = "${google_compute_subnetwork.inst-test-subnetwork.name}" 878 access_config { } 879 } 880 881 }`, acctest.RandString(10), acctest.RandString(10), instance) 882 }