Skip to content

Commit

Permalink
Merge pull request #6112 from hashicorp/sethvargo/gcp_project
Browse files Browse the repository at this point in the history
Move GCP projece attribute onto resources, inherit from provider
  • Loading branch information
sethvargo committed Apr 11, 2016
2 parents cc298b3 + 29b0731 commit 183100a
Show file tree
Hide file tree
Showing 76 changed files with 3,004 additions and 1,749 deletions.
34 changes: 31 additions & 3 deletions builtin/providers/google/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ func Provider() terraform.ResourceProvider {

"project": &schema.Schema{
Type: schema.TypeString,
Required: true,
DefaultFunc: schema.EnvDefaultFunc("GOOGLE_PROJECT", nil),
Optional: true,
DefaultFunc: schema.EnvDefaultFunc("GOOGLE_PROJECT", ""),
},

"region": &schema.Schema{
Expand Down Expand Up @@ -122,7 +122,7 @@ func validateAccountFile(v interface{}, k string) (warnings []string, errors []e
errors = append(errors, fmt.Errorf("Error loading Account File: %s", err))
}
if wasPath {
warnings = append(warnings, `account_file was provided as a path instead of
warnings = append(warnings, `account_file was provided as a path instead of
as file contents. This support will be removed in the future. Please update
your configuration to use ${file("filename.json")} instead.`)
}
Expand Down Expand Up @@ -158,3 +158,31 @@ func getRegionFromZone(zone string) string {
}
return ""
}

// getRegion reads the "region" field from the given resource data and falls
// back to the provider's value if not given. If the provider's value is not
// given, an error is returned.
func getRegion(d *schema.ResourceData, config *Config) (string, error) {
res, ok := d.GetOk("region")
if !ok {
if config.Region != "" {
return config.Region, nil
}
return "", fmt.Errorf("%q: required field is not set", "region")
}
return res.(string), nil
}

// getProject reads the "project" field from the given resource data and falls
// back to the provider's value if not given. If the provider's value is not
// given, an error is returned.
func getProject(d *schema.ResourceData, config *Config) (string, error) {
res, ok := d.GetOk("project")
if !ok {
if config.Project != "" {
return config.Project, nil
}
return "", fmt.Errorf("%q: required field is not set", "project")
}
return res.(string), nil
}
56 changes: 40 additions & 16 deletions builtin/providers/google/resource_compute_address.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,36 +27,43 @@ func resourceComputeAddress() *schema.Resource {
Computed: true,
},

"self_link": &schema.Schema{
"project": &schema.Schema{
Type: schema.TypeString,
Computed: true,
Optional: true,
ForceNew: true,
},

"region": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
},
}
}

func getOptionalRegion(d *schema.ResourceData, config *Config) string {
if res, ok := d.GetOk("region"); !ok {
return config.Region
} else {
return res.(string)
"self_link": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
},
}
}

func resourceComputeAddressCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
region := getOptionalRegion(d, config)

region, err := getRegion(d, config)
if err != nil {
return err
}

project, err := getProject(d, config)
if err != nil {
return err
}

// Build the address parameter
addr := &compute.Address{Name: d.Get("name").(string)}
op, err := config.clientCompute.Addresses.Insert(
config.Project, region, addr).Do()
project, region, addr).Do()
if err != nil {
return fmt.Errorf("Error creating address: %s", err)
}
Expand All @@ -75,10 +82,18 @@ func resourceComputeAddressCreate(d *schema.ResourceData, meta interface{}) erro
func resourceComputeAddressRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)

region := getOptionalRegion(d, config)
region, err := getRegion(d, config)
if err != nil {
return err
}

project, err := getProject(d, config)
if err != nil {
return err
}

addr, err := config.clientCompute.Addresses.Get(
config.Project, region, d.Id()).Do()
project, region, d.Id()).Do()
if err != nil {
if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 {
// The resource doesn't exist anymore
Expand All @@ -100,11 +115,20 @@ func resourceComputeAddressRead(d *schema.ResourceData, meta interface{}) error
func resourceComputeAddressDelete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)

region := getOptionalRegion(d, config)
region, err := getRegion(d, config)
if err != nil {
return err
}

project, err := getProject(d, config)
if err != nil {
return err
}

// Delete the address
log.Printf("[DEBUG] address delete request")
op, err := config.clientCompute.Addresses.Delete(
config.Project, region, d.Id()).Do()
project, region, d.Id()).Do()
if err != nil {
return fmt.Errorf("Error deleting address: %s", err)
}
Expand Down
47 changes: 36 additions & 11 deletions builtin/providers/google/resource_compute_autoscaler.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,15 @@ func resourceComputeAutoscaler() *schema.Resource {
Required: true,
},

"description": &schema.Schema{
"target": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Required: true,
},

"target": &schema.Schema{
"zone": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
},

"autoscaling_policy": &schema.Schema{
Expand Down Expand Up @@ -105,9 +106,14 @@ func resourceComputeAutoscaler() *schema.Resource {
},
},

"zone": &schema.Schema{
"description": &schema.Schema{
Type: schema.TypeString,
Required: true,
Optional: true,
},

"project": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},

Expand All @@ -120,7 +126,6 @@ func resourceComputeAutoscaler() *schema.Resource {
}

func buildAutoscaler(d *schema.ResourceData) (*compute.Autoscaler, error) {

// Build the parameter
scaler := &compute.Autoscaler{
Name: d.Get("name").(string),
Expand Down Expand Up @@ -200,10 +205,15 @@ func buildAutoscaler(d *schema.ResourceData) (*compute.Autoscaler, error) {
func resourceComputeAutoscalerCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)

project, err := getProject(d, config)
if err != nil {
return err
}

// Get the zone
log.Printf("[DEBUG] Loading zone: %s", d.Get("zone").(string))
zone, err := config.clientCompute.Zones.Get(
config.Project, d.Get("zone").(string)).Do()
project, d.Get("zone").(string)).Do()
if err != nil {
return fmt.Errorf(
"Error loading zone '%s': %s", d.Get("zone").(string), err)
Expand All @@ -215,7 +225,7 @@ func resourceComputeAutoscalerCreate(d *schema.ResourceData, meta interface{}) e
}

op, err := config.clientCompute.Autoscalers.Insert(
config.Project, zone.Name, scaler).Do()
project, zone.Name, scaler).Do()
if err != nil {
return fmt.Errorf("Error creating Autoscaler: %s", err)
}
Expand All @@ -234,9 +244,14 @@ func resourceComputeAutoscalerCreate(d *schema.ResourceData, meta interface{}) e
func resourceComputeAutoscalerRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)

project, err := getProject(d, config)
if err != nil {
return err
}

zone := d.Get("zone").(string)
scaler, err := config.clientCompute.Autoscalers.Get(
config.Project, zone, d.Id()).Do()
project, zone, d.Id()).Do()
if err != nil {
if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 {
// The resource doesn't exist anymore
Expand All @@ -257,6 +272,11 @@ func resourceComputeAutoscalerRead(d *schema.ResourceData, meta interface{}) err
func resourceComputeAutoscalerUpdate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)

project, err := getProject(d, config)
if err != nil {
return err
}

zone := d.Get("zone").(string)

scaler, err := buildAutoscaler(d)
Expand All @@ -265,7 +285,7 @@ func resourceComputeAutoscalerUpdate(d *schema.ResourceData, meta interface{}) e
}

op, err := config.clientCompute.Autoscalers.Patch(
config.Project, zone, d.Id(), scaler).Do()
project, zone, d.Id(), scaler).Do()
if err != nil {
return fmt.Errorf("Error updating Autoscaler: %s", err)
}
Expand All @@ -284,9 +304,14 @@ func resourceComputeAutoscalerUpdate(d *schema.ResourceData, meta interface{}) e
func resourceComputeAutoscalerDelete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)

project, err := getProject(d, config)
if err != nil {
return err
}

zone := d.Get("zone").(string)
op, err := config.clientCompute.Autoscalers.Delete(
config.Project, zone, d.Id()).Do()
project, zone, d.Id()).Do()
if err != nil {
return fmt.Errorf("Error deleting autoscaler: %s", err)
}
Expand Down
Loading

0 comments on commit 183100a

Please sign in to comment.