Skip to content

Commit

Permalink
Merge pull request #25 from jtopjian/provider-region
Browse files Browse the repository at this point in the history
Add Region to Provider
  • Loading branch information
jtopjian committed Jun 15, 2017
2 parents b968e11 + 48bea22 commit 5f9ef4f
Show file tree
Hide file tree
Showing 78 changed files with 456 additions and 403 deletions.
27 changes: 20 additions & 7 deletions openstack/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"crypto/tls"
"crypto/x509"
"fmt"
"log"
"net/http"
"os"

Expand All @@ -24,6 +25,7 @@ type Config struct {
IdentityEndpoint string
Insecure bool
Password string
Region string
Swauth bool
TenantID string
TenantName string
Expand Down Expand Up @@ -135,44 +137,55 @@ func (c *Config) loadAndValidate() error {
return nil
}

func (c *Config) determineRegion(region string) string {
// If a resource-level region was not specified, and a provider-level region was set,
// use the provider-level region.
if region == "" && c.Region != "" {
region = c.Region
}

log.Printf("[DEBUG] OpenStack Region is: %s", region)
return region
}

func (c *Config) blockStorageV1Client(region string) (*gophercloud.ServiceClient, error) {
return openstack.NewBlockStorageV1(c.osClient, gophercloud.EndpointOpts{
Region: region,
Region: c.determineRegion(region),
Availability: c.getEndpointType(),
})
}

func (c *Config) blockStorageV2Client(region string) (*gophercloud.ServiceClient, error) {
return openstack.NewBlockStorageV2(c.osClient, gophercloud.EndpointOpts{
Region: region,
Region: c.determineRegion(region),
Availability: c.getEndpointType(),
})
}

func (c *Config) computeV2Client(region string) (*gophercloud.ServiceClient, error) {
return openstack.NewComputeV2(c.osClient, gophercloud.EndpointOpts{
Region: region,
Region: c.determineRegion(region),
Availability: c.getEndpointType(),
})
}

func (c *Config) dnsV2Client(region string) (*gophercloud.ServiceClient, error) {
return openstack.NewDNSV2(c.osClient, gophercloud.EndpointOpts{
Region: region,
Region: c.determineRegion(region),
Availability: c.getEndpointType(),
})
}

func (c *Config) imageV2Client(region string) (*gophercloud.ServiceClient, error) {
return openstack.NewImageServiceV2(c.osClient, gophercloud.EndpointOpts{
Region: region,
Region: c.determineRegion(region),
Availability: c.getEndpointType(),
})
}

func (c *Config) networkingV2Client(region string) (*gophercloud.ServiceClient, error) {
return openstack.NewNetworkV2(c.osClient, gophercloud.EndpointOpts{
Region: region,
Region: c.determineRegion(region),
Availability: c.getEndpointType(),
})
}
Expand All @@ -187,7 +200,7 @@ func (c *Config) objectStorageV1Client(region string) (*gophercloud.ServiceClien
}

return openstack.NewObjectStorageV1(c.osClient, gophercloud.EndpointOpts{
Region: region,
Region: c.determineRegion(region),
Availability: c.getEndpointType(),
})
}
Expand Down
10 changes: 5 additions & 5 deletions openstack/data_source_openstack_images_image_v2.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ func dataSourceImagesImageV2() *schema.Resource {

Schema: map[string]*schema.Schema{
"region": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
DefaultFunc: schema.EnvDefaultFunc("OS_REGION_NAME", ""),
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
},

"name": {
Expand Down Expand Up @@ -143,7 +143,7 @@ func dataSourceImagesImageV2() *schema.Resource {
// dataSourceImagesImageV2Read performs the image lookup.
func dataSourceImagesImageV2Read(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
imageClient, err := config.imageV2Client(GetRegion(d))
imageClient, err := config.imageV2Client(GetRegion(d, config))
if err != nil {
return fmt.Errorf("Error creating OpenStack image client: %s", err)
}
Expand Down
15 changes: 8 additions & 7 deletions openstack/data_source_openstack_networking_network_v2.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ func dataSourceNetworkingNetworkV2() *schema.Resource {
Read: dataSourceNetworkingNetworkV2Read,

Schema: map[string]*schema.Schema{
"region": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
},
"network_id": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Expand All @@ -29,11 +35,6 @@ func dataSourceNetworkingNetworkV2() *schema.Resource {
Type: schema.TypeString,
Optional: true,
},
"region": &schema.Schema{
Type: schema.TypeString,
Required: true,
DefaultFunc: schema.EnvDefaultFunc("OS_REGION_NAME", ""),
},
"tenant_id": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Expand All @@ -57,7 +58,7 @@ func dataSourceNetworkingNetworkV2() *schema.Resource {

func dataSourceNetworkingNetworkV2Read(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
networkingClient, err := config.networkingV2Client(GetRegion(d))
networkingClient, err := config.networkingV2Client(GetRegion(d, config))

listOpts := networks.ListOpts{
ID: d.Get("network_id").(string),
Expand Down Expand Up @@ -111,7 +112,7 @@ func dataSourceNetworkingNetworkV2Read(d *schema.ResourceData, meta interface{})
d.Set("admin_state_up", strconv.FormatBool(network.AdminStateUp))
d.Set("shared", strconv.FormatBool(network.Shared))
d.Set("tenant_id", network.TenantID)
d.Set("region", GetRegion(d))
d.Set("region", GetRegion(d, config))

return nil
}
10 changes: 10 additions & 0 deletions openstack/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,13 @@ func Provider() terraform.ResourceProvider {
Description: descriptions["auth_url"],
},

"region": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Description: descriptions["region"],
DefaultFunc: schema.EnvDefaultFunc("OS_REGION_NAME", ""),
},

"user_name": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Expand Down Expand Up @@ -187,6 +194,8 @@ func init() {
descriptions = map[string]string{
"auth_url": "The Identity authentication URL.",

"region": "The OpenStack region to connect to.",

"user_name": "Username to login with.",

"user_id": "User ID to login with.",
Expand Down Expand Up @@ -231,6 +240,7 @@ func configureProvider(d *schema.ResourceData) (interface{}, error) {
IdentityEndpoint: d.Get("auth_url").(string),
Insecure: d.Get("insecure").(bool),
Password: d.Get("password").(string),
Region: d.Get("region").(string),
Swauth: d.Get("swauth").(bool),
Token: d.Get("token").(string),
TenantID: d.Get("tenant_id").(string),
Expand Down
14 changes: 7 additions & 7 deletions openstack/resource_openstack_blockstorage_volume_attach_v2.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ func resourceBlockStorageVolumeAttachV2() *schema.Resource {

Schema: map[string]*schema.Schema{
"region": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
DefaultFunc: schema.EnvDefaultFunc("OS_REGION_NAME", ""),
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
},

"volume_id": &schema.Schema{
Expand Down Expand Up @@ -136,7 +136,7 @@ func resourceBlockStorageVolumeAttachV2() *schema.Resource {

func resourceBlockStorageVolumeAttachV2Create(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
client, err := config.blockStorageV2Client(GetRegion(d))
client, err := config.blockStorageV2Client(GetRegion(d, config))
if err != nil {
return fmt.Errorf("Error creating OpenStack block storage client: %s", err)
}
Expand Down Expand Up @@ -276,7 +276,7 @@ func resourceBlockStorageVolumeAttachV2Create(d *schema.ResourceData, meta inter

func resourceBlockStorageVolumeAttachV2Read(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
client, err := config.blockStorageV2Client(GetRegion(d))
client, err := config.blockStorageV2Client(GetRegion(d, config))
if err != nil {
return fmt.Errorf("Error creating OpenStack block storage client: %s", err)
}
Expand Down Expand Up @@ -307,7 +307,7 @@ func resourceBlockStorageVolumeAttachV2Read(d *schema.ResourceData, meta interfa

func resourceBlockStorageVolumeAttachV2Delete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
client, err := config.blockStorageV2Client(GetRegion(d))
client, err := config.blockStorageV2Client(GetRegion(d, config))
if err != nil {
return fmt.Errorf("Error creating OpenStack block storage client: %s", err)
}
Expand Down
21 changes: 11 additions & 10 deletions openstack/resource_openstack_blockstorage_volume_v1.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,12 @@ func resourceBlockStorageVolumeV1() *schema.Resource {

Schema: map[string]*schema.Schema{
"region": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
DefaultFunc: schema.EnvDefaultFunc("OS_REGION_NAME", ""),
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
},

"size": &schema.Schema{
Type: schema.TypeInt,
Required: true,
Expand Down Expand Up @@ -111,7 +112,7 @@ func resourceBlockStorageVolumeV1() *schema.Resource {

func resourceBlockStorageVolumeV1Create(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
blockStorageClient, err := config.blockStorageV1Client(GetRegion(d))
blockStorageClient, err := config.blockStorageV1Client(GetRegion(d, config))
if err != nil {
return fmt.Errorf("Error creating OpenStack block storage client: %s", err)
}
Expand Down Expand Up @@ -165,7 +166,7 @@ func resourceBlockStorageVolumeV1Create(d *schema.ResourceData, meta interface{}
func resourceBlockStorageVolumeV1Read(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)

blockStorageClient, err := config.blockStorageV1Client(GetRegion(d))
blockStorageClient, err := config.blockStorageV1Client(GetRegion(d, config))
if err != nil {
return fmt.Errorf("Error creating OpenStack block storage client: %s", err)
}
Expand All @@ -185,7 +186,7 @@ func resourceBlockStorageVolumeV1Read(d *schema.ResourceData, meta interface{})
d.Set("source_vol_id", v.SourceVolID)
d.Set("volume_type", v.VolumeType)
d.Set("metadata", v.Metadata)
d.Set("region", GetRegion(d))
d.Set("region", GetRegion(d, config))

attachments := make([]map[string]interface{}, len(v.Attachments))
for i, attachment := range v.Attachments {
Expand All @@ -202,7 +203,7 @@ func resourceBlockStorageVolumeV1Read(d *schema.ResourceData, meta interface{})

func resourceBlockStorageVolumeV1Update(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
blockStorageClient, err := config.blockStorageV1Client(GetRegion(d))
blockStorageClient, err := config.blockStorageV1Client(GetRegion(d, config))
if err != nil {
return fmt.Errorf("Error creating OpenStack block storage client: %s", err)
}
Expand All @@ -226,7 +227,7 @@ func resourceBlockStorageVolumeV1Update(d *schema.ResourceData, meta interface{}

func resourceBlockStorageVolumeV1Delete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
blockStorageClient, err := config.blockStorageV1Client(GetRegion(d))
blockStorageClient, err := config.blockStorageV1Client(GetRegion(d, config))
if err != nil {
return fmt.Errorf("Error creating OpenStack block storage client: %s", err)
}
Expand All @@ -239,7 +240,7 @@ func resourceBlockStorageVolumeV1Delete(d *schema.ResourceData, meta interface{}
// make sure this volume is detached from all instances before deleting
if len(v.Attachments) > 0 {
log.Printf("[DEBUG] detaching volumes")
if computeClient, err := config.computeV2Client(GetRegion(d)); err != nil {
if computeClient, err := config.computeV2Client(GetRegion(d, config)); err != nil {
return err
} else {
for _, volumeAttachment := range v.Attachments {
Expand Down
21 changes: 11 additions & 10 deletions openstack/resource_openstack_blockstorage_volume_v2.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,12 @@ func resourceBlockStorageVolumeV2() *schema.Resource {

Schema: map[string]*schema.Schema{
"region": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
DefaultFunc: schema.EnvDefaultFunc("OS_REGION_NAME", ""),
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
},

"size": &schema.Schema{
Type: schema.TypeInt,
Required: true,
Expand Down Expand Up @@ -121,7 +122,7 @@ func resourceBlockStorageVolumeV2() *schema.Resource {

func resourceBlockStorageVolumeV2Create(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
blockStorageClient, err := config.blockStorageV2Client(GetRegion(d))
blockStorageClient, err := config.blockStorageV2Client(GetRegion(d, config))
if err != nil {
return fmt.Errorf("Error creating OpenStack block storage client: %s", err)
}
Expand Down Expand Up @@ -176,7 +177,7 @@ func resourceBlockStorageVolumeV2Create(d *schema.ResourceData, meta interface{}

func resourceBlockStorageVolumeV2Read(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
blockStorageClient, err := config.blockStorageV2Client(GetRegion(d))
blockStorageClient, err := config.blockStorageV2Client(GetRegion(d, config))
if err != nil {
return fmt.Errorf("Error creating OpenStack block storage client: %s", err)
}
Expand All @@ -196,7 +197,7 @@ func resourceBlockStorageVolumeV2Read(d *schema.ResourceData, meta interface{})
d.Set("source_vol_id", v.SourceVolID)
d.Set("volume_type", v.VolumeType)
d.Set("metadata", v.Metadata)
d.Set("region", GetRegion(d))
d.Set("region", GetRegion(d, config))

attachments := make([]map[string]interface{}, len(v.Attachments))
for i, attachment := range v.Attachments {
Expand All @@ -213,7 +214,7 @@ func resourceBlockStorageVolumeV2Read(d *schema.ResourceData, meta interface{})

func resourceBlockStorageVolumeV2Update(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
blockStorageClient, err := config.blockStorageV2Client(GetRegion(d))
blockStorageClient, err := config.blockStorageV2Client(GetRegion(d, config))
if err != nil {
return fmt.Errorf("Error creating OpenStack block storage client: %s", err)
}
Expand All @@ -237,7 +238,7 @@ func resourceBlockStorageVolumeV2Update(d *schema.ResourceData, meta interface{}

func resourceBlockStorageVolumeV2Delete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
blockStorageClient, err := config.blockStorageV2Client(GetRegion(d))
blockStorageClient, err := config.blockStorageV2Client(GetRegion(d, config))
if err != nil {
return fmt.Errorf("Error creating OpenStack block storage client: %s", err)
}
Expand All @@ -250,7 +251,7 @@ func resourceBlockStorageVolumeV2Delete(d *schema.ResourceData, meta interface{}
// make sure this volume is detached from all instances before deleting
if len(v.Attachments) > 0 {
log.Printf("[DEBUG] detaching volumes")
if computeClient, err := config.computeV2Client(GetRegion(d)); err != nil {
if computeClient, err := config.computeV2Client(GetRegion(d, config)); err != nil {
return err
} else {
for _, volumeAttachment := range v.Attachments {
Expand Down
Loading

0 comments on commit 5f9ef4f

Please sign in to comment.