terraform/vendor/github.com/terraform-providers/terraform-provider-openstack/openstack/networking_network_v2.go

112 lines
3.0 KiB
Go

package openstack
import (
"fmt"
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/provider"
"github.com/gophercloud/gophercloud/openstack/networking/v2/networks"
"github.com/gophercloud/gophercloud/pagination"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema"
)
// networkingNetworkV2ID retrieves network ID by the provided name.
func networkingNetworkV2ID(d *schema.ResourceData, meta interface{}, networkName string) (string, error) {
config := meta.(*Config)
networkingClient, err := config.networkingV2Client(GetRegion(d, config))
if err != nil {
return "", fmt.Errorf("Error creating OpenStack network client: %s", err)
}
opts := networks.ListOpts{Name: networkName}
pager := networks.List(networkingClient, opts)
networkID := ""
err = pager.EachPage(func(page pagination.Page) (bool, error) {
networkList, err := networks.ExtractNetworks(page)
if err != nil {
return false, err
}
for _, n := range networkList {
if n.Name == networkName {
networkID = n.ID
return false, nil
}
}
return true, nil
})
return networkID, err
}
// networkingNetworkV2Name retrieves network name by the provided ID.
func networkingNetworkV2Name(d *schema.ResourceData, meta interface{}, networkID string) (string, error) {
config := meta.(*Config)
networkingClient, err := config.networkingV2Client(GetRegion(d, config))
if err != nil {
return "", fmt.Errorf("Error creating OpenStack network client: %s", err)
}
opts := networks.ListOpts{ID: networkID}
pager := networks.List(networkingClient, opts)
networkName := ""
err = pager.EachPage(func(page pagination.Page) (bool, error) {
networkList, err := networks.ExtractNetworks(page)
if err != nil {
return false, err
}
for _, n := range networkList {
if n.ID == networkID {
networkName = n.Name
return false, nil
}
}
return true, nil
})
return networkName, err
}
func resourceNetworkingNetworkV2StateRefreshFunc(client *gophercloud.ServiceClient, networkID string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
n, err := networks.Get(client, networkID).Extract()
if err != nil {
if _, ok := err.(gophercloud.ErrDefault404); ok {
return n, "DELETED", nil
}
if errCode, ok := err.(gophercloud.ErrUnexpectedResponseCode); ok {
if errCode.Actual == 409 {
return n, "ACTIVE", nil
}
}
return n, "", err
}
return n, n.Status, nil
}
}
func expandNetworkingNetworkSegmentsV2(segments *schema.Set) []provider.Segment {
rawSegments := segments.List()
providerSegments := make([]provider.Segment, len(rawSegments))
for i, raw := range rawSegments {
rawMap := raw.(map[string]interface{})
providerSegments[i] = provider.Segment{
PhysicalNetwork: rawMap["physical_network"].(string),
NetworkType: rawMap["network_type"].(string),
SegmentationID: rawMap["segmentation_id"].(int),
}
}
return providerSegments
}