-
Notifications
You must be signed in to change notification settings - Fork 9.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
provider/google: global forwarding rule tests & documentation
- Loading branch information
Showing
5 changed files
with
404 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
141 changes: 141 additions & 0 deletions
141
builtin/providers/google/resource_compute_global_forwarding_rule.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,141 @@ | ||
package google | ||
|
||
import ( | ||
"fmt" | ||
"log" | ||
|
||
"github.com/hashicorp/terraform/helper/schema" | ||
"google.golang.org/api/compute/v1" | ||
"google.golang.org/api/googleapi" | ||
) | ||
|
||
func resourceComputeGlobalForwardingRule() *schema.Resource { | ||
return &schema.Resource{ | ||
Create: resourceComputeGlobalForwardingRuleCreate, | ||
Read: resourceComputeGlobalForwardingRuleRead, | ||
Delete: resourceComputeGlobalForwardingRuleDelete, | ||
|
||
Schema: map[string]*schema.Schema{ | ||
"ip_address": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Optional: true, | ||
ForceNew: true, | ||
Computed: true, | ||
}, | ||
|
||
"ip_protocol": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Optional: true, | ||
ForceNew: true, | ||
Computed: true, | ||
}, | ||
|
||
"description": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Optional: true, | ||
ForceNew: true, | ||
}, | ||
|
||
"name": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Required: true, | ||
ForceNew: true, | ||
}, | ||
|
||
"port_range": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Optional: true, | ||
ForceNew: true, | ||
}, | ||
|
||
"region": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Optional: true, | ||
ForceNew: true, | ||
}, | ||
|
||
"self_link": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
|
||
"target": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Required: true, | ||
ForceNew: true, | ||
}, | ||
}, | ||
} | ||
} | ||
|
||
func resourceComputeGlobalForwardingRuleCreate(d *schema.ResourceData, meta interface{}) error { | ||
config := meta.(*Config) | ||
|
||
frule := &compute.ForwardingRule{ | ||
IPAddress: d.Get("ip_address").(string), | ||
IPProtocol: d.Get("ip_protocol").(string), | ||
Description: d.Get("description").(string), | ||
Name: d.Get("name").(string), | ||
PortRange: d.Get("port_range").(string), | ||
Target: d.Get("target").(string), | ||
} | ||
|
||
op, err := config.clientCompute.GlobalForwardingRules.Insert( | ||
config.Project, frule).Do() | ||
if err != nil { | ||
return fmt.Errorf("Error creating Global Forwarding Rule: %s", err) | ||
} | ||
|
||
// It probably maybe worked, so store the ID now | ||
d.SetId(frule.Name) | ||
|
||
err = computeOperationWaitGlobal(config, op, "Creating Global Fowarding Rule") | ||
if err != nil { | ||
return err | ||
} | ||
|
||
return resourceComputeGlobalForwardingRuleRead(d, meta) | ||
} | ||
|
||
func resourceComputeGlobalForwardingRuleRead(d *schema.ResourceData, meta interface{}) error { | ||
config := meta.(*Config) | ||
|
||
frule, err := config.clientCompute.GlobalForwardingRules.Get( | ||
config.Project, d.Id()).Do() | ||
if err != nil { | ||
if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { | ||
// The resource doesn't exist anymore | ||
d.SetId("") | ||
|
||
return nil | ||
} | ||
|
||
return fmt.Errorf("Error reading GlobalForwardingRule: %s", err) | ||
} | ||
|
||
d.Set("ip_address", frule.IPAddress) | ||
d.Set("ip_protocol", frule.IPProtocol) | ||
d.Set("self_link", frule.SelfLink) | ||
|
||
return nil | ||
} | ||
|
||
func resourceComputeGlobalForwardingRuleDelete(d *schema.ResourceData, meta interface{}) error { | ||
config := meta.(*Config) | ||
|
||
// Delete the GlobalForwardingRule | ||
log.Printf("[DEBUG] GlobalForwardingRule delete request") | ||
op, err := config.clientCompute.GlobalForwardingRules.Delete( | ||
config.Project, d.Id()).Do() | ||
if err != nil { | ||
return fmt.Errorf("Error deleting GlobalForwardingRule: %s", err) | ||
} | ||
|
||
err = computeOperationWaitGlobal(config, op, "Deleting GlobalForwarding Rule") | ||
if err != nil { | ||
return err | ||
} | ||
|
||
d.SetId("") | ||
return nil | ||
} |
208 changes: 208 additions & 0 deletions
208
builtin/providers/google/resource_compute_global_forwarding_rule_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,208 @@ | ||
package google | ||
|
||
import ( | ||
"fmt" | ||
"testing" | ||
|
||
"github.com/hashicorp/terraform/helper/resource" | ||
"github.com/hashicorp/terraform/terraform" | ||
) | ||
|
||
func TestAccComputeGlobalForwardingRule_basic(t *testing.T) { | ||
resource.Test(t, resource.TestCase{ | ||
PreCheck: func() { testAccPreCheck(t) }, | ||
Providers: testAccProviders, | ||
CheckDestroy: testAccCheckComputeGlobalForwardingRuleDestroy, | ||
Steps: []resource.TestStep{ | ||
resource.TestStep{ | ||
Config: testAccComputeGlobalForwardingRule_basic1, | ||
Check: resource.ComposeTestCheckFunc( | ||
testAccCheckComputeGlobalForwardingRuleExists( | ||
"google_compute_global_forwarding_rule.foobar"), | ||
), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func TestAccComputeGlobalForwardingRule_update(t *testing.T) { | ||
resource.Test(t, resource.TestCase{ | ||
PreCheck: func() { testAccPreCheck(t) }, | ||
Providers: testAccProviders, | ||
CheckDestroy: testAccCheckComputeGlobalForwardingRuleDestroy, | ||
Steps: []resource.TestStep{ | ||
resource.TestStep{ | ||
Config: testAccComputeGlobalForwardingRule_basic1, | ||
Check: resource.ComposeTestCheckFunc( | ||
testAccCheckComputeGlobalForwardingRuleExists( | ||
"google_compute_global_forwarding_rule.foobar"), | ||
), | ||
}, | ||
|
||
resource.TestStep{ | ||
Config: testAccComputeGlobalForwardingRule_basic2, | ||
Check: resource.ComposeTestCheckFunc( | ||
testAccCheckComputeGlobalForwardingRuleExists( | ||
"google_compute_global_forwarding_rule.foobar"), | ||
), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func testAccCheckComputeGlobalForwardingRuleDestroy(s *terraform.State) error { | ||
config := testAccProvider.Meta().(*Config) | ||
|
||
for _, rs := range s.RootModule().Resources { | ||
if rs.Type != "google_compute_global_forwarding_rule" { | ||
continue | ||
} | ||
|
||
_, err := config.clientCompute.GlobalForwardingRules.Get( | ||
config.Project, rs.Primary.ID).Do() | ||
if err == nil { | ||
return fmt.Errorf("Global Forwarding Rule still exists") | ||
} | ||
} | ||
|
||
return nil | ||
} | ||
|
||
func testAccCheckComputeGlobalForwardingRuleExists(n string) resource.TestCheckFunc { | ||
return func(s *terraform.State) error { | ||
rs, ok := s.RootModule().Resources[n] | ||
if !ok { | ||
return fmt.Errorf("Not found: %s", n) | ||
} | ||
|
||
if rs.Primary.ID == "" { | ||
return fmt.Errorf("No ID is set") | ||
} | ||
|
||
config := testAccProvider.Meta().(*Config) | ||
|
||
found, err := config.clientCompute.GlobalForwardingRules.Get( | ||
config.Project, rs.Primary.ID).Do() | ||
if err != nil { | ||
return err | ||
} | ||
|
||
if found.Name != rs.Primary.ID { | ||
return fmt.Errorf("Global Forwarding Rule not found") | ||
} | ||
|
||
return nil | ||
} | ||
} | ||
|
||
const testAccComputeGlobalForwardingRule_basic1 = ` | ||
resource "google_compute_global_forwarding_rule" "foobar" { | ||
description = "Resource created for Terraform acceptance testing" | ||
ip_protocol = "TCP" | ||
name = "terraform-test" | ||
port_range = "80" | ||
target = "${google_compute_target_http_proxy.foobar1.self_link}" | ||
} | ||
resource "google_compute_target_http_proxy" "foobar1" { | ||
description = "Resource created for Terraform acceptance testing" | ||
name = "terraform-test1" | ||
url_map = "${google_compute_url_map.foobar.self_link}" | ||
} | ||
resource "google_compute_target_http_proxy" "foobar2" { | ||
description = "Resource created for Terraform acceptance testing" | ||
name = "terraform-test2" | ||
url_map = "${google_compute_url_map.foobar.self_link}" | ||
} | ||
resource "google_compute_backend_service" "foobar" { | ||
name = "service" | ||
health_checks = ["${google_compute_http_health_check.zero.self_link}"] | ||
} | ||
resource "google_compute_http_health_check" "zero" { | ||
name = "tf-test-zero" | ||
request_path = "/" | ||
check_interval_sec = 1 | ||
timeout_sec = 1 | ||
} | ||
resource "google_compute_url_map" "foobar" { | ||
name = "myurlmap" | ||
default_service = "${google_compute_backend_service.foobar.self_link}" | ||
host_rule { | ||
hosts = ["mysite.com", "myothersite.com"] | ||
path_matcher = "boop" | ||
} | ||
path_matcher { | ||
default_service = "${google_compute_backend_service.foobar.self_link}" | ||
name = "boop" | ||
path_rule { | ||
paths = ["/*"] | ||
service = "${google_compute_backend_service.foobar.self_link}" | ||
} | ||
} | ||
test { | ||
host = "mysite.com" | ||
path = "/*" | ||
service = "${google_compute_backend_service.foobar.self_link}" | ||
} | ||
} | ||
` | ||
|
||
const testAccComputeGlobalForwardingRule_basic2 = ` | ||
resource "google_compute_global_forwarding_rule" "foobar" { | ||
description = "Resource created for Terraform acceptance testing" | ||
ip_protocol = "TCP" | ||
name = "terraform-test" | ||
port_range = "80" | ||
target = "${google_compute_target_http_proxy.foobar2.self_link}" | ||
} | ||
resource "google_compute_target_http_proxy" "foobar1" { | ||
description = "Resource created for Terraform acceptance testing" | ||
name = "terraform-test1" | ||
url_map = "${google_compute_url_map.foobar.self_link}" | ||
} | ||
resource "google_compute_target_http_proxy" "foobar2" { | ||
description = "Resource created for Terraform acceptance testing" | ||
name = "terraform-test2" | ||
url_map = "${google_compute_url_map.foobar.self_link}" | ||
} | ||
resource "google_compute_backend_service" "foobar" { | ||
name = "service" | ||
health_checks = ["${google_compute_http_health_check.zero.self_link}"] | ||
} | ||
resource "google_compute_http_health_check" "zero" { | ||
name = "tf-test-zero" | ||
request_path = "/" | ||
check_interval_sec = 1 | ||
timeout_sec = 1 | ||
} | ||
resource "google_compute_url_map" "foobar" { | ||
name = "myurlmap" | ||
default_service = "${google_compute_backend_service.foobar.self_link}" | ||
host_rule { | ||
hosts = ["mysite.com", "myothersite.com"] | ||
path_matcher = "boop" | ||
} | ||
path_matcher { | ||
default_service = "${google_compute_backend_service.foobar.self_link}" | ||
name = "boop" | ||
path_rule { | ||
paths = ["/*"] | ||
service = "${google_compute_backend_service.foobar.self_link}" | ||
} | ||
} | ||
test { | ||
host = "mysite.com" | ||
path = "/*" | ||
service = "${google_compute_backend_service.foobar.self_link}" | ||
} | ||
} | ||
` |
Oops, something went wrong.