provider/google: Changed network argument in google_compute_instance_group as optional (#13493)

This commit is contained in:
Shinichi TAMURA 2017-06-08 03:20:17 +09:00 committed by Dana Hoffman
parent 6c0f6fac13
commit 0b6518a29b
3 changed files with 114 additions and 3 deletions

View File

@ -67,7 +67,9 @@ func resourceComputeInstanceGroup() *schema.Resource {
"network": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
},
"project": {
@ -129,6 +131,10 @@ func resourceComputeInstanceGroupCreate(d *schema.ResourceData, meta interface{}
instanceGroup.NamedPorts = getNamedPorts(v.([]interface{}))
}
if v, ok := d.GetOk("network"); ok {
instanceGroup.Network = v.(string)
}
log.Printf("[DEBUG] InstanceGroup insert request: %#v", instanceGroup)
op, err := config.clientCompute.InstanceGroups.Insert(
project, d.Get("zone").(string), instanceGroup).Do()

View File

@ -90,6 +90,32 @@ func TestAccComputeInstanceGroup_outOfOrderInstances(t *testing.T) {
})
}
func TestAccComputeInstanceGroup_network(t *testing.T) {
var instanceGroup compute.InstanceGroup
var instanceName = fmt.Sprintf("instancegroup-test-%s", acctest.RandString(10))
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccComputeInstanceGroup_destroy,
Steps: []resource.TestStep{
resource.TestStep{
Config: testAccComputeInstanceGroup_network(instanceName),
Check: resource.ComposeTestCheckFunc(
testAccComputeInstanceGroup_exists(
"google_compute_instance_group.with_instance", &instanceGroup),
testAccComputeInstanceGroup_hasCorrectNetwork(
"google_compute_instance_group.with_instance", "google_compute_network.ig_network", &instanceGroup),
testAccComputeInstanceGroup_exists(
"google_compute_instance_group.without_instance", &instanceGroup),
testAccComputeInstanceGroup_hasCorrectNetwork(
"google_compute_instance_group.without_instance", "google_compute_network.ig_network", &instanceGroup),
),
},
},
})
}
func testAccComputeInstanceGroup_destroy(s *terraform.State) error {
config := testAccProvider.Meta().(*Config)
@ -201,6 +227,44 @@ func testAccComputeInstanceGroup_named_ports(n string, np map[string]int64, inst
}
}
func testAccComputeInstanceGroup_hasCorrectNetwork(nInstanceGroup string, nNetwork string, instanceGroup *compute.InstanceGroup) resource.TestCheckFunc {
return func(s *terraform.State) error {
config := testAccProvider.Meta().(*Config)
rsInstanceGroup, ok := s.RootModule().Resources[nInstanceGroup]
if !ok {
return fmt.Errorf("Not found: %s", nInstanceGroup)
}
if rsInstanceGroup.Primary.ID == "" {
return fmt.Errorf("No ID is set")
}
instanceGroup, err := config.clientCompute.InstanceGroups.Get(
config.Project, rsInstanceGroup.Primary.Attributes["zone"], rsInstanceGroup.Primary.ID).Do()
if err != nil {
return err
}
rsNetwork, ok := s.RootModule().Resources[nNetwork]
if !ok {
return fmt.Errorf("Not found: %s", nNetwork)
}
if rsNetwork.Primary.ID == "" {
return fmt.Errorf("No ID is set")
}
network, err := config.clientCompute.Networks.Get(
config.Project, rsNetwork.Primary.ID).Do()
if err != nil {
return err
}
if instanceGroup.Network != network.SelfLink {
return fmt.Errorf("network incorrect: actual=%s vs expected=%s", instanceGroup.Network, network.SelfLink)
}
return nil
}
}
func testAccComputeInstanceGroup_basic(instance string) string {
return fmt.Sprintf(`
resource "google_compute_instance" "ig_instance" {
@ -237,7 +301,7 @@ func testAccComputeInstanceGroup_basic(instance string) string {
description = "Terraform test instance group empty"
name = "%s-empty"
zone = "us-central1-c"
named_port {
named_port {
name = "http"
port = "8080"
}
@ -365,3 +429,40 @@ func testAccComputeInstanceGroup_outOfOrderInstances(instance string) string {
}
}`, instance, instance, instance)
}
func testAccComputeInstanceGroup_network(instance string) string {
return fmt.Sprintf(`
resource "google_compute_network" "ig_network" {
name = "%[1]s"
auto_create_subnetworks = true
}
resource "google_compute_instance" "ig_instance" {
name = "%[1]s"
machine_type = "n1-standard-1"
can_ip_forward = false
zone = "us-central1-c"
disk {
image = "debian-8-jessie-v20160803"
}
network_interface {
network = "${google_compute_network.ig_network.name}"
}
}
resource "google_compute_instance_group" "with_instance" {
description = "Terraform test instance group"
name = "%[1]s-with-instance"
zone = "us-central1-c"
instances = [ "${google_compute_instance.ig_instance.self_link}" ]
}
resource "google_compute_instance_group" "without_instance" {
description = "Terraform test instance group"
name = "%[1]s-without-instance"
zone = "us-central1-c"
network = "${google_compute_network.ig_network.self_link}"
}`, instance)
}

View File

@ -22,6 +22,7 @@ resource "google_compute_instance_group" "test" {
name = "terraform-test"
description = "Terraform test instance group"
zone = "us-central1-a"
network = "${google_compute_network.default.self_link}"
}
```
@ -77,6 +78,11 @@ The following arguments are supported:
* `project` - (Optional) The project in which the resource belongs. If it
is not provided, the provider project is used.
* `network` - (Optional) The URL of the network the instance group is in. If
this is different from the network where the instances are in, the creation
fails. Defaults to the network where the instances are in (if neither
`network` nor `instances` is specified, this field will be blank).
The `named_port` block supports:
* `name` - (Required) The name which the port will be mapped to.
@ -88,8 +94,6 @@ The `named_port` block supports:
In addition to the arguments listed above, the following computed attributes are
exported:
* `network` - The network the instance group is in.
* `self_link` - The URI of the created resource.
* `size` - The number of instances in the group.