make 'region' resource-specific; create new client for each crud operation

This commit is contained in:
Jon Perritt 2015-01-26 10:54:07 -07:00
parent bfe492d407
commit 8579c8693a
11 changed files with 357 additions and 181 deletions

View File

@ -1,25 +0,0 @@
package openstack
import (
"github.com/rackspace/gophercloud"
"github.com/rackspace/gophercloud/openstack"
)
func newClient(c *Config, service, region string, version int) (*gophercloud.ServiceClient, error) {
var serviceClient *gophercloud.ServiceClient
switch service {
case "compute":
if version == 2 {
serviceClient, err = openstack.NewComputeV2(c.osClient, gophercloud.EndpointOpts{
Region: region,
})
}
case "networking":
if version == 2 {
serviceClient, err = openstack.NewNetworkV2(c.osClient, gophercloud.EndpointOpts{
Region: region,
})
}
}
return serviceClient, err
}

View File

@ -9,6 +9,7 @@ import (
"github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/schema"
"github.com/rackspace/gophercloud" "github.com/rackspace/gophercloud"
"github.com/rackspace/gophercloud/openstack"
"github.com/rackspace/gophercloud/openstack/compute/v2/extensions/keypairs" "github.com/rackspace/gophercloud/openstack/compute/v2/extensions/keypairs"
"github.com/rackspace/gophercloud/openstack/compute/v2/extensions/secgroups" "github.com/rackspace/gophercloud/openstack/compute/v2/extensions/secgroups"
"github.com/rackspace/gophercloud/openstack/compute/v2/servers" "github.com/rackspace/gophercloud/openstack/compute/v2/servers"
@ -23,24 +24,27 @@ func resourceComputeInstance() *schema.Resource {
Delete: resourceComputeInstanceDelete, Delete: resourceComputeInstanceDelete,
Schema: map[string]*schema.Schema{ Schema: map[string]*schema.Schema{
"region": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
DefaultFunc: envDefaultFunc("OS_REGION_NAME"),
},
"name": &schema.Schema{ "name": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: false, ForceNew: false,
}, },
"image_ref": &schema.Schema{ "image_ref": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: false, ForceNew: false,
}, },
"flavor_ref": &schema.Schema{ "flavor_ref": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: false, ForceNew: false,
}, },
"security_groups": &schema.Schema{ "security_groups": &schema.Schema{
Type: schema.TypeSet, Type: schema.TypeSet,
Optional: true, Optional: true,
@ -50,13 +54,11 @@ func resourceComputeInstance() *schema.Resource {
return hashcode.String(v.(string)) return hashcode.String(v.(string))
}, },
}, },
"availability_zone": &schema.Schema{ "availability_zone": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: true, ForceNew: true,
}, },
"networks": &schema.Schema{ "networks": &schema.Schema{
Type: schema.TypeList, Type: schema.TypeList,
Optional: true, Optional: true,
@ -67,12 +69,10 @@ func resourceComputeInstance() *schema.Resource {
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
}, },
"port": &schema.Schema{ "port": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
}, },
"fixed_ip": &schema.Schema{ "fixed_ip": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
@ -80,39 +80,33 @@ func resourceComputeInstance() *schema.Resource {
}, },
}, },
}, },
"metadata": &schema.Schema{ "metadata": &schema.Schema{
Type: schema.TypeMap, Type: schema.TypeMap,
Optional: true, Optional: true,
ForceNew: false, ForceNew: false,
}, },
"config_drive": &schema.Schema{ "config_drive": &schema.Schema{
Type: schema.TypeBool, Type: schema.TypeBool,
Optional: true, Optional: true,
ForceNew: true, ForceNew: true,
}, },
"admin_pass": &schema.Schema{ "admin_pass": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: false, ForceNew: false,
}, },
"access_ip_v4": &schema.Schema{ "access_ip_v4": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Computed: true, Computed: true,
Optional: true, Optional: true,
ForceNew: false, ForceNew: false,
}, },
"access_ip_v6": &schema.Schema{ "access_ip_v6": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Computed: true, Computed: true,
Optional: true, Optional: true,
ForceNew: false, ForceNew: false,
}, },
"key_pair": &schema.Schema{ "key_pair": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
@ -124,7 +118,13 @@ func resourceComputeInstance() *schema.Resource {
func resourceComputeInstanceCreate(d *schema.ResourceData, meta interface{}) error { func resourceComputeInstanceCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.computeV2Client computeClient, err := openstack.NewComputeV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack compute client: %s", err)
}
var createOpts servers.CreateOptsBuilder var createOpts servers.CreateOptsBuilder
@ -148,7 +148,7 @@ func resourceComputeInstanceCreate(d *schema.ResourceData, meta interface{}) err
} }
log.Printf("[INFO] Requesting instance creation") log.Printf("[INFO] Requesting instance creation")
server, err := servers.Create(osClient, createOpts).Extract() server, err := servers.Create(computeClient, createOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error creating OpenStack server: %s", err) return fmt.Errorf("Error creating OpenStack server: %s", err)
} }
@ -166,7 +166,7 @@ func resourceComputeInstanceCreate(d *schema.ResourceData, meta interface{}) err
stateConf := &resource.StateChangeConf{ stateConf := &resource.StateChangeConf{
Pending: []string{"BUILD"}, Pending: []string{"BUILD"},
Target: "ACTIVE", Target: "ACTIVE",
Refresh: ServerStateRefreshFunc(osClient, server.ID), Refresh: ServerStateRefreshFunc(computeClient, server.ID),
Timeout: 10 * time.Minute, Timeout: 10 * time.Minute,
Delay: 10 * time.Second, Delay: 10 * time.Second,
MinTimeout: 3 * time.Second, MinTimeout: 3 * time.Second,
@ -184,9 +184,14 @@ func resourceComputeInstanceCreate(d *schema.ResourceData, meta interface{}) err
func resourceComputeInstanceRead(d *schema.ResourceData, meta interface{}) error { func resourceComputeInstanceRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.computeV2Client computeClient, err := openstack.NewComputeV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack compute client: %s", err)
}
server, err := servers.Get(osClient, d.Id()).Extract() server, err := servers.Get(computeClient, d.Id()).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error retrieving OpenStack server: %s", err) return fmt.Errorf("Error retrieving OpenStack server: %s", err)
} }
@ -223,7 +228,7 @@ func resourceComputeInstanceRead(d *schema.ResourceData, meta interface{}) error
d.Set("metadata", server.Metadata) d.Set("metadata", server.Metadata)
var currentSG []string var currentSG []string
err = secgroups.ListByServer(osClient, d.Id()).EachPage(func(page pagination.Page) (bool, error) { err = secgroups.ListByServer(computeClient, d.Id()).EachPage(func(page pagination.Page) (bool, error) {
secGrpList, err := secgroups.ExtractSecurityGroups(page) secGrpList, err := secgroups.ExtractSecurityGroups(page)
if err != nil { if err != nil {
return false, fmt.Errorf("Error setting security groups for OpenStack server: %s", err) return false, fmt.Errorf("Error setting security groups for OpenStack server: %s", err)
@ -248,7 +253,12 @@ func resourceComputeInstanceRead(d *schema.ResourceData, meta interface{}) error
func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) error { func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.computeV2Client computeClient, err := openstack.NewComputeV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack compute client: %s", err)
}
var updateOpts servers.UpdateOpts var updateOpts servers.UpdateOpts
if d.HasChange("name") { if d.HasChange("name") {
@ -263,7 +273,7 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
log.Printf("[DEBUG] Updating Server %s with options: %+v", d.Id(), updateOpts) log.Printf("[DEBUG] Updating Server %s with options: %+v", d.Id(), updateOpts)
_, err := servers.Update(osClient, d.Id(), updateOpts).Extract() _, err = servers.Update(computeClient, d.Id(), updateOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error updating OpenStack server: %s", err) return fmt.Errorf("Error updating OpenStack server: %s", err)
} }
@ -276,7 +286,7 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
metadataOpts[k] = v.(string) metadataOpts[k] = v.(string)
} }
_, err := servers.UpdateMetadata(osClient, d.Id(), metadataOpts).Extract() _, err := servers.UpdateMetadata(computeClient, d.Id(), metadataOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error updating OpenStack server (%s) metadata: %s", d.Id(), err) return fmt.Errorf("Error updating OpenStack server (%s) metadata: %s", d.Id(), err)
} }
@ -293,7 +303,7 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
log.Printf("[DEBUG] Security groups to remove: %v", secgroupsToRemove) log.Printf("[DEBUG] Security groups to remove: %v", secgroupsToRemove)
for _, g := range secgroupsToAdd.List() { for _, g := range secgroupsToAdd.List() {
err := secgroups.AddServerToGroup(osClient, d.Id(), g.(string)).ExtractErr() err := secgroups.AddServerToGroup(computeClient, d.Id(), g.(string)).ExtractErr()
if err != nil { if err != nil {
return fmt.Errorf("Error adding security group to OpenStack server (%s): %s", d.Id(), err) return fmt.Errorf("Error adding security group to OpenStack server (%s): %s", d.Id(), err)
} }
@ -301,7 +311,7 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
} }
for _, g := range secgroupsToRemove.List() { for _, g := range secgroupsToRemove.List() {
err := secgroups.RemoveServerFromGroup(osClient, d.Id(), g.(string)).ExtractErr() err := secgroups.RemoveServerFromGroup(computeClient, d.Id(), g.(string)).ExtractErr()
if err != nil { if err != nil {
return fmt.Errorf("Error removing security group from OpenStack server (%s): %s", d.Id(), err) return fmt.Errorf("Error removing security group from OpenStack server (%s): %s", d.Id(), err)
} }
@ -311,7 +321,7 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
if d.HasChange("admin_pass") { if d.HasChange("admin_pass") {
if newPwd, ok := d.Get("admin_pass").(string); ok { if newPwd, ok := d.Get("admin_pass").(string); ok {
err := servers.ChangeAdminPassword(osClient, d.Id(), newPwd).ExtractErr() err := servers.ChangeAdminPassword(computeClient, d.Id(), newPwd).ExtractErr()
if err != nil { if err != nil {
return fmt.Errorf("Error changing admin password of OpenStack server (%s): %s", d.Id(), err) return fmt.Errorf("Error changing admin password of OpenStack server (%s): %s", d.Id(), err)
} }
@ -322,7 +332,7 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
resizeOpts := &servers.ResizeOpts{ resizeOpts := &servers.ResizeOpts{
FlavorRef: d.Get("flavor_ref").(string), FlavorRef: d.Get("flavor_ref").(string),
} }
err := servers.Resize(osClient, d.Id(), resizeOpts).ExtractErr() err := servers.Resize(computeClient, d.Id(), resizeOpts).ExtractErr()
if err != nil { if err != nil {
return fmt.Errorf("Error resizing OpenStack server: %s", err) return fmt.Errorf("Error resizing OpenStack server: %s", err)
} }
@ -333,7 +343,7 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
stateConf := &resource.StateChangeConf{ stateConf := &resource.StateChangeConf{
Pending: []string{"RESIZE"}, Pending: []string{"RESIZE"},
Target: "VERIFY_RESIZE", Target: "VERIFY_RESIZE",
Refresh: ServerStateRefreshFunc(osClient, d.Id()), Refresh: ServerStateRefreshFunc(computeClient, d.Id()),
Timeout: 3 * time.Minute, Timeout: 3 * time.Minute,
Delay: 10 * time.Second, Delay: 10 * time.Second,
MinTimeout: 3 * time.Second, MinTimeout: 3 * time.Second,
@ -346,7 +356,7 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
// Confirm resize. // Confirm resize.
log.Printf("[DEBUG] Confirming resize") log.Printf("[DEBUG] Confirming resize")
err = servers.ConfirmResize(osClient, d.Id()).ExtractErr() err = servers.ConfirmResize(computeClient, d.Id()).ExtractErr()
if err != nil { if err != nil {
return fmt.Errorf("Error confirming resize of OpenStack server: %s", err) return fmt.Errorf("Error confirming resize of OpenStack server: %s", err)
} }
@ -354,7 +364,7 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
stateConf = &resource.StateChangeConf{ stateConf = &resource.StateChangeConf{
Pending: []string{"VERIFY_RESIZE"}, Pending: []string{"VERIFY_RESIZE"},
Target: "ACTIVE", Target: "ACTIVE",
Refresh: ServerStateRefreshFunc(osClient, d.Id()), Refresh: ServerStateRefreshFunc(computeClient, d.Id()),
Timeout: 3 * time.Minute, Timeout: 3 * time.Minute,
Delay: 10 * time.Second, Delay: 10 * time.Second,
MinTimeout: 3 * time.Second, MinTimeout: 3 * time.Second,
@ -371,9 +381,14 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
func resourceComputeInstanceDelete(d *schema.ResourceData, meta interface{}) error { func resourceComputeInstanceDelete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.computeV2Client computeClient, err := openstack.NewComputeV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack compute client: %s", err)
}
err := servers.Delete(osClient, d.Id()).ExtractErr() err = servers.Delete(computeClient, d.Id()).ExtractErr()
if err != nil { if err != nil {
return fmt.Errorf("Error deleting OpenStack server: %s", err) return fmt.Errorf("Error deleting OpenStack server: %s", err)
} }
@ -383,7 +398,7 @@ func resourceComputeInstanceDelete(d *schema.ResourceData, meta interface{}) err
stateConf := &resource.StateChangeConf{ stateConf := &resource.StateChangeConf{
Target: "", Target: "",
Refresh: ServerStateRefreshFunc(osClient, d.Id()), Refresh: ServerStateRefreshFunc(computeClient, d.Id()),
Timeout: 10 * time.Minute, Timeout: 10 * time.Minute,
Delay: 10 * time.Second, Delay: 10 * time.Second,
MinTimeout: 3 * time.Second, MinTimeout: 3 * time.Second,

View File

@ -4,6 +4,8 @@ import (
"fmt" "fmt"
"github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/schema"
"github.com/rackspace/gophercloud"
"github.com/rackspace/gophercloud/openstack"
"github.com/rackspace/gophercloud/openstack/compute/v2/extensions/keypairs" "github.com/rackspace/gophercloud/openstack/compute/v2/extensions/keypairs"
) )
@ -14,12 +16,17 @@ func resourceComputeKeypair() *schema.Resource {
Delete: resourceComputeKeypairDelete, Delete: resourceComputeKeypairDelete,
Schema: map[string]*schema.Schema{ Schema: map[string]*schema.Schema{
"region": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
DefaultFunc: envDefaultFunc("OS_REGION_NAME"),
},
"name": &schema.Schema{ "name": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"public_key": &schema.Schema{ "public_key": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
@ -31,14 +38,19 @@ func resourceComputeKeypair() *schema.Resource {
func resourceComputeKeypairCreate(d *schema.ResourceData, meta interface{}) error { func resourceComputeKeypairCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.computeV2Client computeClient, err := openstack.NewComputeV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack compute client: %s", err)
}
createOpts := keypairs.CreateOpts{ createOpts := keypairs.CreateOpts{
Name: d.Get("name").(string), Name: d.Get("name").(string),
PublicKey: d.Get("public_key").(string), PublicKey: d.Get("public_key").(string),
} }
kp, err := keypairs.Create(osClient, createOpts).Extract() kp, err := keypairs.Create(computeClient, createOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error creating OpenStack keypair: %s", err) return fmt.Errorf("Error creating OpenStack keypair: %s", err)
} }
@ -50,9 +62,14 @@ func resourceComputeKeypairCreate(d *schema.ResourceData, meta interface{}) erro
func resourceComputeKeypairRead(d *schema.ResourceData, meta interface{}) error { func resourceComputeKeypairRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.computeV2Client computeClient, err := openstack.NewComputeV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack compute client: %s", err)
}
kp, err := keypairs.Get(osClient, d.Id()).Extract() kp, err := keypairs.Get(computeClient, d.Id()).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error retrieving OpenStack keypair: %s", err) return fmt.Errorf("Error retrieving OpenStack keypair: %s", err)
} }
@ -65,9 +82,14 @@ func resourceComputeKeypairRead(d *schema.ResourceData, meta interface{}) error
func resourceComputeKeypairDelete(d *schema.ResourceData, meta interface{}) error { func resourceComputeKeypairDelete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.computeV2Client computeClient, err := openstack.NewComputeV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack compute client: %s", err)
}
err := keypairs.Delete(osClient, d.Id()).ExtractErr() err = keypairs.Delete(computeClient, d.Id()).ExtractErr()
if err != nil { if err != nil {
return fmt.Errorf("Error deleting OpenStack keypair: %s", err) return fmt.Errorf("Error deleting OpenStack keypair: %s", err)
} }

View File

@ -5,6 +5,8 @@ import (
"log" "log"
"github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/schema"
"github.com/rackspace/gophercloud"
"github.com/rackspace/gophercloud/openstack"
"github.com/rackspace/gophercloud/openstack/compute/v2/extensions/secgroups" "github.com/rackspace/gophercloud/openstack/compute/v2/extensions/secgroups"
) )
@ -16,12 +18,17 @@ func resourceComputeSecGroup() *schema.Resource {
Delete: resourceComputeSecGroupDelete, Delete: resourceComputeSecGroupDelete,
Schema: map[string]*schema.Schema{ Schema: map[string]*schema.Schema{
"region": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
DefaultFunc: envDefaultFunc("OS_REGION_NAME"),
},
"name": &schema.Schema{ "name": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: false, ForceNew: false,
}, },
"description": &schema.Schema{ "description": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
@ -33,14 +40,19 @@ func resourceComputeSecGroup() *schema.Resource {
func resourceComputeSecGroupCreate(d *schema.ResourceData, meta interface{}) error { func resourceComputeSecGroupCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.computeV2Client computeClient, err := openstack.NewComputeV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack compute client: %s", err)
}
createOpts := secgroups.CreateOpts{ createOpts := secgroups.CreateOpts{
Name: d.Get("name").(string), Name: d.Get("name").(string),
Description: d.Get("description").(string), Description: d.Get("description").(string),
} }
sg, err := secgroups.Create(osClient, createOpts).Extract() sg, err := secgroups.Create(computeClient, createOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error creating OpenStack security group: %s", err) return fmt.Errorf("Error creating OpenStack security group: %s", err)
} }
@ -52,9 +64,14 @@ func resourceComputeSecGroupCreate(d *schema.ResourceData, meta interface{}) err
func resourceComputeSecGroupRead(d *schema.ResourceData, meta interface{}) error { func resourceComputeSecGroupRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.computeV2Client computeClient, err := openstack.NewComputeV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack compute client: %s", err)
}
sg, err := secgroups.Get(osClient, d.Id()).Extract() sg, err := secgroups.Get(computeClient, d.Id()).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error retrieving OpenStack security group: %s", err) return fmt.Errorf("Error retrieving OpenStack security group: %s", err)
} }
@ -67,7 +84,12 @@ func resourceComputeSecGroupRead(d *schema.ResourceData, meta interface{}) error
func resourceComputeSecGroupUpdate(d *schema.ResourceData, meta interface{}) error { func resourceComputeSecGroupUpdate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.computeV2Client computeClient, err := openstack.NewComputeV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack compute client: %s", err)
}
var updateOpts secgroups.UpdateOpts var updateOpts secgroups.UpdateOpts
if d.HasChange("name") { if d.HasChange("name") {
@ -77,14 +99,11 @@ func resourceComputeSecGroupUpdate(d *schema.ResourceData, meta interface{}) err
updateOpts.Description = d.Get("description").(string) updateOpts.Description = d.Get("description").(string)
} }
// If there's nothing to update, don't waste an HTTP call. log.Printf("[DEBUG] Updating Security Group (%s) with options: %+v", d.Id(), updateOpts)
if updateOpts != (secgroups.UpdateOpts{}) {
log.Printf("[DEBUG] Updating Security Group (%s) with options: %+v", d.Id(), updateOpts)
_, err := secgroups.Update(osClient, d.Id(), updateOpts).Extract() _, err = secgroups.Update(computeClient, d.Id(), updateOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error updating OpenStack security group (%s): %s", d.Id(), err) return fmt.Errorf("Error updating OpenStack security group (%s): %s", d.Id(), err)
}
} }
return resourceComputeSecGroupRead(d, meta) return resourceComputeSecGroupRead(d, meta)
@ -92,9 +111,14 @@ func resourceComputeSecGroupUpdate(d *schema.ResourceData, meta interface{}) err
func resourceComputeSecGroupDelete(d *schema.ResourceData, meta interface{}) error { func resourceComputeSecGroupDelete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.computeV2Client computeClient, err := openstack.NewComputeV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack compute client: %s", err)
}
err := secgroups.Delete(osClient, d.Id()).ExtractErr() err = secgroups.Delete(computeClient, d.Id()).ExtractErr()
if err != nil { if err != nil {
return fmt.Errorf("Error deleting OpenStack security group: %s", err) return fmt.Errorf("Error deleting OpenStack security group: %s", err)
} }

View File

@ -4,6 +4,8 @@ import (
"fmt" "fmt"
"github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/schema"
"github.com/rackspace/gophercloud"
"github.com/rackspace/gophercloud/openstack"
"github.com/rackspace/gophercloud/openstack/compute/v2/extensions/secgroups" "github.com/rackspace/gophercloud/openstack/compute/v2/extensions/secgroups"
) )
@ -14,36 +16,37 @@ func resourceComputeSecGroupRule() *schema.Resource {
Delete: resourceComputeSecGroupRuleDelete, Delete: resourceComputeSecGroupRuleDelete,
Schema: map[string]*schema.Schema{ Schema: map[string]*schema.Schema{
"region": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
DefaultFunc: envDefaultFunc("OS_REGION_NAME"),
},
"group_id": &schema.Schema{ "group_id": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"from_port": &schema.Schema{ "from_port": &schema.Schema{
Type: schema.TypeInt, Type: schema.TypeInt,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"to_port": &schema.Schema{ "to_port": &schema.Schema{
Type: schema.TypeInt, Type: schema.TypeInt,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"ip_protocol": &schema.Schema{ "ip_protocol": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"cidr": &schema.Schema{ "cidr": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: true, ForceNew: true,
}, },
"from_group_id": &schema.Schema{ "from_group_id": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
@ -55,7 +58,12 @@ func resourceComputeSecGroupRule() *schema.Resource {
func resourceComputeSecGroupRuleCreate(d *schema.ResourceData, meta interface{}) error { func resourceComputeSecGroupRuleCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.computeV2Client computeClient, err := openstack.NewComputeV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack compute client: %s", err)
}
createOpts := secgroups.CreateRuleOpts{ createOpts := secgroups.CreateRuleOpts{
ParentGroupID: d.Get("group_id").(string), ParentGroupID: d.Get("group_id").(string),
@ -66,7 +74,7 @@ func resourceComputeSecGroupRuleCreate(d *schema.ResourceData, meta interface{})
FromGroupID: d.Get("from_group_id").(string), FromGroupID: d.Get("from_group_id").(string),
} }
sgr, err := secgroups.CreateRule(osClient, createOpts).Extract() sgr, err := secgroups.CreateRule(computeClient, createOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error creating OpenStack security group rule: %s", err) return fmt.Errorf("Error creating OpenStack security group rule: %s", err)
} }
@ -88,9 +96,14 @@ func resourceComputeSecGroupRuleRead(d *schema.ResourceData, meta interface{}) e
func resourceComputeSecGroupRuleDelete(d *schema.ResourceData, meta interface{}) error { func resourceComputeSecGroupRuleDelete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.computeV2Client computeClient, err := openstack.NewComputeV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack compute client: %s", err)
}
err := secgroups.DeleteRule(osClient, d.Id()).ExtractErr() err = secgroups.DeleteRule(computeClient, d.Id()).ExtractErr()
if err != nil { if err != nil {
return fmt.Errorf("Error deleting OpenStack security group rule: %s", err) return fmt.Errorf("Error deleting OpenStack security group rule: %s", err)
} }

View File

@ -5,6 +5,8 @@ import (
"log" "log"
"github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/schema"
"github.com/rackspace/gophercloud"
"github.com/rackspace/gophercloud/openstack"
"github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/members" "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/members"
) )
@ -16,30 +18,32 @@ func resourceLBMember() *schema.Resource {
Delete: resourceLBMemberDelete, Delete: resourceLBMemberDelete,
Schema: map[string]*schema.Schema{ Schema: map[string]*schema.Schema{
"region": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
DefaultFunc: envDefaultFunc("OS_REGION_NAME"),
},
"tenant_id": &schema.Schema{ "tenant_id": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: true, ForceNew: true,
}, },
"address": &schema.Schema{ "address": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"port": &schema.Schema{ "port": &schema.Schema{
Type: schema.TypeInt, Type: schema.TypeInt,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"pool_id": &schema.Schema{ "pool_id": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"admin_state_up": &schema.Schema{ "admin_state_up": &schema.Schema{
Type: schema.TypeBool, Type: schema.TypeBool,
Required: true, Required: true,
@ -51,7 +55,12 @@ func resourceLBMember() *schema.Resource {
func resourceLBMemberCreate(d *schema.ResourceData, meta interface{}) error { func resourceLBMemberCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
createOpts := members.CreateOpts{ createOpts := members.CreateOpts{
//TenantID: d.Get("tenant_id").(string), //TenantID: d.Get("tenant_id").(string),
@ -61,7 +70,7 @@ func resourceLBMemberCreate(d *schema.ResourceData, meta interface{}) error {
} }
log.Printf("[INFO] Requesting lb member creation") log.Printf("[INFO] Requesting lb member creation")
p, err := members.Create(osClient, createOpts).Extract() p, err := members.Create(networkingClient, createOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error creating OpenStack LB member: %s", err) return fmt.Errorf("Error creating OpenStack LB member: %s", err)
} }
@ -74,9 +83,14 @@ func resourceLBMemberCreate(d *schema.ResourceData, meta interface{}) error {
func resourceLBMemberRead(d *schema.ResourceData, meta interface{}) error { func resourceLBMemberRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
p, err := members.Get(osClient, d.Id()).Extract() p, err := members.Get(networkingClient, d.Id()).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error retrieving OpenStack LB Member: %s", err) return fmt.Errorf("Error retrieving OpenStack LB Member: %s", err)
} }
@ -100,7 +114,12 @@ func resourceLBMemberRead(d *schema.ResourceData, meta interface{}) error {
func resourceLBMemberUpdate(d *schema.ResourceData, meta interface{}) error { func resourceLBMemberUpdate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
var updateOpts members.UpdateOpts var updateOpts members.UpdateOpts
if d.HasChange("admin_state_up") { if d.HasChange("admin_state_up") {
@ -109,7 +128,7 @@ func resourceLBMemberUpdate(d *schema.ResourceData, meta interface{}) error {
log.Printf("[DEBUG] Updating OpenStack LB Member %s with options: %+v", d.Id(), updateOpts) log.Printf("[DEBUG] Updating OpenStack LB Member %s with options: %+v", d.Id(), updateOpts)
_, err := members.Update(osClient, d.Id(), updateOpts).Extract() _, err = members.Update(networkingClient, d.Id(), updateOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error updating OpenStack LB Member: %s", err) return fmt.Errorf("Error updating OpenStack LB Member: %s", err)
} }
@ -119,9 +138,14 @@ func resourceLBMemberUpdate(d *schema.ResourceData, meta interface{}) error {
func resourceLBMemberDelete(d *schema.ResourceData, meta interface{}) error { func resourceLBMemberDelete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
err := members.Delete(osClient, d.Id()).ExtractErr() err = members.Delete(networkingClient, d.Id()).ExtractErr()
if err != nil { if err != nil {
return fmt.Errorf("Error deleting OpenStack LB Member: %s", err) return fmt.Errorf("Error deleting OpenStack LB Member: %s", err)
} }

View File

@ -6,6 +6,8 @@ import (
"strconv" "strconv"
"github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/schema"
"github.com/rackspace/gophercloud"
"github.com/rackspace/gophercloud/openstack"
"github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/monitors" "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/monitors"
) )
@ -17,54 +19,52 @@ func resourceLBMonitor() *schema.Resource {
Delete: resourceLBMonitorDelete, Delete: resourceLBMonitorDelete,
Schema: map[string]*schema.Schema{ Schema: map[string]*schema.Schema{
"region": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
DefaultFunc: envDefaultFunc("OS_REGION_NAME"),
},
"tenant_id": &schema.Schema{ "tenant_id": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: true, ForceNew: true,
}, },
"type": &schema.Schema{ "type": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"delay": &schema.Schema{ "delay": &schema.Schema{
Type: schema.TypeInt, Type: schema.TypeInt,
Required: true, Required: true,
ForceNew: false, ForceNew: false,
}, },
"timeout": &schema.Schema{ "timeout": &schema.Schema{
Type: schema.TypeInt, Type: schema.TypeInt,
Required: true, Required: true,
ForceNew: false, ForceNew: false,
}, },
"max_retries": &schema.Schema{ "max_retries": &schema.Schema{
Type: schema.TypeInt, Type: schema.TypeInt,
Required: true, Required: true,
ForceNew: false, ForceNew: false,
}, },
"url_path": &schema.Schema{ "url_path": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: false, ForceNew: false,
}, },
"http_method": &schema.Schema{ "http_method": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: false, ForceNew: false,
}, },
"expected_codes": &schema.Schema{ "expected_codes": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: false, ForceNew: false,
}, },
"admin_state_up": &schema.Schema{ "admin_state_up": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
@ -76,7 +76,12 @@ func resourceLBMonitor() *schema.Resource {
func resourceLBMonitorCreate(d *schema.ResourceData, meta interface{}) error { func resourceLBMonitorCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
createOpts := monitors.CreateOpts{ createOpts := monitors.CreateOpts{
TenantID: d.Get("tenant_id").(string), TenantID: d.Get("tenant_id").(string),
@ -99,7 +104,7 @@ func resourceLBMonitorCreate(d *schema.ResourceData, meta interface{}) error {
} }
log.Printf("[INFO] Requesting lb monitor creation") log.Printf("[INFO] Requesting lb monitor creation")
m, err := monitors.Create(osClient, createOpts).Extract() m, err := monitors.Create(networkingClient, createOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error creating OpenStack LB Monitor: %s", err) return fmt.Errorf("Error creating OpenStack LB Monitor: %s", err)
} }
@ -112,9 +117,14 @@ func resourceLBMonitorCreate(d *schema.ResourceData, meta interface{}) error {
func resourceLBMonitorRead(d *schema.ResourceData, meta interface{}) error { func resourceLBMonitorRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
m, err := monitors.Get(osClient, d.Id()).Extract() m, err := monitors.Get(networkingClient, d.Id()).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error retrieving OpenStack LB Monitor: %s", err) return fmt.Errorf("Error retrieving OpenStack LB Monitor: %s", err)
} }
@ -171,7 +181,12 @@ func resourceLBMonitorRead(d *schema.ResourceData, meta interface{}) error {
func resourceLBMonitorUpdate(d *schema.ResourceData, meta interface{}) error { func resourceLBMonitorUpdate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
var updateOpts monitors.UpdateOpts var updateOpts monitors.UpdateOpts
if d.HasChange("delay") { if d.HasChange("delay") {
@ -205,7 +220,7 @@ func resourceLBMonitorUpdate(d *schema.ResourceData, meta interface{}) error {
log.Printf("[DEBUG] Updating OpenStack LB Monitor %s with options: %+v", d.Id(), updateOpts) log.Printf("[DEBUG] Updating OpenStack LB Monitor %s with options: %+v", d.Id(), updateOpts)
_, err := monitors.Update(osClient, d.Id(), updateOpts).Extract() _, err = monitors.Update(networkingClient, d.Id(), updateOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error updating OpenStack LB Monitor: %s", err) return fmt.Errorf("Error updating OpenStack LB Monitor: %s", err)
} }
@ -215,9 +230,14 @@ func resourceLBMonitorUpdate(d *schema.ResourceData, meta interface{}) error {
func resourceLBMonitorDelete(d *schema.ResourceData, meta interface{}) error { func resourceLBMonitorDelete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
err := monitors.Delete(osClient, d.Id()).ExtractErr() err = monitors.Delete(networkingClient, d.Id()).ExtractErr()
if err != nil { if err != nil {
return fmt.Errorf("Error deleting OpenStack LB Monitor: %s", err) return fmt.Errorf("Error deleting OpenStack LB Monitor: %s", err)
} }

View File

@ -5,7 +5,9 @@ import (
"log" "log"
"github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/schema"
"github.com/jrperritt/terraform/helper/hashcode" "github.com/hashicorp/terraform/helper/hashcode"
"github.com/rackspace/gophercloud"
"github.com/rackspace/gophercloud/openstack"
"github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/pools" "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/pools"
) )
@ -17,18 +19,22 @@ func resourceLBPool() *schema.Resource {
Delete: resourceLBPoolDelete, Delete: resourceLBPoolDelete,
Schema: map[string]*schema.Schema{ Schema: map[string]*schema.Schema{
"region": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
DefaultFunc: envDefaultFunc("OS_REGION_NAME"),
},
"name": &schema.Schema{ "name": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: false, ForceNew: false,
}, },
"protocol": &schema.Schema{ "protocol": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"subnet_id": &schema.Schema{ "subnet_id": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
@ -40,13 +46,11 @@ func resourceLBPool() *schema.Resource {
Required: true, Required: true,
ForceNew: false, ForceNew: false,
}, },
"tenant_id": &schema.Schema{ "tenant_id": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: true, ForceNew: true,
}, },
"monitor_ids": &schema.Schema{ "monitor_ids": &schema.Schema{
Type: schema.TypeSet, Type: schema.TypeSet,
Optional: true, Optional: true,
@ -62,7 +66,12 @@ func resourceLBPool() *schema.Resource {
func resourceLBPoolCreate(d *schema.ResourceData, meta interface{}) error { func resourceLBPoolCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
createOpts := pools.CreateOpts{ createOpts := pools.CreateOpts{
Name: d.Get("name").(string), Name: d.Get("name").(string),
@ -73,7 +82,7 @@ func resourceLBPoolCreate(d *schema.ResourceData, meta interface{}) error {
} }
log.Printf("[INFO] Requesting lb pool creation") log.Printf("[INFO] Requesting lb pool creation")
p, err := pools.Create(osClient, createOpts).Extract() p, err := pools.Create(networkingClient, createOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error creating OpenStack LB pool: %s", err) return fmt.Errorf("Error creating OpenStack LB pool: %s", err)
} }
@ -83,7 +92,7 @@ func resourceLBPoolCreate(d *schema.ResourceData, meta interface{}) error {
if mIDs := resourcePoolMonitorIDs(d); mIDs != nil { if mIDs := resourcePoolMonitorIDs(d); mIDs != nil {
for _, mID := range mIDs { for _, mID := range mIDs {
_, err := pools.AssociateMonitor(osClient, p.ID, mID).Extract() _, err := pools.AssociateMonitor(networkingClient, p.ID, mID).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error associating monitor (%s) with OpenStack LB pool (%s): %s", mID, p.ID, err) return fmt.Errorf("Error associating monitor (%s) with OpenStack LB pool (%s): %s", mID, p.ID, err)
} }
@ -95,9 +104,14 @@ func resourceLBPoolCreate(d *schema.ResourceData, meta interface{}) error {
func resourceLBPoolRead(d *schema.ResourceData, meta interface{}) error { func resourceLBPoolRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
p, err := pools.Get(osClient, d.Id()).Extract() p, err := pools.Get(networkingClient, d.Id()).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error retrieving OpenStack LB Pool: %s", err) return fmt.Errorf("Error retrieving OpenStack LB Pool: %s", err)
} }
@ -124,7 +138,12 @@ func resourceLBPoolRead(d *schema.ResourceData, meta interface{}) error {
func resourceLBPoolUpdate(d *schema.ResourceData, meta interface{}) error { func resourceLBPoolUpdate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
var updateOpts pools.UpdateOpts var updateOpts pools.UpdateOpts
if d.HasChange("name") { if d.HasChange("name") {
@ -136,7 +155,7 @@ func resourceLBPoolUpdate(d *schema.ResourceData, meta interface{}) error {
log.Printf("[DEBUG] Updating OpenStack LB Pool %s with options: %+v", d.Id(), updateOpts) log.Printf("[DEBUG] Updating OpenStack LB Pool %s with options: %+v", d.Id(), updateOpts)
_, err := pools.Update(osClient, d.Id(), updateOpts).Extract() _, err = pools.Update(networkingClient, d.Id(), updateOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error updating OpenStack LB Pool: %s", err) return fmt.Errorf("Error updating OpenStack LB Pool: %s", err)
} }
@ -152,7 +171,7 @@ func resourceLBPoolUpdate(d *schema.ResourceData, meta interface{}) error {
log.Printf("[DEBUG] Monitors to remove: %v", monitorsToRemove) log.Printf("[DEBUG] Monitors to remove: %v", monitorsToRemove)
for _, m := range monitorsToAdd.List() { for _, m := range monitorsToAdd.List() {
_, err := pools.AssociateMonitor(osClient, d.Id(), m.(string)).Extract() _, err := pools.AssociateMonitor(networkingClient, d.Id(), m.(string)).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error associating monitor (%s) with OpenStack server (%s): %s", m.(string), d.Id(), err) return fmt.Errorf("Error associating monitor (%s) with OpenStack server (%s): %s", m.(string), d.Id(), err)
} }
@ -160,7 +179,7 @@ func resourceLBPoolUpdate(d *schema.ResourceData, meta interface{}) error {
} }
for _, m := range monitorsToRemove.List() { for _, m := range monitorsToRemove.List() {
_, err := pools.DisassociateMonitor(osClient, d.Id(), m.(string)).Extract() _, err := pools.DisassociateMonitor(networkingClient, d.Id(), m.(string)).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error disassociating monitor (%s) from OpenStack server (%s): %s", m.(string), d.Id(), err) return fmt.Errorf("Error disassociating monitor (%s) from OpenStack server (%s): %s", m.(string), d.Id(), err)
} }
@ -173,9 +192,14 @@ func resourceLBPoolUpdate(d *schema.ResourceData, meta interface{}) error {
func resourceLBPoolDelete(d *schema.ResourceData, meta interface{}) error { func resourceLBPoolDelete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
err := pools.Delete(osClient, d.Id()).ExtractErr() err = pools.Delete(networkingClient, d.Id()).ExtractErr()
if err != nil { if err != nil {
return fmt.Errorf("Error deleting OpenStack LB Pool: %s", err) return fmt.Errorf("Error deleting OpenStack LB Pool: %s", err)
} }

View File

@ -7,6 +7,7 @@ import (
"github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/schema"
"github.com/rackspace/gophercloud" "github.com/rackspace/gophercloud"
"github.com/rackspace/gophercloud/openstack"
"github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/vips" "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/vips"
) )
@ -18,66 +19,62 @@ func resourceLBVip() *schema.Resource {
Delete: resourceLBVipDelete, Delete: resourceLBVipDelete,
Schema: map[string]*schema.Schema{ Schema: map[string]*schema.Schema{
"region": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
DefaultFunc: envDefaultFunc("OS_REGION_NAME"),
},
"name": &schema.Schema{ "name": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: false, ForceNew: false,
}, },
"subnet_id": &schema.Schema{ "subnet_id": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"protocol": &schema.Schema{ "protocol": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"port": &schema.Schema{ "port": &schema.Schema{
Type: schema.TypeInt, Type: schema.TypeInt,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"pool_id": &schema.Schema{ "pool_id": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: false, ForceNew: false,
}, },
"tenant_id": &schema.Schema{ "tenant_id": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: true, ForceNew: true,
}, },
"address": &schema.Schema{ "address": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: true, ForceNew: true,
}, },
"description": &schema.Schema{ "description": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: false, ForceNew: false,
}, },
"persistence": &schema.Schema{ "persistence": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: false, ForceNew: false,
}, },
"conn_limit": &schema.Schema{ "conn_limit": &schema.Schema{
Type: schema.TypeInt, Type: schema.TypeInt,
Optional: true, Optional: true,
ForceNew: false, ForceNew: false,
}, },
"admin_state_up": &schema.Schema{ "admin_state_up": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
@ -89,7 +86,12 @@ func resourceLBVip() *schema.Resource {
func resourceLBVipCreate(d *schema.ResourceData, meta interface{}) error { func resourceLBVipCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
createOpts := vips.CreateOpts{ createOpts := vips.CreateOpts{
Name: d.Get("name").(string), Name: d.Get("name").(string),
@ -114,7 +116,7 @@ func resourceLBVipCreate(d *schema.ResourceData, meta interface{}) error {
} }
log.Printf("[INFO] Requesting lb vip creation") log.Printf("[INFO] Requesting lb vip creation")
p, err := vips.Create(osClient, createOpts).Extract() p, err := vips.Create(networkingClient, createOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error creating OpenStack LB VIP: %s", err) return fmt.Errorf("Error creating OpenStack LB VIP: %s", err)
} }
@ -127,9 +129,14 @@ func resourceLBVipCreate(d *schema.ResourceData, meta interface{}) error {
func resourceLBVipRead(d *schema.ResourceData, meta interface{}) error { func resourceLBVipRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
p, err := vips.Get(osClient, d.Id()).Extract() p, err := vips.Get(networkingClient, d.Id()).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error retrieving OpenStack LB VIP: %s", err) return fmt.Errorf("Error retrieving OpenStack LB VIP: %s", err)
} }
@ -193,7 +200,12 @@ func resourceLBVipRead(d *schema.ResourceData, meta interface{}) error {
func resourceLBVipUpdate(d *schema.ResourceData, meta interface{}) error { func resourceLBVipUpdate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
var updateOpts vips.UpdateOpts var updateOpts vips.UpdateOpts
if d.HasChange("name") { if d.HasChange("name") {
@ -224,7 +236,7 @@ func resourceLBVipUpdate(d *schema.ResourceData, meta interface{}) error {
log.Printf("[DEBUG] Updating OpenStack LB VIP %s with options: %+v", d.Id(), updateOpts) log.Printf("[DEBUG] Updating OpenStack LB VIP %s with options: %+v", d.Id(), updateOpts)
_, err := vips.Update(osClient, d.Id(), updateOpts).Extract() _, err = vips.Update(networkingClient, d.Id(), updateOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error updating OpenStack LB VIP: %s", err) return fmt.Errorf("Error updating OpenStack LB VIP: %s", err)
} }
@ -234,9 +246,14 @@ func resourceLBVipUpdate(d *schema.ResourceData, meta interface{}) error {
func resourceLBVipDelete(d *schema.ResourceData, meta interface{}) error { func resourceLBVipDelete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
err := vips.Delete(osClient, d.Id()).ExtractErr() err = vips.Delete(networkingClient, d.Id()).ExtractErr()
if err != nil { if err != nil {
return fmt.Errorf("Error deleting OpenStack LB VIP: %s", err) return fmt.Errorf("Error deleting OpenStack LB VIP: %s", err)
} }

View File

@ -6,6 +6,8 @@ import (
"strconv" "strconv"
"github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/schema"
"github.com/rackspace/gophercloud"
"github.com/rackspace/gophercloud/openstack"
"github.com/rackspace/gophercloud/openstack/networking/v2/networks" "github.com/rackspace/gophercloud/openstack/networking/v2/networks"
) )
@ -17,24 +19,27 @@ func resourceNetworkingNetwork() *schema.Resource {
Delete: resourceNetworkingNetworkDelete, Delete: resourceNetworkingNetworkDelete,
Schema: map[string]*schema.Schema{ Schema: map[string]*schema.Schema{
"region": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
DefaultFunc: envDefaultFunc("OS_REGION_NAME"),
},
"name": &schema.Schema{ "name": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: false, ForceNew: false,
}, },
"admin_state_up": &schema.Schema{ "admin_state_up": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: false, ForceNew: false,
}, },
"shared": &schema.Schema{ "shared": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: false, ForceNew: false,
}, },
"tenant_id": &schema.Schema{ "tenant_id": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
@ -46,7 +51,12 @@ func resourceNetworkingNetwork() *schema.Resource {
func resourceNetworkingNetworkCreate(d *schema.ResourceData, meta interface{}) error { func resourceNetworkingNetworkCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
createOpts := networks.CreateOpts{ createOpts := networks.CreateOpts{
Name: d.Get("name").(string), Name: d.Get("name").(string),
@ -72,7 +82,7 @@ func resourceNetworkingNetworkCreate(d *schema.ResourceData, meta interface{}) e
} }
log.Printf("[INFO] Requesting network creation") log.Printf("[INFO] Requesting network creation")
n, err := networks.Create(osClient, createOpts).Extract() n, err := networks.Create(networkingClient, createOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error creating OpenStack Neutron network: %s", err) return fmt.Errorf("Error creating OpenStack Neutron network: %s", err)
} }
@ -85,9 +95,14 @@ func resourceNetworkingNetworkCreate(d *schema.ResourceData, meta interface{}) e
func resourceNetworkingNetworkRead(d *schema.ResourceData, meta interface{}) error { func resourceNetworkingNetworkRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
n, err := networks.Get(osClient, d.Id()).Extract() n, err := networks.Get(networkingClient, d.Id()).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error retrieving OpenStack Neutron Network: %s", err) return fmt.Errorf("Error retrieving OpenStack Neutron Network: %s", err)
} }
@ -131,7 +146,12 @@ func resourceNetworkingNetworkRead(d *schema.ResourceData, meta interface{}) err
func resourceNetworkingNetworkUpdate(d *schema.ResourceData, meta interface{}) error { func resourceNetworkingNetworkUpdate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
var updateOpts networks.UpdateOpts var updateOpts networks.UpdateOpts
if d.HasChange("name") { if d.HasChange("name") {
@ -160,7 +180,7 @@ func resourceNetworkingNetworkUpdate(d *schema.ResourceData, meta interface{}) e
log.Printf("[DEBUG] Updating Network %s with options: %+v", d.Id(), updateOpts) log.Printf("[DEBUG] Updating Network %s with options: %+v", d.Id(), updateOpts)
_, err := networks.Update(osClient, d.Id(), updateOpts).Extract() _, err = networks.Update(networkingClient, d.Id(), updateOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error updating OpenStack Neutron Network: %s", err) return fmt.Errorf("Error updating OpenStack Neutron Network: %s", err)
} }
@ -170,9 +190,14 @@ func resourceNetworkingNetworkUpdate(d *schema.ResourceData, meta interface{}) e
func resourceNetworkingNetworkDelete(d *schema.ResourceData, meta interface{}) error { func resourceNetworkingNetworkDelete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
err := networks.Delete(osClient, d.Id()).ExtractErr() err = networks.Delete(networkingClient, d.Id()).ExtractErr()
if err != nil { if err != nil {
return fmt.Errorf("Error deleting OpenStack Neutron Network: %s", err) return fmt.Errorf("Error deleting OpenStack Neutron Network: %s", err)
} }

View File

@ -6,7 +6,9 @@ import (
"strconv" "strconv"
"github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/schema"
"github.com/jrperritt/terraform/helper/hashcode" "github.com/hashicorp/terraform/helper/hashcode"
"github.com/rackspace/gophercloud"
"github.com/rackspace/gophercloud/openstack"
"github.com/rackspace/gophercloud/openstack/networking/v2/subnets" "github.com/rackspace/gophercloud/openstack/networking/v2/subnets"
) )
@ -18,30 +20,32 @@ func resourceNetworkingSubnet() *schema.Resource {
Delete: resourceNetworkingSubnetDelete, Delete: resourceNetworkingSubnetDelete,
Schema: map[string]*schema.Schema{ Schema: map[string]*schema.Schema{
"region": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
DefaultFunc: envDefaultFunc("OS_REGION_NAME"),
},
"network_id": &schema.Schema{ "network_id": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"cidr": &schema.Schema{ "cidr": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"name": &schema.Schema{ "name": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: false, ForceNew: false,
}, },
"tenant_id": &schema.Schema{ "tenant_id": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: true, ForceNew: true,
}, },
"allocation_pools": &schema.Schema{ "allocation_pools": &schema.Schema{
Type: schema.TypeList, Type: schema.TypeList,
Optional: true, Optional: true,
@ -52,7 +56,6 @@ func resourceNetworkingSubnet() *schema.Resource {
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
}, },
"end": &schema.Schema{ "end": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
@ -60,25 +63,21 @@ func resourceNetworkingSubnet() *schema.Resource {
}, },
}, },
}, },
"gateway_ip": &schema.Schema{ "gateway_ip": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: false, ForceNew: false,
}, },
"ip_version": &schema.Schema{ "ip_version": &schema.Schema{
Type: schema.TypeInt, Type: schema.TypeInt,
Required: true, Required: true,
ForceNew: true, ForceNew: true,
}, },
"enable_dhcp": &schema.Schema{ "enable_dhcp": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
ForceNew: false, ForceNew: false,
}, },
"dns_nameservers": &schema.Schema{ "dns_nameservers": &schema.Schema{
Type: schema.TypeSet, Type: schema.TypeSet,
Optional: true, Optional: true,
@ -88,7 +87,6 @@ func resourceNetworkingSubnet() *schema.Resource {
return hashcode.String(v.(string)) return hashcode.String(v.(string))
}, },
}, },
"host_routes": &schema.Schema{ "host_routes": &schema.Schema{
Type: schema.TypeList, Type: schema.TypeList,
Optional: true, Optional: true,
@ -99,7 +97,6 @@ func resourceNetworkingSubnet() *schema.Resource {
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
}, },
"next_hop": &schema.Schema{ "next_hop": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
@ -113,7 +110,12 @@ func resourceNetworkingSubnet() *schema.Resource {
func resourceNetworkingSubnetCreate(d *schema.ResourceData, meta interface{}) error { func resourceNetworkingSubnetCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
createOpts := subnets.CreateOpts{ createOpts := subnets.CreateOpts{
NetworkID: d.Get("network_id").(string), NetworkID: d.Get("network_id").(string),
@ -137,7 +139,7 @@ func resourceNetworkingSubnetCreate(d *schema.ResourceData, meta interface{}) er
} }
log.Printf("[INFO] Requesting subnet creation") log.Printf("[INFO] Requesting subnet creation")
s, err := subnets.Create(osClient, createOpts).Extract() s, err := subnets.Create(networkingClient, createOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error creating OpenStack Neutron subnet: %s", err) return fmt.Errorf("Error creating OpenStack Neutron subnet: %s", err)
} }
@ -150,9 +152,14 @@ func resourceNetworkingSubnetCreate(d *schema.ResourceData, meta interface{}) er
func resourceNetworkingSubnetRead(d *schema.ResourceData, meta interface{}) error { func resourceNetworkingSubnetRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
s, err := subnets.Get(osClient, d.Id()).Extract() s, err := subnets.Get(networkingClient, d.Id()).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error retrieving OpenStack Neutron Subnet: %s", err) return fmt.Errorf("Error retrieving OpenStack Neutron Subnet: %s", err)
} }
@ -212,7 +219,12 @@ func resourceNetworkingSubnetRead(d *schema.ResourceData, meta interface{}) erro
func resourceNetworkingSubnetUpdate(d *schema.ResourceData, meta interface{}) error { func resourceNetworkingSubnetUpdate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
var updateOpts subnets.UpdateOpts var updateOpts subnets.UpdateOpts
@ -245,7 +257,7 @@ func resourceNetworkingSubnetUpdate(d *schema.ResourceData, meta interface{}) er
log.Printf("[DEBUG] Updating Subnet %s with options: %+v", d.Id(), updateOpts) log.Printf("[DEBUG] Updating Subnet %s with options: %+v", d.Id(), updateOpts)
_, err := subnets.Update(osClient, d.Id(), updateOpts).Extract() _, err = subnets.Update(networkingClient, d.Id(), updateOpts).Extract()
if err != nil { if err != nil {
return fmt.Errorf("Error updating OpenStack Neutron Subnet: %s", err) return fmt.Errorf("Error updating OpenStack Neutron Subnet: %s", err)
} }
@ -255,9 +267,14 @@ func resourceNetworkingSubnetUpdate(d *schema.ResourceData, meta interface{}) er
func resourceNetworkingSubnetDelete(d *schema.ResourceData, meta interface{}) error { func resourceNetworkingSubnetDelete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config) config := meta.(*Config)
osClient := config.networkingV2Client networkingClient, err := openstack.NewNetworkV2(config.osClient, gophercloud.EndpointOpts{
Region: d.Get("region").(string),
})
if err != nil {
return fmt.Errorf("Error creating OpenStack networking client: %s", err)
}
err := subnets.Delete(osClient, d.Id()).ExtractErr() err = subnets.Delete(networkingClient, d.Id()).ExtractErr()
if err != nil { if err != nil {
return fmt.Errorf("Error deleting OpenStack Neutron Subnet: %s", err) return fmt.Errorf("Error deleting OpenStack Neutron Subnet: %s", err)
} }