@@ -547,6 +547,66 @@ func TestAccComputeInstance_invalid_disk(t *testing.T) {
547547 })
548548}
549549
550+ func TestAccComputeInstance_forceChangeMachineTypeManually (t * testing.T ) {
551+ var instance compute.Instance
552+ var instanceName = fmt .Sprintf ("instance-test-%s" , acctest .RandString (10 ))
553+
554+ resource .Test (t , resource.TestCase {
555+ PreCheck : func () { testAccPreCheck (t ) },
556+ Providers : testAccProviders ,
557+ CheckDestroy : testAccCheckComputeInstanceDestroy ,
558+ Steps : []resource.TestStep {
559+ resource.TestStep {
560+ Config : testAccComputeInstance_basic (instanceName ),
561+ Check : resource .ComposeTestCheckFunc (
562+ testAccCheckComputeInstanceExists ("google_compute_instance.foobar" , & instance ),
563+ testAccCheckComputeInstanceUpdateMachineType ("google_compute_instance.foobar" ),
564+ ),
565+ ExpectNonEmptyPlan : true ,
566+ },
567+ },
568+ })
569+ }
570+
571+ func testAccCheckComputeInstanceUpdateMachineType (n string ) resource.TestCheckFunc {
572+ return func (s * terraform.State ) error {
573+ rs , ok := s .RootModule ().Resources [n ]
574+ if ! ok {
575+ return fmt .Errorf ("Not found: %s" , n )
576+ }
577+
578+ if rs .Primary .ID == "" {
579+ return fmt .Errorf ("No ID is set" )
580+ }
581+
582+ config := testAccProvider .Meta ().(* Config )
583+
584+ op , err := config .clientCompute .Instances .Stop (config .Project , rs .Primary .Attributes ["zone" ], rs .Primary .ID ).Do ()
585+ if err != nil {
586+ return fmt .Errorf ("Could not stop instance: %s" , err )
587+ }
588+ err = computeOperationWaitZone (config , op , config .Project , rs .Primary .Attributes ["zone" ], "Waiting on stop" )
589+ if err != nil {
590+ return fmt .Errorf ("Could not stop instance: %s" , err )
591+ }
592+
593+ machineType := compute.InstancesSetMachineTypeRequest {
594+ MachineType : "zones/us-central1-a/machineTypes/f1-micro" ,
595+ }
596+
597+ op , err = config .clientCompute .Instances .SetMachineType (
598+ config .Project , rs .Primary .Attributes ["zone" ], rs .Primary .ID , & machineType ).Do ()
599+ if err != nil {
600+ return fmt .Errorf ("Could not change machine type: %s" , err )
601+ }
602+ err = computeOperationWaitZone (config , op , config .Project , rs .Primary .Attributes ["zone" ], "Waiting machine type change" )
603+ if err != nil {
604+ return fmt .Errorf ("Could not change machine type: %s" , err )
605+ }
606+ return nil
607+ }
608+ }
609+
550610func testAccCheckComputeInstanceDestroy (s * terraform.State ) error {
551611 config := testAccProvider .Meta ().(* Config )
552612
0 commit comments