github.com/acm1/terraform@v0.6.2-0.20150729164239-1f314444f45c/builtin/providers/google/resource_compute_instance_group_manager_test.go (about)

     1  package google
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"google.golang.org/api/compute/v1"
     8  
     9  	"github.com/hashicorp/terraform/helper/resource"
    10  	"github.com/hashicorp/terraform/terraform"
    11  )
    12  
    13  func TestAccInstanceGroupManager_basic(t *testing.T) {
    14  	var manager compute.InstanceGroupManager
    15  
    16  	resource.Test(t, resource.TestCase{
    17  		PreCheck:     func() { testAccPreCheck(t) },
    18  		Providers:    testAccProviders,
    19  		CheckDestroy: testAccCheckInstanceGroupManagerDestroy,
    20  		Steps: []resource.TestStep{
    21  			resource.TestStep{
    22  				Config: testAccInstanceGroupManager_basic,
    23  				Check: resource.ComposeTestCheckFunc(
    24  					testAccCheckInstanceGroupManagerExists(
    25  						"google_compute_instance_group_manager.igm-basic", &manager),
    26  				),
    27  			},
    28  		},
    29  	})
    30  }
    31  
    32  func TestAccInstanceGroupManager_update(t *testing.T) {
    33  	var manager compute.InstanceGroupManager
    34  
    35  	resource.Test(t, resource.TestCase{
    36  		PreCheck:     func() { testAccPreCheck(t) },
    37  		Providers:    testAccProviders,
    38  		CheckDestroy: testAccCheckInstanceGroupManagerDestroy,
    39  		Steps: []resource.TestStep{
    40  			resource.TestStep{
    41  				Config: testAccInstanceGroupManager_update,
    42  				Check: resource.ComposeTestCheckFunc(
    43  					testAccCheckInstanceGroupManagerExists(
    44  						"google_compute_instance_group_manager.igm-update", &manager),
    45  				),
    46  			},
    47  			resource.TestStep{
    48  				Config: testAccInstanceGroupManager_update2,
    49  				Check: resource.ComposeTestCheckFunc(
    50  					testAccCheckInstanceGroupManagerExists(
    51  						"google_compute_instance_group_manager.igm-update", &manager),
    52  					testAccCheckInstanceGroupManagerUpdated(
    53  						"google_compute_instance_group_manager.igm-update", 3,
    54  						"google_compute_target_pool.igm-update", "terraform-test-igm-update2"),
    55  				),
    56  			},
    57  		},
    58  	})
    59  }
    60  
    61  func testAccCheckInstanceGroupManagerDestroy(s *terraform.State) error {
    62  	config := testAccProvider.Meta().(*Config)
    63  
    64  	for _, rs := range s.RootModule().Resources {
    65  		if rs.Type != "google_compute_instance_group_manager" {
    66  			continue
    67  		}
    68  		_, err := config.clientCompute.InstanceGroupManagers.Get(
    69  			config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do()
    70  		if err != nil {
    71  			return fmt.Errorf("InstanceGroupManager still exists")
    72  		}
    73  	}
    74  
    75  	return nil
    76  }
    77  
    78  func testAccCheckInstanceGroupManagerExists(n string, manager *compute.InstanceGroupManager) resource.TestCheckFunc {
    79  	return func(s *terraform.State) error {
    80  		rs, ok := s.RootModule().Resources[n]
    81  		if !ok {
    82  			return fmt.Errorf("Not found: %s", n)
    83  		}
    84  
    85  		if rs.Primary.ID == "" {
    86  			return fmt.Errorf("No ID is set")
    87  		}
    88  
    89  		config := testAccProvider.Meta().(*Config)
    90  
    91  		found, err := config.clientCompute.InstanceGroupManagers.Get(
    92  			config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do()
    93  		if err != nil {
    94  			return err
    95  		}
    96  
    97  		if found.Name != rs.Primary.ID {
    98  			return fmt.Errorf("InstanceGroupManager not found")
    99  		}
   100  
   101  		*manager = *found
   102  
   103  		return nil
   104  	}
   105  }
   106  
   107  func testAccCheckInstanceGroupManagerUpdated(n string, size int64, targetPool string, template string) resource.TestCheckFunc {
   108  	return func(s *terraform.State) error {
   109  		rs, ok := s.RootModule().Resources[n]
   110  		if !ok {
   111  			return fmt.Errorf("Not found: %s", n)
   112  		}
   113  
   114  		if rs.Primary.ID == "" {
   115  			return fmt.Errorf("No ID is set")
   116  		}
   117  
   118  		config := testAccProvider.Meta().(*Config)
   119  
   120  		manager, err := config.clientCompute.InstanceGroupManagers.Get(
   121  			config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do()
   122  		if err != nil {
   123  			return err
   124  		}
   125  
   126  		// Cannot check the target pool as the instance creation is asynchronous.  However, can
   127  		// check the target_size.
   128  		if manager.TargetSize != size {
   129  			return fmt.Errorf("instance count incorrect")
   130  		}
   131  
   132  		// check that the instance template updated
   133  		instanceTemplate, err := config.clientCompute.InstanceTemplates.Get(
   134  			config.Project, template).Do()
   135  		if err != nil {
   136  			return fmt.Errorf("Error reading instance template: %s", err)
   137  		}
   138  
   139  		if instanceTemplate.Name != template {
   140  			return fmt.Errorf("instance template not updated")
   141  		}
   142  
   143  		return nil
   144  	}
   145  }
   146  
   147  const testAccInstanceGroupManager_basic = `
   148  resource "google_compute_instance_template" "igm-basic" {
   149  	name = "terraform-test-igm-basic"
   150  	machine_type = "n1-standard-1"
   151  	can_ip_forward = false
   152  	tags = ["foo", "bar"]
   153  
   154  	disk {
   155  		source_image = "debian-cloud/debian-7-wheezy-v20140814"
   156  		auto_delete = true
   157  		boot = true
   158  	}
   159  
   160  	network_interface {
   161  		network = "default"
   162  	}
   163  
   164  	metadata {
   165  		foo = "bar"
   166  	}
   167  
   168  	service_account {
   169  		scopes = ["userinfo-email", "compute-ro", "storage-ro"]
   170  	}
   171  }
   172  
   173  resource "google_compute_target_pool" "igm-basic" {
   174  	description = "Resource created for Terraform acceptance testing"
   175  	name = "terraform-test-igm-basic"
   176  	session_affinity = "CLIENT_IP_PROTO"
   177  }
   178  
   179  resource "google_compute_instance_group_manager" "igm-basic" {
   180  	description = "Terraform test instance group manager"
   181  	name = "terraform-test-igm-basic"
   182  	instance_template = "${google_compute_instance_template.igm-basic.self_link}"
   183  	target_pools = ["${google_compute_target_pool.igm-basic.self_link}"]
   184  	base_instance_name = "igm-basic"
   185  	zone = "us-central1-c"
   186  	target_size = 2
   187  }`
   188  
   189  const testAccInstanceGroupManager_update = `
   190  resource "google_compute_instance_template" "igm-update" {
   191  	name = "terraform-test-igm-update"
   192  	machine_type = "n1-standard-1"
   193  	can_ip_forward = false
   194  	tags = ["foo", "bar"]
   195  
   196  	disk {
   197  		source_image = "debian-cloud/debian-7-wheezy-v20140814"
   198  		auto_delete = true
   199  		boot = true
   200  	}
   201  
   202  	network_interface {
   203  		network = "default"
   204  	}
   205  
   206  	metadata {
   207  		foo = "bar"
   208  	}
   209  
   210  	service_account {
   211  		scopes = ["userinfo-email", "compute-ro", "storage-ro"]
   212  	}
   213  }
   214  
   215  resource "google_compute_target_pool" "igm-update" {
   216  	description = "Resource created for Terraform acceptance testing"
   217  	name = "terraform-test-igm-update"
   218  	session_affinity = "CLIENT_IP_PROTO"
   219  }
   220  
   221  resource "google_compute_instance_group_manager" "igm-update" {
   222  	description = "Terraform test instance group manager"
   223  	name = "terraform-test-igm-update"
   224  	instance_template = "${google_compute_instance_template.igm-update.self_link}"
   225  	target_pools = ["${google_compute_target_pool.igm-update.self_link}"]
   226  	base_instance_name = "igm-update"
   227  	zone = "us-central1-c"
   228  	target_size = 2
   229  }`
   230  
   231  // Change IGM's instance template and target size
   232  const testAccInstanceGroupManager_update2 = `
   233  resource "google_compute_instance_template" "igm-update" {
   234  	name = "terraform-test-igm-update"
   235  	machine_type = "n1-standard-1"
   236  	can_ip_forward = false
   237  	tags = ["foo", "bar"]
   238  
   239  	disk {
   240  		source_image = "debian-cloud/debian-7-wheezy-v20140814"
   241  		auto_delete = true
   242  		boot = true
   243  	}
   244  
   245  	network_interface {
   246  		network = "default"
   247  	}
   248  
   249  	metadata {
   250  		foo = "bar"
   251  	}
   252  
   253  	service_account {
   254  		scopes = ["userinfo-email", "compute-ro", "storage-ro"]
   255  	}
   256  }
   257  
   258  resource "google_compute_target_pool" "igm-update" {
   259  	description = "Resource created for Terraform acceptance testing"
   260  	name = "terraform-test-igm-update"
   261  	session_affinity = "CLIENT_IP_PROTO"
   262  }
   263  
   264  resource "google_compute_instance_template" "igm-update2" {
   265  	name = "terraform-test-igm-update2"
   266  	machine_type = "n1-standard-1"
   267  	can_ip_forward = false
   268  	tags = ["foo", "bar"]
   269  
   270  	disk {
   271  		source_image = "debian-cloud/debian-7-wheezy-v20140814"
   272  		auto_delete = true
   273  		boot = true
   274  	}
   275  
   276  	network_interface {
   277  		network = "default"
   278  	}
   279  
   280  	metadata {
   281  		foo = "bar"
   282  	}
   283  
   284  	service_account {
   285  		scopes = ["userinfo-email", "compute-ro", "storage-ro"]
   286  	}
   287  }
   288  
   289  resource "google_compute_instance_group_manager" "igm-update" {
   290  	description = "Terraform test instance group manager"
   291  	name = "terraform-test-igm-update"
   292  	instance_template = "${google_compute_instance_template.igm-update2.self_link}"
   293  	target_pools = ["${google_compute_target_pool.igm-update.self_link}"]
   294  	base_instance_name = "igm-update"
   295  	zone = "us-central1-c"
   296  	target_size = 3
   297  }`
   298