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