Skip to content

Commit f66f37f

Browse files
sl1pm4tjen20
authored andcommitted
Add more acceptance tests, and fix some test cases
1 parent d6039af commit f66f37f

5 files changed

Lines changed: 295 additions & 8 deletions

File tree

builtin/providers/google/resource_compute_instance.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -684,6 +684,7 @@ func resourceComputeInstanceRead(d *schema.ResourceData, meta interface{}) error
684684
"name": iface.Name,
685685
"address": iface.NetworkIP,
686686
"network": d.Get(fmt.Sprintf("network_interface.%d.network", i)),
687+
"subnetwork": d.Get(fmt.Sprintf("network_interface.%d.subnetwork", i)),
687688
"access_config": accessConfigs,
688689
})
689690
}

builtin/providers/google/resource_compute_instance_template.go

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ func resourceComputeInstanceTemplate() *schema.Resource {
137137
Schema: map[string]*schema.Schema{
138138
"network": &schema.Schema{
139139
Type: schema.TypeString,
140-
Required: true,
140+
Optional: true,
141141
ForceNew: true,
142142
},
143143

@@ -179,6 +179,12 @@ func resourceComputeInstanceTemplate() *schema.Resource {
179179
Deprecated: "Please use `scheduling.on_host_maintenance` instead",
180180
},
181181

182+
"region": &schema.Schema{
183+
Type: schema.TypeString,
184+
Optional: true,
185+
ForceNew: true,
186+
},
187+
182188
"scheduling": &schema.Schema{
183189
Type: schema.TypeList,
184190
Optional: true,
@@ -333,21 +339,57 @@ func buildDisks(d *schema.ResourceData, meta interface{}) ([]*compute.AttachedDi
333339

334340
func buildNetworks(d *schema.ResourceData, meta interface{}) (error, []*compute.NetworkInterface) {
335341
// Build up the list of networks
342+
config := meta.(*Config)
343+
336344
networksCount := d.Get("network_interface.#").(int)
337345
networkInterfaces := make([]*compute.NetworkInterface, 0, networksCount)
338346
for i := 0; i < networksCount; i++ {
339347
prefix := fmt.Sprintf("network_interface.%d", i)
340348

341-
source := "global/networks/"
349+
var networkName, subnetworkName string
342350
if v, ok := d.GetOk(prefix + ".network"); ok {
343-
source += v.(string)
351+
networkName = v.(string)
352+
}
353+
if v, ok := d.GetOk(prefix + ".subnetwork"); ok {
354+
subnetworkName = v.(string)
344355
}
345356

346-
subnetworkLink := d.Get("subnetwork").(string)
357+
if networkName == "" && subnetworkName == "" {
358+
return fmt.Errorf("network or subnetwork must be provided"), nil
359+
}
360+
if networkName != "" && subnetworkName != "" {
361+
return fmt.Errorf("network or subnetwork must not both be provided"), nil
362+
}
363+
364+
var networkLink, subnetworkLink string
365+
if networkName != "" {
366+
network, err := config.clientCompute.Networks.Get(
367+
config.Project, networkName).Do()
368+
if err != nil {
369+
return fmt.Errorf(
370+
"Error referencing network '%s': %s",
371+
networkName, err), nil
372+
}
373+
networkLink = network.SelfLink
374+
} else {
375+
// lookup subnetwork link using region and subnetwork name
376+
region := d.Get("region").(string)
377+
if region == "" {
378+
region = config.Region
379+
}
380+
subnetwork, err := config.clientCompute.Subnetworks.Get(
381+
config.Project, region, subnetworkName).Do()
382+
if err != nil {
383+
return fmt.Errorf(
384+
"Error referencing subnetwork '%s' in region '%s': %s",
385+
subnetworkName, region, err), nil
386+
}
387+
subnetworkLink = subnetwork.SelfLink
388+
}
347389

348390
// Build the networkInterface
349391
var iface compute.NetworkInterface
350-
iface.Network = source
392+
iface.Network = networkLink
351393
iface.Subnetwork = subnetworkLink
352394

353395
accessConfigsCount := d.Get(prefix + ".access_config.#").(int)

builtin/providers/google/resource_compute_instance_template_test.go

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/hashicorp/terraform/helper/resource"
99
"github.com/hashicorp/terraform/terraform"
1010
"google.golang.org/api/compute/v1"
11+
"strings"
1112
)
1213

1314
func TestAccComputeInstanceTemplate_basic(t *testing.T) {
@@ -73,6 +74,47 @@ func TestAccComputeInstanceTemplate_disks(t *testing.T) {
7374
})
7475
}
7576

77+
func TestAccComputeInstanceTemplate_subnet_auto(t *testing.T) {
78+
var instanceTemplate compute.InstanceTemplate
79+
network := "network-" + acctest.RandString(10)
80+
81+
resource.Test(t, resource.TestCase{
82+
PreCheck: func() { testAccPreCheck(t) },
83+
Providers: testAccProviders,
84+
CheckDestroy: testAccCheckComputeInstanceTemplateDestroy,
85+
Steps: []resource.TestStep{
86+
resource.TestStep{
87+
Config: testAccComputeInstanceTemplate_subnet_auto(network),
88+
Check: resource.ComposeTestCheckFunc(
89+
testAccCheckComputeInstanceTemplateExists(
90+
"google_compute_instance_template.foobar", &instanceTemplate),
91+
testAccCheckComputeInstanceTemplateNetworkName(&instanceTemplate, network),
92+
),
93+
},
94+
},
95+
})
96+
}
97+
98+
func TestAccComputeInstanceTemplate_subnet_custom(t *testing.T) {
99+
var instanceTemplate compute.InstanceTemplate
100+
101+
resource.Test(t, resource.TestCase{
102+
PreCheck: func() { testAccPreCheck(t) },
103+
Providers: testAccProviders,
104+
CheckDestroy: testAccCheckComputeInstanceTemplateDestroy,
105+
Steps: []resource.TestStep{
106+
resource.TestStep{
107+
Config: testAccComputeInstanceTemplate_subnet_custom,
108+
Check: resource.ComposeTestCheckFunc(
109+
testAccCheckComputeInstanceTemplateExists(
110+
"google_compute_instance_template.foobar", &instanceTemplate),
111+
testAccCheckComputeInstanceTemplateSubnetwork(&instanceTemplate),
112+
),
113+
},
114+
},
115+
})
116+
}
117+
76118
func testAccCheckComputeInstanceTemplateDestroy(s *terraform.State) error {
77119
config := testAccProvider.Meta().(*Config)
78120

@@ -158,6 +200,18 @@ func testAccCheckComputeInstanceTemplateNetwork(instanceTemplate *compute.Instan
158200
}
159201
}
160202

203+
func testAccCheckComputeInstanceTemplateNetworkName(instanceTemplate *compute.InstanceTemplate, network string) resource.TestCheckFunc {
204+
return func(s *terraform.State) error {
205+
for _, i := range instanceTemplate.Properties.NetworkInterfaces {
206+
if !strings.Contains(i.Network, network) {
207+
return fmt.Errorf("Network doesn't match expected value, Expected: %s Actual: %s", network, i.Network[strings.LastIndex("/", i.Network)+1:])
208+
}
209+
}
210+
211+
return nil
212+
}
213+
}
214+
161215
func testAccCheckComputeInstanceTemplateDisk(instanceTemplate *compute.InstanceTemplate, source string, delete bool, boot bool) resource.TestCheckFunc {
162216
return func(s *terraform.State) error {
163217
if instanceTemplate.Properties.Disks == nil {
@@ -186,6 +240,18 @@ func testAccCheckComputeInstanceTemplateDisk(instanceTemplate *compute.InstanceT
186240
}
187241
}
188242

243+
func testAccCheckComputeInstanceTemplateSubnetwork(instanceTemplate *compute.InstanceTemplate) resource.TestCheckFunc {
244+
return func(s *terraform.State) error {
245+
for _, i := range instanceTemplate.Properties.NetworkInterfaces {
246+
if i.Subnetwork == "" {
247+
return fmt.Errorf("no subnet")
248+
}
249+
}
250+
251+
return nil
252+
}
253+
}
254+
189255
func testAccCheckComputeInstanceTemplateTag(instanceTemplate *compute.InstanceTemplate, n string) resource.TestCheckFunc {
190256
return func(s *terraform.State) error {
191257
if instanceTemplate.Properties.Tags == nil {
@@ -293,3 +359,65 @@ resource "google_compute_instance_template" "foobar" {
293359
foo = "bar"
294360
}
295361
}`, acctest.RandString(10), acctest.RandString(10))
362+
363+
func testAccComputeInstanceTemplate_subnet_auto(network string) string {
364+
return fmt.Sprintf(`
365+
resource "google_compute_network" "auto-network" {
366+
name = "%s"
367+
auto_create_subnetworks = true
368+
}
369+
370+
resource "google_compute_instance_template" "foobar" {
371+
name = "instance-tpl-%s"
372+
machine_type = "n1-standard-1"
373+
374+
disk {
375+
source_image = "debian-7-wheezy-v20160211"
376+
auto_delete = true
377+
disk_size_gb = 10
378+
boot = true
379+
}
380+
381+
network_interface {
382+
network = "${google_compute_network.auto-network.name}"
383+
}
384+
385+
metadata {
386+
foo = "bar"
387+
}
388+
}`, network, acctest.RandString(10))
389+
}
390+
391+
var testAccComputeInstanceTemplate_subnet_custom = fmt.Sprintf(`
392+
resource "google_compute_network" "network" {
393+
name = "network-%s"
394+
auto_create_subnetworks = false
395+
}
396+
397+
resource "google_compute_subnetwork" "subnetwork" {
398+
name = "subnetwork-%s"
399+
ip_cidr_range = "10.0.0.0/24"
400+
region = "us-central1"
401+
network = "${google_compute_network.network.self_link}"
402+
}
403+
404+
resource "google_compute_instance_template" "foobar" {
405+
name = "instance-test-%s"
406+
machine_type = "n1-standard-1"
407+
region = "us-central1"
408+
409+
disk {
410+
source_image = "debian-7-wheezy-v20160211"
411+
auto_delete = true
412+
disk_size_gb = 10
413+
boot = true
414+
}
415+
416+
network_interface {
417+
subnetwork = "${google_compute_subnetwork.subnetwork.name}"
418+
}
419+
420+
metadata {
421+
foo = "bar"
422+
}
423+
}`, acctest.RandString(10), acctest.RandString(10), acctest.RandString(10))

builtin/providers/google/resource_compute_instance_test.go

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,48 @@ func TestAccComputeInstance_scheduling(t *testing.T) {
306306
})
307307
}
308308

309+
func TestAccComputeInstance_subnet_auto(t *testing.T) {
310+
var instance compute.Instance
311+
var instanceName = fmt.Sprintf("instance-test-%s", acctest.RandString(10))
312+
313+
resource.Test(t, resource.TestCase{
314+
PreCheck: func() { testAccPreCheck(t) },
315+
Providers: testAccProviders,
316+
CheckDestroy: testAccCheckComputeInstanceDestroy,
317+
Steps: []resource.TestStep{
318+
resource.TestStep{
319+
Config: testAccComputeInstance_subnet_auto(instanceName),
320+
Check: resource.ComposeTestCheckFunc(
321+
testAccCheckComputeInstanceExists(
322+
"google_compute_instance.foobar", &instance),
323+
testAccCheckComputeInstanceHasSubnet(&instance),
324+
),
325+
},
326+
},
327+
})
328+
}
329+
330+
func TestAccComputeInstance_subnet_custom(t *testing.T) {
331+
var instance compute.Instance
332+
var instanceName = fmt.Sprintf("instance-test-%s", acctest.RandString(10))
333+
334+
resource.Test(t, resource.TestCase{
335+
PreCheck: func() { testAccPreCheck(t) },
336+
Providers: testAccProviders,
337+
CheckDestroy: testAccCheckComputeInstanceDestroy,
338+
Steps: []resource.TestStep{
339+
resource.TestStep{
340+
Config: testAccComputeInstance_subnet_custom(instanceName),
341+
Check: resource.ComposeTestCheckFunc(
342+
testAccCheckComputeInstanceExists(
343+
"google_compute_instance.foobar", &instance),
344+
testAccCheckComputeInstanceHasSubnet(&instance),
345+
),
346+
},
347+
},
348+
})
349+
}
350+
309351
func testAccCheckComputeInstanceDestroy(s *terraform.State) error {
310352
config := testAccProvider.Meta().(*Config)
311353

@@ -451,6 +493,18 @@ func testAccCheckComputeInstanceServiceAccount(instance *compute.Instance, scope
451493
}
452494
}
453495

496+
func testAccCheckComputeInstanceHasSubnet(instance *compute.Instance) resource.TestCheckFunc {
497+
return func(s *terraform.State) error {
498+
for _, i := range instance.NetworkInterfaces {
499+
if i.Subnetwork == "" {
500+
return fmt.Errorf("no subnet")
501+
}
502+
}
503+
504+
return nil
505+
}
506+
}
507+
454508
func testAccComputeInstance_basic_deprecated_network(instance string) string {
455509
return fmt.Sprintf(`
456510
resource "google_compute_instance" "foobar" {
@@ -748,3 +802,58 @@ func testAccComputeInstance_scheduling(instance string) string {
748802
}
749803
}`, instance)
750804
}
805+
806+
func testAccComputeInstance_subnet_auto(instance string) string {
807+
return fmt.Sprintf(`
808+
resource "google_compute_network" "inst-test-network" {
809+
name = "inst-test-network-%s"
810+
auto_create_subnetworks = true
811+
}
812+
813+
resource "google_compute_instance" "foobar" {
814+
name = "%s"
815+
machine_type = "n1-standard-1"
816+
zone = "us-central1-a"
817+
818+
disk {
819+
image = "debian-7-wheezy-v20140814"
820+
}
821+
822+
network_interface {
823+
network = "${google_compute_network.inst-test-network.name}"
824+
access_config { }
825+
}
826+
827+
}`, acctest.RandString(10), instance)
828+
}
829+
830+
func testAccComputeInstance_subnet_custom(instance string) string {
831+
return fmt.Sprintf(`
832+
resource "google_compute_network" "inst-test-network" {
833+
name = "inst-test-network-%s"
834+
auto_create_subnetworks = false
835+
}
836+
837+
resource "google_compute_subnetwork" "inst-test-subnetwork" {
838+
name = "inst-test-subnetwork-%s"
839+
ip_cidr_range = "10.0.0.0/16"
840+
region = "us-central1"
841+
network = "${google_compute_network.inst-test-network.self_link}"
842+
}
843+
844+
resource "google_compute_instance" "foobar" {
845+
name = "%s"
846+
machine_type = "n1-standard-1"
847+
zone = "us-central1-a"
848+
849+
disk {
850+
image = "debian-7-wheezy-v20140814"
851+
}
852+
853+
network_interface {
854+
subnetwork = "${google_compute_subnetwork.inst-test-subnetwork.name}"
855+
access_config { }
856+
}
857+
858+
}`, acctest.RandString(10), acctest.RandString(10), instance)
859+
}

0 commit comments

Comments
 (0)