Use new autoscaler / instance group manager APIs.

This commit is contained in:
Dave Cunningham 2015-07-27 20:47:10 -04:00
parent c6f0bf479b
commit 1ec247ef37
11 changed files with 136 additions and 285 deletions

View File

@ -14,11 +14,9 @@ import (
"golang.org/x/oauth2" "golang.org/x/oauth2"
"golang.org/x/oauth2/google" "golang.org/x/oauth2/google"
"golang.org/x/oauth2/jwt" "golang.org/x/oauth2/jwt"
"google.golang.org/api/autoscaler/v1beta2"
"google.golang.org/api/compute/v1" "google.golang.org/api/compute/v1"
"google.golang.org/api/container/v1" "google.golang.org/api/container/v1"
"google.golang.org/api/dns/v1" "google.golang.org/api/dns/v1"
"google.golang.org/api/replicapool/v1beta2"
"google.golang.org/api/storage/v1" "google.golang.org/api/storage/v1"
) )
@ -29,11 +27,9 @@ type Config struct {
Project string Project string
Region string Region string
clientAutoscaler *autoscaler.Service
clientCompute *compute.Service clientCompute *compute.Service
clientContainer *container.Service clientContainer *container.Service
clientDns *dns.Service clientDns *dns.Service
clientReplicaPool *replicapool.Service
clientStorage *storage.Service clientStorage *storage.Service
} }
@ -132,20 +128,6 @@ func (c *Config) loadAndValidate() error {
} }
c.clientDns.UserAgent = userAgent c.clientDns.UserAgent = userAgent
log.Printf("[INFO] Instantiating Google Replica Pool client...")
c.clientReplicaPool, err = replicapool.New(client)
if err != nil {
return err
}
c.clientReplicaPool.UserAgent = userAgent
log.Printf("[INFO] Instantiating Google Autoscaler client...")
c.clientAutoscaler, err = autoscaler.New(client)
if err != nil {
return err
}
c.clientAutoscaler.UserAgent = userAgent
log.Printf("[INFO] Instantiating Google Storage Client...") log.Printf("[INFO] Instantiating Google Storage Client...")
c.clientStorage, err = storage.New(client) c.clientStorage, err = storage.New(client)
if err != nil { if err != nil {

View File

@ -4,9 +4,7 @@ import (
"bytes" "bytes"
"fmt" "fmt"
"google.golang.org/api/autoscaler/v1beta2"
"google.golang.org/api/compute/v1" "google.golang.org/api/compute/v1"
"google.golang.org/api/replicapool/v1beta2"
"github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/resource"
) )
@ -26,8 +24,8 @@ type OperationWaiter struct {
Op *compute.Operation Op *compute.Operation
Project string Project string
Region string Region string
Zone string
Type OperationWaitType Type OperationWaitType
Zone string
} }
func (w *OperationWaiter) RefreshFunc() resource.StateRefreshFunc { func (w *OperationWaiter) RefreshFunc() resource.StateRefreshFunc {
@ -80,95 +78,3 @@ func (e OperationError) Error() string {
return buf.String() return buf.String()
} }
// Replicapool Operations
type ReplicaPoolOperationWaiter struct {
Service *replicapool.Service
Op *replicapool.Operation
Project string
Region string
Zone string
}
func (w *ReplicaPoolOperationWaiter) RefreshFunc() resource.StateRefreshFunc {
return func() (interface{}, string, error) {
var op *replicapool.Operation
var err error
op, err = w.Service.ZoneOperations.Get(
w.Project, w.Zone, w.Op.Name).Do()
if err != nil {
return nil, "", err
}
return op, op.Status, nil
}
}
func (w *ReplicaPoolOperationWaiter) Conf() *resource.StateChangeConf {
return &resource.StateChangeConf{
Pending: []string{"PENDING", "RUNNING"},
Target: "DONE",
Refresh: w.RefreshFunc(),
}
}
// ReplicaPoolOperationError wraps replicapool.OperationError and implements the
// error interface so it can be returned.
type ReplicaPoolOperationError replicapool.OperationError
func (e ReplicaPoolOperationError) Error() string {
var buf bytes.Buffer
for _, err := range e.Errors {
buf.WriteString(err.Message + "\n")
}
return buf.String()
}
// Autoscaler Operations
type AutoscalerOperationWaiter struct {
Service *autoscaler.Service
Op *autoscaler.Operation
Project string
Zone string
}
func (w *AutoscalerOperationWaiter) RefreshFunc() resource.StateRefreshFunc {
return func() (interface{}, string, error) {
var op *autoscaler.Operation
var err error
op, err = w.Service.ZoneOperations.Get(
w.Project, w.Zone, w.Op.Name).Do()
if err != nil {
return nil, "", err
}
return op, op.Status, nil
}
}
func (w *AutoscalerOperationWaiter) Conf() *resource.StateChangeConf {
return &resource.StateChangeConf{
Pending: []string{"PENDING", "RUNNING"},
Target: "DONE",
Refresh: w.RefreshFunc(),
}
}
// AutoscalerOperationError wraps autoscaler.OperationError and implements the
// error interface so it can be returned.
type AutoscalerOperationError autoscaler.OperationError
func (e AutoscalerOperationError) Error() string {
var buf bytes.Buffer
for _, err := range e.Errors {
buf.WriteString(err.Message + "\n")
}
return buf.String()
}

View File

@ -29,7 +29,7 @@ func Provider() terraform.ResourceProvider {
}, },
ResourcesMap: map[string]*schema.Resource{ ResourcesMap: map[string]*schema.Resource{
"google_autoscaler": resourceAutoscaler(), "google_compute_autoscaler": resourceComputeAutoscaler(),
"google_compute_address": resourceComputeAddress(), "google_compute_address": resourceComputeAddress(),
"google_compute_disk": resourceComputeDisk(), "google_compute_disk": resourceComputeDisk(),
"google_compute_firewall": resourceComputeFirewall(), "google_compute_firewall": resourceComputeFirewall(),
@ -43,7 +43,7 @@ func Provider() terraform.ResourceProvider {
"google_container_cluster": resourceContainerCluster(), "google_container_cluster": resourceContainerCluster(),
"google_dns_managed_zone": resourceDnsManagedZone(), "google_dns_managed_zone": resourceDnsManagedZone(),
"google_dns_record_set": resourceDnsRecordSet(), "google_dns_record_set": resourceDnsRecordSet(),
"google_replicapool_instance_group_manager": resourceReplicaPoolInstanceGroupManager(), "google_compute_instance_group_manager": resourceComputeInstanceGroupManager(),
"google_storage_bucket": resourceStorageBucket(), "google_storage_bucket": resourceStorageBucket(),
}, },

View File

@ -6,16 +6,16 @@ import (
"time" "time"
"google.golang.org/api/googleapi" "google.golang.org/api/googleapi"
"google.golang.org/api/autoscaler/v1beta2" "google.golang.org/api/compute/v1"
"github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/schema"
) )
func resourceAutoscaler() *schema.Resource { func resourceComputeAutoscaler() *schema.Resource {
return &schema.Resource{ return &schema.Resource{
Create: resourceAutoscalerCreate, Create: resourceComputeAutoscalerCreate,
Read: resourceAutoscalerRead, Read: resourceComputeAutoscalerRead,
Update: resourceAutoscalerUpdate, Update: resourceComputeAutoscalerUpdate,
Delete: resourceAutoscalerDelete, Delete: resourceComputeAutoscalerDelete,
Schema: map[string]*schema.Schema{ Schema: map[string]*schema.Schema{
"name": &schema.Schema{ "name": &schema.Schema{
@ -120,10 +120,10 @@ func resourceAutoscaler() *schema.Resource {
} }
} }
func buildAutoscaler(d *schema.ResourceData) (*autoscaler.Autoscaler, error) { func buildAutoscaler(d *schema.ResourceData) (*compute.Autoscaler, error) {
// Build the parameter // Build the parameter
scaler := &autoscaler.Autoscaler{ scaler := &compute.Autoscaler{
Name: d.Get("name").(string), Name: d.Get("name").(string),
Target: d.Get("target").(string), Target: d.Get("target").(string),
} }
@ -140,7 +140,7 @@ func buildAutoscaler(d *schema.ResourceData) (*autoscaler.Autoscaler, error) {
prefix := "autoscaling_policy.0." prefix := "autoscaling_policy.0."
scaler.AutoscalingPolicy = &autoscaler.AutoscalingPolicy{ scaler.AutoscalingPolicy = &compute.AutoscalingPolicy{
MaxNumReplicas: int64(d.Get(prefix + "max_replicas").(int)), MaxNumReplicas: int64(d.Get(prefix + "max_replicas").(int)),
MinNumReplicas: int64(d.Get(prefix + "min_replicas").(int)), MinNumReplicas: int64(d.Get(prefix + "min_replicas").(int)),
CoolDownPeriodSec: int64(d.Get(prefix + "cooldown_period").(int)), CoolDownPeriodSec: int64(d.Get(prefix + "cooldown_period").(int)),
@ -156,7 +156,7 @@ func buildAutoscaler(d *schema.ResourceData) (*autoscaler.Autoscaler, error) {
return nil, fmt.Errorf("The autoscaling_policy must have exactly one cpu_utilization, found %d.", cpuUtilCount) return nil, fmt.Errorf("The autoscaling_policy must have exactly one cpu_utilization, found %d.", cpuUtilCount)
} }
policyCounter++ policyCounter++
scaler.AutoscalingPolicy.CpuUtilization = &autoscaler.AutoscalingPolicyCpuUtilization{ scaler.AutoscalingPolicy.CpuUtilization = &compute.AutoscalingPolicyCpuUtilization{
UtilizationTarget: d.Get(prefix + "cpu_utilization.0.target").(float64), UtilizationTarget: d.Get(prefix + "cpu_utilization.0.target").(float64),
} }
} }
@ -168,7 +168,7 @@ func buildAutoscaler(d *schema.ResourceData) (*autoscaler.Autoscaler, error) {
if metricCount != 1 { if metricCount != 1 {
return nil, fmt.Errorf("The autoscaling_policy must have exactly one metric, found %d.", metricCount) return nil, fmt.Errorf("The autoscaling_policy must have exactly one metric, found %d.", metricCount)
} }
scaler.AutoscalingPolicy.CustomMetricUtilizations = []*autoscaler.AutoscalingPolicyCustomMetricUtilization{ scaler.AutoscalingPolicy.CustomMetricUtilizations = []*compute.AutoscalingPolicyCustomMetricUtilization{
{ {
Metric: d.Get(prefix + "metric.0.name").(string), Metric: d.Get(prefix + "metric.0.name").(string),
UtilizationTarget: d.Get(prefix + "metric.0.target").(float64), UtilizationTarget: d.Get(prefix + "metric.0.target").(float64),
@ -185,7 +185,7 @@ func buildAutoscaler(d *schema.ResourceData) (*autoscaler.Autoscaler, error) {
if lbuCount != 1 { if lbuCount != 1 {
return nil, fmt.Errorf("The autoscaling_policy must have exactly one load_balancing_utilization, found %d.", lbuCount) return nil, fmt.Errorf("The autoscaling_policy must have exactly one load_balancing_utilization, found %d.", lbuCount)
} }
scaler.AutoscalingPolicy.LoadBalancingUtilization = &autoscaler.AutoscalingPolicyLoadBalancingUtilization{ scaler.AutoscalingPolicy.LoadBalancingUtilization = &compute.AutoscalingPolicyLoadBalancingUtilization{
UtilizationTarget: d.Get(prefix + "load_balancing_utilization.0.target").(float64), UtilizationTarget: d.Get(prefix + "load_balancing_utilization.0.target").(float64),
} }
} }
@ -198,7 +198,7 @@ func buildAutoscaler(d *schema.ResourceData) (*autoscaler.Autoscaler, error) {
return scaler, nil return scaler, nil
} }
func resourceAutoscalerCreate(d *schema.ResourceData, meta interface{}) error { func resourceComputeAutoscalerCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
// Get the zone // Get the zone
@ -215,7 +215,7 @@ func resourceAutoscalerCreate(d *schema.ResourceData, meta interface{}) error {
return err return err
} }
op, err := config.clientAutoscaler.Autoscalers.Insert( op, err := config.clientCompute.Autoscalers.Insert(
config.Project, zone.Name, scaler).Do() config.Project, zone.Name, scaler).Do()
if err != nil { if err != nil {
return fmt.Errorf("Error creating Autoscaler: %s", err) return fmt.Errorf("Error creating Autoscaler: %s", err)
@ -225,10 +225,11 @@ func resourceAutoscalerCreate(d *schema.ResourceData, meta interface{}) error {
d.SetId(scaler.Name) d.SetId(scaler.Name)
// Wait for the operation to complete // Wait for the operation to complete
w := &AutoscalerOperationWaiter{ w := &OperationWaiter{
Service: config.clientAutoscaler, Service: config.clientCompute,
Op: op, Op: op,
Project: config.Project, Project: config.Project,
Type: OperationWaitZone,
Zone: zone.Name, Zone: zone.Name,
} }
state := w.Conf() state := w.Conf()
@ -238,23 +239,23 @@ func resourceAutoscalerCreate(d *schema.ResourceData, meta interface{}) error {
if err != nil { if err != nil {
return fmt.Errorf("Error waiting for Autoscaler to create: %s", err) return fmt.Errorf("Error waiting for Autoscaler to create: %s", err)
} }
op = opRaw.(*autoscaler.Operation) op = opRaw.(*compute.Operation)
if op.Error != nil { if op.Error != nil {
// The resource didn't actually create // The resource didn't actually create
d.SetId("") d.SetId("")
// Return the error // Return the error
return AutoscalerOperationError(*op.Error) return OperationError(*op.Error)
} }
return resourceAutoscalerRead(d, meta) return resourceComputeAutoscalerRead(d, meta)
} }
func resourceAutoscalerRead(d *schema.ResourceData, meta interface{}) error { func resourceComputeAutoscalerRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
zone := d.Get("zone").(string) zone := d.Get("zone").(string)
scaler, err := config.clientAutoscaler.Autoscalers.Get( scaler, err := config.clientCompute.Autoscalers.Get(
config.Project, zone, d.Id()).Do() config.Project, zone, d.Id()).Do()
if err != nil { if err != nil {
if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 {
@ -272,7 +273,7 @@ func resourceAutoscalerRead(d *schema.ResourceData, meta interface{}) error {
return nil return nil
} }
func resourceAutoscalerUpdate(d *schema.ResourceData, meta interface{}) error { func resourceComputeAutoscalerUpdate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
zone := d.Get("zone").(string) zone := d.Get("zone").(string)
@ -282,7 +283,7 @@ func resourceAutoscalerUpdate(d *schema.ResourceData, meta interface{}) error {
return err return err
} }
op, err := config.clientAutoscaler.Autoscalers.Patch( op, err := config.clientCompute.Autoscalers.Patch(
config.Project, zone, d.Id(), scaler).Do() config.Project, zone, d.Id(), scaler).Do()
if err != nil { if err != nil {
return fmt.Errorf("Error updating Autoscaler: %s", err) return fmt.Errorf("Error updating Autoscaler: %s", err)
@ -292,10 +293,11 @@ func resourceAutoscalerUpdate(d *schema.ResourceData, meta interface{}) error {
d.SetId(scaler.Name) d.SetId(scaler.Name)
// Wait for the operation to complete // Wait for the operation to complete
w := &AutoscalerOperationWaiter{ w := &OperationWaiter{
Service: config.clientAutoscaler, Service: config.clientCompute,
Op: op, Op: op,
Project: config.Project, Project: config.Project,
Type: OperationWaitZone,
Zone: zone, Zone: zone,
} }
state := w.Conf() state := w.Conf()
@ -305,30 +307,31 @@ func resourceAutoscalerUpdate(d *schema.ResourceData, meta interface{}) error {
if err != nil { if err != nil {
return fmt.Errorf("Error waiting for Autoscaler to update: %s", err) return fmt.Errorf("Error waiting for Autoscaler to update: %s", err)
} }
op = opRaw.(*autoscaler.Operation) op = opRaw.(*compute.Operation)
if op.Error != nil { if op.Error != nil {
// Return the error // Return the error
return AutoscalerOperationError(*op.Error) return OperationError(*op.Error)
} }
return resourceAutoscalerRead(d, meta) return resourceComputeAutoscalerRead(d, meta)
} }
func resourceAutoscalerDelete(d *schema.ResourceData, meta interface{}) error { func resourceComputeAutoscalerDelete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
zone := d.Get("zone").(string) zone := d.Get("zone").(string)
op, err := config.clientAutoscaler.Autoscalers.Delete( op, err := config.clientCompute.Autoscalers.Delete(
config.Project, zone, d.Id()).Do() config.Project, zone, d.Id()).Do()
if err != nil { if err != nil {
return fmt.Errorf("Error deleting autoscaler: %s", err) return fmt.Errorf("Error deleting autoscaler: %s", err)
} }
// Wait for the operation to complete // Wait for the operation to complete
w := &AutoscalerOperationWaiter{ w := &OperationWaiter{
Service: config.clientAutoscaler, Service: config.clientCompute,
Op: op, Op: op,
Project: config.Project, Project: config.Project,
Type: OperationWaitZone,
Zone: zone, Zone: zone,
} }
state := w.Conf() state := w.Conf()
@ -338,10 +341,10 @@ func resourceAutoscalerDelete(d *schema.ResourceData, meta interface{}) error {
if err != nil { if err != nil {
return fmt.Errorf("Error waiting for Autoscaler to delete: %s", err) return fmt.Errorf("Error waiting for Autoscaler to delete: %s", err)
} }
op = opRaw.(*autoscaler.Operation) op = opRaw.(*compute.Operation)
if op.Error != nil { if op.Error != nil {
// Return the error // Return the error
return AutoscalerOperationError(*op.Error) return OperationError(*op.Error)
} }
d.SetId("") d.SetId("")

View File

@ -4,13 +4,13 @@ import (
"fmt" "fmt"
"testing" "testing"
"google.golang.org/api/autoscaler/v1beta2" "google.golang.org/api/compute/v1"
"github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform" "github.com/hashicorp/terraform/terraform"
) )
func TestAccAutoscaler_basic(t *testing.T) { func TestAccAutoscaler_basic(t *testing.T) {
var ascaler autoscaler.Autoscaler var ascaler compute.Autoscaler
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) }, PreCheck: func() { testAccPreCheck(t) },
@ -21,7 +21,7 @@ func TestAccAutoscaler_basic(t *testing.T) {
Config: testAccAutoscaler_basic, Config: testAccAutoscaler_basic,
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckAutoscalerExists( testAccCheckAutoscalerExists(
"google_autoscaler.foobar", &ascaler), "google_compute_autoscaler.foobar", &ascaler),
), ),
}, },
}, },
@ -29,7 +29,7 @@ func TestAccAutoscaler_basic(t *testing.T) {
} }
func TestAccAutoscaler_update(t *testing.T) { func TestAccAutoscaler_update(t *testing.T) {
var ascaler autoscaler.Autoscaler var ascaler compute.Autoscaler
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) }, PreCheck: func() { testAccPreCheck(t) },
@ -40,16 +40,16 @@ func TestAccAutoscaler_update(t *testing.T) {
Config: testAccAutoscaler_basic, Config: testAccAutoscaler_basic,
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckAutoscalerExists( testAccCheckAutoscalerExists(
"google_autoscaler.foobar", &ascaler), "google_compute_autoscaler.foobar", &ascaler),
), ),
}, },
resource.TestStep{ resource.TestStep{
Config: testAccAutoscaler_update, Config: testAccAutoscaler_update,
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckAutoscalerExists( testAccCheckAutoscalerExists(
"google_autoscaler.foobar", &ascaler), "google_compute_autoscaler.foobar", &ascaler),
testAccCheckAutoscalerUpdated( testAccCheckAutoscalerUpdated(
"google_autoscaler.foobar", 10), "google_compute_autoscaler.foobar", 10),
), ),
}, },
}, },
@ -60,11 +60,11 @@ func testAccCheckAutoscalerDestroy(s *terraform.State) error {
config := testAccProvider.Meta().(*Config) config := testAccProvider.Meta().(*Config)
for _, rs := range s.RootModule().Resources { for _, rs := range s.RootModule().Resources {
if rs.Type != "google_autoscaler" { if rs.Type != "google_compute_autoscaler" {
continue continue
} }
_, err := config.clientAutoscaler.Autoscalers.Get( _, err := config.clientCompute.Autoscalers.Get(
config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do() config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do()
if err == nil { if err == nil {
return fmt.Errorf("Autoscaler still exists") return fmt.Errorf("Autoscaler still exists")
@ -74,7 +74,7 @@ func testAccCheckAutoscalerDestroy(s *terraform.State) error {
return nil return nil
} }
func testAccCheckAutoscalerExists(n string, ascaler *autoscaler.Autoscaler) resource.TestCheckFunc { func testAccCheckAutoscalerExists(n string, ascaler *compute.Autoscaler) resource.TestCheckFunc {
return func(s *terraform.State) error { return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[n] rs, ok := s.RootModule().Resources[n]
if !ok { if !ok {
@ -87,7 +87,7 @@ func testAccCheckAutoscalerExists(n string, ascaler *autoscaler.Autoscaler) reso
config := testAccProvider.Meta().(*Config) config := testAccProvider.Meta().(*Config)
found, err := config.clientAutoscaler.Autoscalers.Get( found, err := config.clientCompute.Autoscalers.Get(
config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do() config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do()
if err != nil { if err != nil {
return err return err
@ -116,7 +116,7 @@ func testAccCheckAutoscalerUpdated(n string, max int64) resource.TestCheckFunc {
config := testAccProvider.Meta().(*Config) config := testAccProvider.Meta().(*Config)
ascaler, err := config.clientAutoscaler.Autoscalers.Get( ascaler, err := config.clientCompute.Autoscalers.Get(
config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do() config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do()
if err != nil { if err != nil {
return err return err
@ -162,7 +162,7 @@ resource "google_compute_target_pool" "foobar" {
session_affinity = "CLIENT_IP_PROTO" session_affinity = "CLIENT_IP_PROTO"
} }
resource "google_replicapool_instance_group_manager" "foobar" { resource "google_compute_instance_group_manager" "foobar" {
description = "Terraform test instance group manager" description = "Terraform test instance group manager"
name = "terraform-test-groupmanager" name = "terraform-test-groupmanager"
instance_template = "${google_compute_instance_template.foobar.self_link}" instance_template = "${google_compute_instance_template.foobar.self_link}"
@ -171,11 +171,11 @@ resource "google_replicapool_instance_group_manager" "foobar" {
zone = "us-central1-a" zone = "us-central1-a"
} }
resource "google_autoscaler" "foobar" { resource "google_compute_autoscaler" "foobar" {
description = "Resource created for Terraform acceptance testing" description = "Resource created for Terraform acceptance testing"
name = "terraform-test-ascaler" name = "terraform-test-ascaler"
zone = "us-central1-a" zone = "us-central1-a"
target = "${google_replicapool_instance_group_manager.foobar.self_link}" target = "${google_compute_instance_group_manager.foobar.self_link}"
autoscaling_policy = { autoscaling_policy = {
max_replicas = 5 max_replicas = 5
min_replicas = 0 min_replicas = 0
@ -219,7 +219,7 @@ resource "google_compute_target_pool" "foobar" {
session_affinity = "CLIENT_IP_PROTO" session_affinity = "CLIENT_IP_PROTO"
} }
resource "google_replicapool_instance_group_manager" "foobar" { resource "google_compute_instance_group_manager" "foobar" {
description = "Terraform test instance group manager" description = "Terraform test instance group manager"
name = "terraform-test-groupmanager" name = "terraform-test-groupmanager"
instance_template = "${google_compute_instance_template.foobar.self_link}" instance_template = "${google_compute_instance_template.foobar.self_link}"
@ -228,11 +228,11 @@ resource "google_replicapool_instance_group_manager" "foobar" {
zone = "us-central1-a" zone = "us-central1-a"
} }
resource "google_autoscaler" "foobar" { resource "google_compute_autoscaler" "foobar" {
description = "Resource created for Terraform acceptance testing" description = "Resource created for Terraform acceptance testing"
name = "terraform-test-ascaler" name = "terraform-test-ascaler"
zone = "us-central1-a" zone = "us-central1-a"
target = "${google_replicapool_instance_group_manager.foobar.self_link}" target = "${google_compute_instance_group_manager.foobar.self_link}"
autoscaling_policy = { autoscaling_policy = {
max_replicas = 10 max_replicas = 10
min_replicas = 0 min_replicas = 0

View File

@ -6,18 +6,18 @@ import (
"time" "time"
"google.golang.org/api/googleapi" "google.golang.org/api/googleapi"
"google.golang.org/api/replicapool/v1beta2" "google.golang.org/api/compute/v1"
"github.com/hashicorp/terraform/helper/hashcode" "github.com/hashicorp/terraform/helper/hashcode"
"github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/schema"
) )
func resourceReplicaPoolInstanceGroupManager() *schema.Resource { func resourceComputeInstanceGroupManager() *schema.Resource {
return &schema.Resource{ return &schema.Resource{
Create: resourceReplicaPoolInstanceGroupManagerCreate, Create: resourceComputeInstanceGroupManagerCreate,
Read: resourceReplicaPoolInstanceGroupManagerRead, Read: resourceComputeInstanceGroupManagerRead,
Update: resourceReplicaPoolInstanceGroupManagerUpdate, Update: resourceComputeInstanceGroupManagerUpdate,
Delete: resourceReplicaPoolInstanceGroupManagerDelete, Delete: resourceComputeInstanceGroupManagerDelete,
Schema: map[string]*schema.Schema{ Schema: map[string]*schema.Schema{
"name": &schema.Schema{ "name": &schema.Schema{
@ -38,17 +38,12 @@ func resourceReplicaPoolInstanceGroupManager() *schema.Resource {
ForceNew: true, ForceNew: true,
}, },
"current_size": &schema.Schema{
Type: schema.TypeInt,
Computed: true,
},
"fingerprint": &schema.Schema{ "fingerprint": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Computed: true, Computed: true,
}, },
"group": &schema.Schema{ "instance_group": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Computed: true, Computed: true,
}, },
@ -87,14 +82,15 @@ func resourceReplicaPoolInstanceGroupManager() *schema.Resource {
} }
} }
func waitOpZone(config *Config, op *replicapool.Operation, zone string, func waitOpZone(config *Config, op *compute.Operation, zone string,
resource string, action string) (*replicapool.Operation, error) { resource string, action string) (*compute.Operation, error) {
w := &ReplicaPoolOperationWaiter{ w := &OperationWaiter{
Service: config.clientReplicaPool, Service: config.clientCompute,
Op: op, Op: op,
Project: config.Project, Project: config.Project,
Zone: zone, Zone: zone,
Type: OperationWaitZone,
} }
state := w.Conf() state := w.Conf()
state.Timeout = 2 * time.Minute state.Timeout = 2 * time.Minute
@ -103,10 +99,10 @@ func waitOpZone(config *Config, op *replicapool.Operation, zone string,
if err != nil { if err != nil {
return nil, fmt.Errorf("Error waiting for %s to %s: %s", resource, action, err) return nil, fmt.Errorf("Error waiting for %s to %s: %s", resource, action, err)
} }
return opRaw.(*replicapool.Operation), nil return opRaw.(*compute.Operation), nil
} }
func resourceReplicaPoolInstanceGroupManagerCreate(d *schema.ResourceData, meta interface{}) error { func resourceComputeInstanceGroupManagerCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
// Get group size, default to 1 if not given // Get group size, default to 1 if not given
@ -116,10 +112,11 @@ func resourceReplicaPoolInstanceGroupManagerCreate(d *schema.ResourceData, meta
} }
// Build the parameter // Build the parameter
manager := &replicapool.InstanceGroupManager{ manager := &compute.InstanceGroupManager{
Name: d.Get("name").(string), Name: d.Get("name").(string),
BaseInstanceName: d.Get("base_instance_name").(string), BaseInstanceName: d.Get("base_instance_name").(string),
InstanceTemplate: d.Get("instance_template").(string), InstanceTemplate: d.Get("instance_template").(string),
TargetSize: target_size,
} }
// Set optional fields // Set optional fields
@ -136,8 +133,8 @@ func resourceReplicaPoolInstanceGroupManagerCreate(d *schema.ResourceData, meta
} }
log.Printf("[DEBUG] InstanceGroupManager insert request: %#v", manager) log.Printf("[DEBUG] InstanceGroupManager insert request: %#v", manager)
op, err := config.clientReplicaPool.InstanceGroupManagers.Insert( op, err := config.clientCompute.InstanceGroupManagers.Insert(
config.Project, d.Get("zone").(string), target_size, manager).Do() config.Project, d.Get("zone").(string), manager).Do()
if err != nil { if err != nil {
return fmt.Errorf("Error creating InstanceGroupManager: %s", err) return fmt.Errorf("Error creating InstanceGroupManager: %s", err)
} }
@ -154,16 +151,16 @@ func resourceReplicaPoolInstanceGroupManagerCreate(d *schema.ResourceData, meta
// The resource didn't actually create // The resource didn't actually create
d.SetId("") d.SetId("")
// Return the error // Return the error
return ReplicaPoolOperationError(*op.Error) return OperationError(*op.Error)
} }
return resourceReplicaPoolInstanceGroupManagerRead(d, meta) return resourceComputeInstanceGroupManagerRead(d, meta)
} }
func resourceReplicaPoolInstanceGroupManagerRead(d *schema.ResourceData, meta interface{}) error { func resourceComputeInstanceGroupManagerRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
manager, err := config.clientReplicaPool.InstanceGroupManagers.Get( manager, err := config.clientCompute.InstanceGroupManagers.Get(
config.Project, d.Get("zone").(string), d.Id()).Do() config.Project, d.Get("zone").(string), d.Id()).Do()
if err != nil { if err != nil {
if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 {
@ -177,15 +174,14 @@ func resourceReplicaPoolInstanceGroupManagerRead(d *schema.ResourceData, meta in
} }
// Set computed fields // Set computed fields
d.Set("current_size", manager.CurrentSize)
d.Set("fingerprint", manager.Fingerprint) d.Set("fingerprint", manager.Fingerprint)
d.Set("group", manager.Group) d.Set("instance_group", manager.InstanceGroup)
d.Set("target_size", manager.TargetSize) d.Set("target_size", manager.TargetSize)
d.Set("self_link", manager.SelfLink) d.Set("self_link", manager.SelfLink)
return nil return nil
} }
func resourceReplicaPoolInstanceGroupManagerUpdate(d *schema.ResourceData, meta interface{}) error { func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
d.Partial(true) d.Partial(true)
@ -200,12 +196,12 @@ func resourceReplicaPoolInstanceGroupManagerUpdate(d *schema.ResourceData, meta
} }
// Build the parameter // Build the parameter
setTargetPools := &replicapool.InstanceGroupManagersSetTargetPoolsRequest{ setTargetPools := &compute.InstanceGroupManagersSetTargetPoolsRequest{
Fingerprint: d.Get("fingerprint").(string), Fingerprint: d.Get("fingerprint").(string),
TargetPools: targetPools, TargetPools: targetPools,
} }
op, err := config.clientReplicaPool.InstanceGroupManagers.SetTargetPools( op, err := config.clientCompute.InstanceGroupManagers.SetTargetPools(
config.Project, d.Get("zone").(string), d.Id(), setTargetPools).Do() config.Project, d.Get("zone").(string), d.Id(), setTargetPools).Do()
if err != nil { if err != nil {
return fmt.Errorf("Error updating InstanceGroupManager: %s", err) return fmt.Errorf("Error updating InstanceGroupManager: %s", err)
@ -217,7 +213,7 @@ func resourceReplicaPoolInstanceGroupManagerUpdate(d *schema.ResourceData, meta
return err return err
} }
if op.Error != nil { if op.Error != nil {
return ReplicaPoolOperationError(*op.Error) return OperationError(*op.Error)
} }
d.SetPartial("target_pools") d.SetPartial("target_pools")
@ -226,11 +222,11 @@ func resourceReplicaPoolInstanceGroupManagerUpdate(d *schema.ResourceData, meta
// If instance_template changes then update // If instance_template changes then update
if d.HasChange("instance_template") { if d.HasChange("instance_template") {
// Build the parameter // Build the parameter
setInstanceTemplate := &replicapool.InstanceGroupManagersSetInstanceTemplateRequest{ setInstanceTemplate := &compute.InstanceGroupManagersSetInstanceTemplateRequest{
InstanceTemplate: d.Get("instance_template").(string), InstanceTemplate: d.Get("instance_template").(string),
} }
op, err := config.clientReplicaPool.InstanceGroupManagers.SetInstanceTemplate( op, err := config.clientCompute.InstanceGroupManagers.SetInstanceTemplate(
config.Project, d.Get("zone").(string), d.Id(), setInstanceTemplate).Do() config.Project, d.Get("zone").(string), d.Id(), setInstanceTemplate).Do()
if err != nil { if err != nil {
return fmt.Errorf("Error updating InstanceGroupManager: %s", err) return fmt.Errorf("Error updating InstanceGroupManager: %s", err)
@ -242,7 +238,7 @@ func resourceReplicaPoolInstanceGroupManagerUpdate(d *schema.ResourceData, meta
return err return err
} }
if op.Error != nil { if op.Error != nil {
return ReplicaPoolOperationError(*op.Error) return OperationError(*op.Error)
} }
d.SetPartial("instance_template") d.SetPartial("instance_template")
@ -254,7 +250,7 @@ func resourceReplicaPoolInstanceGroupManagerUpdate(d *schema.ResourceData, meta
// Only do anything if the new size is set // Only do anything if the new size is set
target_size := int64(v.(int)) target_size := int64(v.(int))
op, err := config.clientReplicaPool.InstanceGroupManagers.Resize( op, err := config.clientCompute.InstanceGroupManagers.Resize(
config.Project, d.Get("zone").(string), d.Id(), target_size).Do() config.Project, d.Get("zone").(string), d.Id(), target_size).Do()
if err != nil { if err != nil {
return fmt.Errorf("Error updating InstanceGroupManager: %s", err) return fmt.Errorf("Error updating InstanceGroupManager: %s", err)
@ -266,7 +262,7 @@ func resourceReplicaPoolInstanceGroupManagerUpdate(d *schema.ResourceData, meta
return err return err
} }
if op.Error != nil { if op.Error != nil {
return ReplicaPoolOperationError(*op.Error) return OperationError(*op.Error)
} }
} }
@ -275,39 +271,29 @@ func resourceReplicaPoolInstanceGroupManagerUpdate(d *schema.ResourceData, meta
d.Partial(false) d.Partial(false)
return resourceReplicaPoolInstanceGroupManagerRead(d, meta) return resourceComputeInstanceGroupManagerRead(d, meta)
} }
func resourceReplicaPoolInstanceGroupManagerDelete(d *schema.ResourceData, meta interface{}) error { func resourceComputeInstanceGroupManagerDelete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
zone := d.Get("zone").(string) zone := d.Get("zone").(string)
op, err := config.clientReplicaPool.InstanceGroupManagers.Delete(config.Project, zone, d.Id()).Do() op, err := config.clientCompute.InstanceGroupManagers.Delete(config.Project, zone, d.Id()).Do()
if err != nil { if err != nil {
return fmt.Errorf("Error deleting instance group manager: %s", err) return fmt.Errorf("Error deleting instance group manager: %s", err)
} }
// Wait for the operation to complete // Wait for the operation to complete
w := &ReplicaPoolOperationWaiter{ op, err = waitOpZone(config, op, d.Get("zone").(string), "InstanceGroupManager", "delete")
Service: config.clientReplicaPool,
Op: op,
Project: config.Project,
Zone: d.Get("zone").(string),
}
state := w.Conf()
state.Timeout = 2 * time.Minute
state.MinTimeout = 1 * time.Second
opRaw, err := state.WaitForState()
if err != nil { if err != nil {
return fmt.Errorf("Error waiting for InstanceGroupManager to delete: %s", err) return err
} }
op = opRaw.(*replicapool.Operation)
if op.Error != nil { if op.Error != nil {
// The resource didn't actually create // The resource didn't actually create
d.SetId("") d.SetId("")
// Return the error // Return the error
return ReplicaPoolOperationError(*op.Error) return OperationError(*op.Error)
} }
d.SetId("") d.SetId("")

View File

@ -4,14 +4,14 @@ import (
"fmt" "fmt"
"testing" "testing"
"google.golang.org/api/replicapool/v1beta2" "google.golang.org/api/compute/v1"
"github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform" "github.com/hashicorp/terraform/terraform"
) )
func TestAccInstanceGroupManager_basic(t *testing.T) { func TestAccInstanceGroupManager_basic(t *testing.T) {
var manager replicapool.InstanceGroupManager var manager compute.InstanceGroupManager
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) }, PreCheck: func() { testAccPreCheck(t) },
@ -22,7 +22,7 @@ func TestAccInstanceGroupManager_basic(t *testing.T) {
Config: testAccInstanceGroupManager_basic, Config: testAccInstanceGroupManager_basic,
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckInstanceGroupManagerExists( testAccCheckInstanceGroupManagerExists(
"google_replicapool_instance_group_manager.foobar", &manager), "google_compute_instance_group_manager.foobar", &manager),
), ),
}, },
}, },
@ -30,7 +30,7 @@ func TestAccInstanceGroupManager_basic(t *testing.T) {
} }
func TestAccInstanceGroupManager_update(t *testing.T) { func TestAccInstanceGroupManager_update(t *testing.T) {
var manager replicapool.InstanceGroupManager var manager compute.InstanceGroupManager
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) }, PreCheck: func() { testAccPreCheck(t) },
@ -41,23 +41,23 @@ func TestAccInstanceGroupManager_update(t *testing.T) {
Config: testAccInstanceGroupManager_basic, Config: testAccInstanceGroupManager_basic,
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckInstanceGroupManagerExists( testAccCheckInstanceGroupManagerExists(
"google_replicapool_instance_group_manager.foobar", &manager), "google_compute_instance_group_manager.foobar", &manager),
), ),
}, },
resource.TestStep{ resource.TestStep{
Config: testAccInstanceGroupManager_update, Config: testAccInstanceGroupManager_update,
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckInstanceGroupManagerExists( testAccCheckInstanceGroupManagerExists(
"google_replicapool_instance_group_manager.foobar", &manager), "google_compute_instance_group_manager.foobar", &manager),
), ),
}, },
resource.TestStep{ resource.TestStep{
Config: testAccInstanceGroupManager_update2, Config: testAccInstanceGroupManager_update2,
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckInstanceGroupManagerExists( testAccCheckInstanceGroupManagerExists(
"google_replicapool_instance_group_manager.foobar", &manager), "google_compute_instance_group_manager.foobar", &manager),
testAccCheckInstanceGroupManagerUpdated( testAccCheckInstanceGroupManagerUpdated(
"google_replicapool_instance_group_manager.foobar", 3, "google_compute_instance_group_manager.foobar", 3,
"google_compute_target_pool.foobaz", "terraform-test-foobaz"), "google_compute_target_pool.foobaz", "terraform-test-foobaz"),
), ),
}, },
@ -69,10 +69,10 @@ func testAccCheckInstanceGroupManagerDestroy(s *terraform.State) error {
config := testAccProvider.Meta().(*Config) config := testAccProvider.Meta().(*Config)
for _, rs := range s.RootModule().Resources { for _, rs := range s.RootModule().Resources {
if rs.Type != "google_replicapool_instance_group_manager" { if rs.Type != "google_compute_instance_group_manager" {
continue continue
} }
_, err := config.clientReplicaPool.InstanceGroupManagers.Get( _, err := config.clientCompute.InstanceGroupManagers.Get(
config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do() config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do()
if err != nil { if err != nil {
return fmt.Errorf("InstanceGroupManager still exists") return fmt.Errorf("InstanceGroupManager still exists")
@ -82,7 +82,7 @@ func testAccCheckInstanceGroupManagerDestroy(s *terraform.State) error {
return nil return nil
} }
func testAccCheckInstanceGroupManagerExists(n string, manager *replicapool.InstanceGroupManager) resource.TestCheckFunc { func testAccCheckInstanceGroupManagerExists(n string, manager *compute.InstanceGroupManager) resource.TestCheckFunc {
return func(s *terraform.State) error { return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[n] rs, ok := s.RootModule().Resources[n]
if !ok { if !ok {
@ -95,7 +95,7 @@ func testAccCheckInstanceGroupManagerExists(n string, manager *replicapool.Insta
config := testAccProvider.Meta().(*Config) config := testAccProvider.Meta().(*Config)
found, err := config.clientReplicaPool.InstanceGroupManagers.Get( found, err := config.clientCompute.InstanceGroupManagers.Get(
config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do() config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do()
if err != nil { if err != nil {
return err return err
@ -124,38 +124,18 @@ func testAccCheckInstanceGroupManagerUpdated(n string, size int64, targetPool st
config := testAccProvider.Meta().(*Config) config := testAccProvider.Meta().(*Config)
manager, err := config.clientReplicaPool.InstanceGroupManagers.Get( manager, err := config.clientCompute.InstanceGroupManagers.Get(
config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do() config.Project, rs.Primary.Attributes["zone"], rs.Primary.ID).Do()
if err != nil { if err != nil {
return err return err
} }
// check that total instance count is "size" // Cannot check the target pool as the instance creation is asynchronous. However, can
if manager.CurrentSize != size { // check the target_size.
if manager.TargetSize != size {
return fmt.Errorf("instance count incorrect") return fmt.Errorf("instance count incorrect")
} }
// check that at least one instance exists in "targetpool"
tp, ok := s.RootModule().Resources[targetPool]
if !ok {
return fmt.Errorf("Not found: %s", targetPool)
}
if tp.Primary.ID == "" {
return fmt.Errorf("No ID is set")
}
targetpool, err := config.clientCompute.TargetPools.Get(
config.Project, config.Region, tp.Primary.ID).Do()
if err != nil {
return err
}
// check that total instance count is "size"
if len(targetpool.Instances) == 0 {
return fmt.Errorf("no instance in new targetpool")
}
// check that the instance template updated // check that the instance template updated
instanceTemplate, err := config.clientCompute.InstanceTemplates.Get( instanceTemplate, err := config.clientCompute.InstanceTemplates.Get(
config.Project, template).Do() config.Project, template).Do()
@ -203,13 +183,13 @@ resource "google_compute_target_pool" "foobar" {
session_affinity = "CLIENT_IP_PROTO" session_affinity = "CLIENT_IP_PROTO"
} }
resource "google_replicapool_instance_group_manager" "foobar" { resource "google_compute_instance_group_manager" "foobar" {
description = "Terraform test instance group manager" description = "Terraform test instance group manager"
name = "terraform-test" name = "terraform-test"
instance_template = "${google_compute_instance_template.foobar.self_link}" instance_template = "${google_compute_instance_template.foobar.self_link}"
target_pools = ["${google_compute_target_pool.foobar.self_link}"] target_pools = ["${google_compute_target_pool.foobar.self_link}"]
base_instance_name = "foobar" base_instance_name = "foobar"
zone = "us-central1-a" zone = "us-central1-c"
target_size = 2 target_size = 2
}` }`
@ -276,13 +256,13 @@ resource "google_compute_target_pool" "foobaz" {
session_affinity = "CLIENT_IP_PROTO" session_affinity = "CLIENT_IP_PROTO"
} }
resource "google_replicapool_instance_group_manager" "foobar" { resource "google_compute_instance_group_manager" "foobar" {
description = "Terraform test instance group manager" description = "Terraform test instance group manager"
name = "terraform-test" name = "terraform-test"
instance_template = "${google_compute_instance_template.foobar.self_link}" instance_template = "${google_compute_instance_template.foobar.self_link}"
target_pools = ["${google_compute_target_pool.foobaz.self_link}"] target_pools = ["${google_compute_target_pool.foobaz.self_link}"]
base_instance_name = "foobar" base_instance_name = "foobar"
zone = "us-central1-a" zone = "us-central1-c"
target_size = 2 target_size = 2
}` }`
@ -349,12 +329,12 @@ resource "google_compute_target_pool" "foobaz" {
session_affinity = "CLIENT_IP_PROTO" session_affinity = "CLIENT_IP_PROTO"
} }
resource "google_replicapool_instance_group_manager" "foobar" { resource "google_compute_instance_group_manager" "foobar" {
description = "Terraform test instance group manager" description = "Terraform test instance group manager"
name = "terraform-test" name = "terraform-test"
instance_template = "${google_compute_instance_template.foobaz.self_link}" instance_template = "${google_compute_instance_template.foobaz.self_link}"
target_pools = ["${google_compute_target_pool.foobaz.self_link}"] target_pools = ["${google_compute_target_pool.foobaz.self_link}"]
base_instance_name = "foobar" base_instance_name = "foobar"
zone = "us-central1-a" zone = "us-central1-c"
target_size = 3 target_size = 3
}` }`

View File

@ -24,7 +24,7 @@ func TestAccComputeInstanceTemplate_basic(t *testing.T) {
"google_compute_instance_template.foobar", &instanceTemplate), "google_compute_instance_template.foobar", &instanceTemplate),
testAccCheckComputeInstanceTemplateTag(&instanceTemplate, "foo"), testAccCheckComputeInstanceTemplateTag(&instanceTemplate, "foo"),
testAccCheckComputeInstanceTemplateMetadata(&instanceTemplate, "foo", "bar"), testAccCheckComputeInstanceTemplateMetadata(&instanceTemplate, "foo", "bar"),
testAccCheckComputeInstanceTemplateDisk(&instanceTemplate, "debian-7-wheezy-v20140814", true, true), testAccCheckComputeInstanceTemplateDisk(&instanceTemplate, "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20140814", true, true),
), ),
}, },
}, },
@ -64,7 +64,7 @@ func TestAccComputeInstanceTemplate_disks(t *testing.T) {
Check: resource.ComposeTestCheckFunc( Check: resource.ComposeTestCheckFunc(
testAccCheckComputeInstanceTemplateExists( testAccCheckComputeInstanceTemplateExists(
"google_compute_instance_template.foobar", &instanceTemplate), "google_compute_instance_template.foobar", &instanceTemplate),
testAccCheckComputeInstanceTemplateDisk(&instanceTemplate, "debian-7-wheezy-v20140814", true, true), testAccCheckComputeInstanceTemplateDisk(&instanceTemplate, "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20140814", true, true),
testAccCheckComputeInstanceTemplateDisk(&instanceTemplate, "terraform-test-foobar", false, false), testAccCheckComputeInstanceTemplateDisk(&instanceTemplate, "terraform-test-foobar", false, false),
), ),
}, },

View File

@ -1,15 +1,12 @@
--- ---
layout: "google" layout: "google"
page_title: "Google: google_autoscaler" page_title: "Google: google_compute_autoscaler"
sidebar_current: "docs-google-resource-autoscaler" sidebar_current: "docs-google-resource-compute-autoscaler"
description: |- description: |-
Managers an Instance Group within GCE. Manages an Autoscaler within GCE.
--- ---
# google\_autoscaler # google\_compute\_autoscaler
**Note**: This resource is in
[beta](https://cloud.google.com/terms/launch-stages).
A Compute Engine Autoscaler automatically adds or removes virtual machines from A Compute Engine Autoscaler automatically adds or removes virtual machines from
a managed instance group based on increases or decreases in load. This allows a managed instance group based on increases or decreases in load. This allows
@ -51,7 +48,7 @@ resource "google_compute_target_pool" "foobar" {
name = "foobar" name = "foobar"
} }
resource "google_replicapool_instance_group_manager" "foobar" { resource "google_compute_instance_group_manager" "foobar" {
name = "foobar" name = "foobar"
instance_template = "${google_compute_instance_template.foobar.self_link}" instance_template = "${google_compute_instance_template.foobar.self_link}"
target_pools = ["${google_compute_target_pool.foobar.self_link}"] target_pools = ["${google_compute_target_pool.foobar.self_link}"]
@ -59,10 +56,10 @@ resource "google_replicapool_instance_group_manager" "foobar" {
zone = "us-central1-f" zone = "us-central1-f"
} }
resource "google_autoscaler" "foobar" { resource "google_compute_autoscaler" "foobar" {
name = "foobar" name = "foobar"
zone = "us-central1-f" zone = "us-central1-f"
target = "${google_replicapool_instance_group_manager.foobar.self_link}" target = "${google_compute_instance_group_manager.foobar.self_link}"
autoscaling_policy = { autoscaling_policy = {
max_replicas = 5 max_replicas = 5
min_replicas = 1 min_replicas = 1

View File

@ -1,15 +1,12 @@
--- ---
layout: "google" layout: "google"
page_title: "Google: google_replicapool_instance_group_manager" page_title: "Google: google_compute_instance_group_manager"
sidebar_current: "docs-google-resource-instance_group_manager" sidebar_current: "docs-google-resource-compute-instance_group_manager"
description: |- description: |-
Manages an Instance Group within GCE. Manages an Instance Group within GCE.
--- ---
# google\_replicapool\_instance\_group\_manager # google\_compute\_instance\_group\_manager
**Note**: This resource is in
[beta](https://cloud.google.com/terms/launch-stages).
The Google Compute Engine Instance Group Manager API creates and manages pools The Google Compute Engine Instance Group Manager API creates and manages pools
of homogeneous Compute Engine virtual machine instances from a common instance of homogeneous Compute Engine virtual machine instances from a common instance
@ -19,7 +16,7 @@ and [API](https://cloud.google.com/compute/docs/instance-groups/manager/v1beta2/
## Example Usage ## Example Usage
``` ```
resource "google_replicapool_instance_group_manager" "foobar" { resource "google_compute_instance_group_manager" "foobar" {
description = "Terraform test instance group manager" description = "Terraform test instance group manager"
name = "terraform-test" name = "terraform-test"
instance_template = "${google_compute_instance_template.foobar.self_link}" instance_template = "${google_compute_instance_template.foobar.self_link}"
@ -63,6 +60,6 @@ affect existing instances.
The following attributes are exported: The following attributes are exported:
* `group` - The full URL of the instance group created by the manager. * `instance_group` - The full URL of the instance group created by the manager.
* `self_link` - The URL of the created resource. * `self_link` - The URL of the created resource.

View File

@ -65,12 +65,12 @@
<a href="/docs/providers/google/r/dns_record_set.html">google_dns_record_set</a> <a href="/docs/providers/google/r/dns_record_set.html">google_dns_record_set</a>
</li> </li>
<li<%= sidebar_current("docs-google-resource-replicapool-instance-group-manager") %>> <li<%= sidebar_current("docs-google-resource--compute-instance-group-manager") %>>
<a href="/docs/providers/google/r/replicapool_instance_group_manager.html">google_replicapool_instance_group_manager</a> <a href="/docs/providers/google/r/compute_instance_group_manager.html">google_compute_instance_group_manager</a>
</li> </li>
<li<%= sidebar_current("docs-google-resource-autoscaler") %>> <li<%= sidebar_current("docs-google-resource-compute-autoscaler") %>>
<a href="/docs/providers/google/r/autoscaler.html">google_autoscaler</a> <a href="/docs/providers/google/r/compute_autoscaler.html">google_compute_autoscaler</a>
</li> </li>
<li<%= sidebar_current("docs-google-resource-storage-bucket") %>> <li<%= sidebar_current("docs-google-resource-storage-bucket") %>>