mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-20 11:48:24 -06:00
* provider/openstack: Detect Region for Importing Resources This commit changes the way the OpenStack region is detected and set. Any time a region is required, the region attribute will first be checked. Next, the OS_REGION_NAME environment variable will be checked. While schema.EnvDefaultFunc handles this same situation, it is not applicable when importing resources. * provider/openstack: No longer ignore region in importing tests * provider/openstack: Network and Subnet Import Fixes This commit fixes the OpenStack Network and Subnet resources so that importing of those resources is successful.
61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
package openstack
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/gophercloud/gophercloud"
|
|
"github.com/hashicorp/terraform/helper/schema"
|
|
)
|
|
|
|
// BuildRequest takes an opts struct and builds a request body for
|
|
// Gophercloud to execute
|
|
func BuildRequest(opts interface{}, parent string) (map[string]interface{}, error) {
|
|
b, err := gophercloud.BuildRequestBody(opts, "")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if b["value_specs"] != nil {
|
|
for k, v := range b["value_specs"].(map[string]interface{}) {
|
|
b[k] = v
|
|
}
|
|
delete(b, "value_specs")
|
|
}
|
|
|
|
return map[string]interface{}{parent: b}, nil
|
|
}
|
|
|
|
// CheckDeleted checks the error to see if it's a 404 (Not Found) and, if so,
|
|
// sets the resource ID to the empty string instead of throwing an error.
|
|
func CheckDeleted(d *schema.ResourceData, err error, msg string) error {
|
|
if _, ok := err.(gophercloud.ErrDefault404); ok {
|
|
d.SetId("")
|
|
return nil
|
|
}
|
|
|
|
return fmt.Errorf("%s: %s", msg, err)
|
|
}
|
|
|
|
// GetRegion returns the region from either d.Get("region") or OS_REGION_NAME
|
|
func GetRegion(d *schema.ResourceData) string {
|
|
if v, ok := d.GetOk("region"); ok {
|
|
return v.(string)
|
|
}
|
|
|
|
if v := os.Getenv("OS_REGION_NAME"); v != "" {
|
|
return v
|
|
}
|
|
|
|
return ""
|
|
}
|
|
|
|
// MapValueSpecs converts ResourceData into a map
|
|
func MapValueSpecs(d *schema.ResourceData) map[string]string {
|
|
m := make(map[string]string)
|
|
for key, val := range d.Get("value_specs").(map[string]interface{}) {
|
|
m[key] = val.(string)
|
|
}
|
|
return m
|
|
}
|