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