provider/openstack: gophercloud migration: networking subnet
This commit is contained in:
parent
f2ba380794
commit
d5bf0197a7
|
@ -8,8 +8,8 @@ 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/gophercloud/gophercloud"
|
||||||
"github.com/rackspace/gophercloud/openstack/networking/v2/subnets"
|
"github.com/gophercloud/gophercloud/openstack/networking/v2/subnets"
|
||||||
)
|
)
|
||||||
|
|
||||||
func resourceNetworkingSubnetV2() *schema.Resource {
|
func resourceNetworkingSubnetV2() *schema.Resource {
|
||||||
|
@ -74,9 +74,10 @@ func resourceNetworkingSubnetV2() *schema.Resource {
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"no_gateway": &schema.Schema{
|
"no_gateway": &schema.Schema{
|
||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
ForceNew: false,
|
ForceNew: false,
|
||||||
|
Deprecated: "This argument is no longer required. Instead, omit gateway_ip or set it to an empty string",
|
||||||
},
|
},
|
||||||
"ip_version": &schema.Schema{
|
"ip_version": &schema.Schema{
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
|
@ -133,8 +134,7 @@ type SubnetCreateOpts struct {
|
||||||
TenantID string
|
TenantID string
|
||||||
AllocationPools []subnets.AllocationPool
|
AllocationPools []subnets.AllocationPool
|
||||||
GatewayIP string
|
GatewayIP string
|
||||||
NoGateway bool
|
IPVersion gophercloud.IPVersion
|
||||||
IPVersion int
|
|
||||||
EnableDHCP *bool
|
EnableDHCP *bool
|
||||||
DNSNameservers []string
|
DNSNameservers []string
|
||||||
HostRoutes []subnets.HostRoute
|
HostRoutes []subnets.HostRoute
|
||||||
|
@ -151,15 +151,10 @@ func (opts SubnetCreateOpts) ToSubnetCreateMap() (map[string]interface{}, error)
|
||||||
if opts.CIDR == "" {
|
if opts.CIDR == "" {
|
||||||
return nil, fmt.Errorf("A valid CIDR is required")
|
return nil, fmt.Errorf("A valid CIDR is required")
|
||||||
}
|
}
|
||||||
if opts.IPVersion != 0 && opts.IPVersion != subnets.IPv4 && opts.IPVersion != subnets.IPv6 {
|
if opts.IPVersion != 0 && opts.IPVersion != gophercloud.IPv4 && opts.IPVersion != gophercloud.IPv6 {
|
||||||
return nil, fmt.Errorf("An IP type must either be 4 or 6")
|
return nil, fmt.Errorf("An IP type must either be 4 or 6")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Both GatewayIP and NoGateway should not be set
|
|
||||||
if opts.GatewayIP != "" && opts.NoGateway {
|
|
||||||
return nil, fmt.Errorf("Both disabling the gateway and specifying a gateway is not allowed")
|
|
||||||
}
|
|
||||||
|
|
||||||
s["network_id"] = opts.NetworkID
|
s["network_id"] = opts.NetworkID
|
||||||
s["cidr"] = opts.CIDR
|
s["cidr"] = opts.CIDR
|
||||||
|
|
||||||
|
@ -171,8 +166,6 @@ func (opts SubnetCreateOpts) ToSubnetCreateMap() (map[string]interface{}, error)
|
||||||
}
|
}
|
||||||
if opts.GatewayIP != "" {
|
if opts.GatewayIP != "" {
|
||||||
s["gateway_ip"] = opts.GatewayIP
|
s["gateway_ip"] = opts.GatewayIP
|
||||||
} else if opts.NoGateway {
|
|
||||||
s["gateway_ip"] = nil
|
|
||||||
}
|
}
|
||||||
if opts.TenantID != "" {
|
if opts.TenantID != "" {
|
||||||
s["tenant_id"] = opts.TenantID
|
s["tenant_id"] = opts.TenantID
|
||||||
|
@ -221,14 +214,17 @@ func resourceNetworkingSubnetV2Create(d *schema.ResourceData, meta interface{})
|
||||||
TenantID: d.Get("tenant_id").(string),
|
TenantID: d.Get("tenant_id").(string),
|
||||||
AllocationPools: resourceSubnetAllocationPoolsV2(d),
|
AllocationPools: resourceSubnetAllocationPoolsV2(d),
|
||||||
GatewayIP: d.Get("gateway_ip").(string),
|
GatewayIP: d.Get("gateway_ip").(string),
|
||||||
NoGateway: d.Get("no_gateway").(bool),
|
|
||||||
IPVersion: d.Get("ip_version").(int),
|
|
||||||
DNSNameservers: resourceSubnetDNSNameserversV2(d),
|
DNSNameservers: resourceSubnetDNSNameserversV2(d),
|
||||||
HostRoutes: resourceSubnetHostRoutesV2(d),
|
HostRoutes: resourceSubnetHostRoutesV2(d),
|
||||||
EnableDHCP: &enableDHCP,
|
EnableDHCP: &enableDHCP,
|
||||||
ValueSpecs: subnetValueSpecs(d),
|
ValueSpecs: subnetValueSpecs(d),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if v, ok := d.GetOk("ip_version"); ok {
|
||||||
|
ipVersion := resourceNetworkingSubnetV2DetermineIPVersion(v.(int))
|
||||||
|
createOpts.IPVersion = ipVersion
|
||||||
|
}
|
||||||
|
|
||||||
log.Printf("[DEBUG] Create Options: %#v", createOpts)
|
log.Printf("[DEBUG] Create Options: %#v", createOpts)
|
||||||
s, err := subnets.Create(networkingClient, createOpts).Extract()
|
s, err := subnets.Create(networkingClient, createOpts).Extract()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -306,7 +302,7 @@ func resourceNetworkingSubnetV2Update(d *schema.ResourceData, meta interface{})
|
||||||
}
|
}
|
||||||
|
|
||||||
if d.HasChange("no_gateway") {
|
if d.HasChange("no_gateway") {
|
||||||
updateOpts.NoGateway = d.Get("no_gateway").(bool)
|
updateOpts.GatewayIP = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
if d.HasChange("dns_nameservers") {
|
if d.HasChange("dns_nameservers") {
|
||||||
|
@ -392,6 +388,18 @@ func resourceSubnetHostRoutesV2(d *schema.ResourceData) []subnets.HostRoute {
|
||||||
return hr
|
return hr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func resourceNetworkingSubnetV2DetermineIPVersion(v int) gophercloud.IPVersion {
|
||||||
|
var ipVersion gophercloud.IPVersion
|
||||||
|
switch v {
|
||||||
|
case 4:
|
||||||
|
ipVersion = gophercloud.IPv4
|
||||||
|
case 6:
|
||||||
|
ipVersion = gophercloud.IPv6
|
||||||
|
}
|
||||||
|
|
||||||
|
return ipVersion
|
||||||
|
}
|
||||||
|
|
||||||
func waitForSubnetActive(networkingClient *gophercloud.ServiceClient, subnetId string) resource.StateRefreshFunc {
|
func waitForSubnetActive(networkingClient *gophercloud.ServiceClient, subnetId string) resource.StateRefreshFunc {
|
||||||
return func() (interface{}, string, error) {
|
return func() (interface{}, string, error) {
|
||||||
s, err := subnets.Get(networkingClient, subnetId).Extract()
|
s, err := subnets.Get(networkingClient, subnetId).Extract()
|
||||||
|
@ -410,7 +418,7 @@ func waitForSubnetDelete(networkingClient *gophercloud.ServiceClient, subnetId s
|
||||||
|
|
||||||
s, err := subnets.Get(networkingClient, subnetId).Extract()
|
s, err := subnets.Get(networkingClient, subnetId).Extract()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errCode, ok := err.(*gophercloud.UnexpectedResponseCodeError)
|
errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode)
|
||||||
if !ok {
|
if !ok {
|
||||||
return s, "ACTIVE", err
|
return s, "ACTIVE", err
|
||||||
}
|
}
|
||||||
|
@ -422,7 +430,7 @@ func waitForSubnetDelete(networkingClient *gophercloud.ServiceClient, subnetId s
|
||||||
|
|
||||||
err = subnets.Delete(networkingClient, subnetId).ExtractErr()
|
err = subnets.Delete(networkingClient, subnetId).ExtractErr()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errCode, ok := err.(*gophercloud.UnexpectedResponseCodeError)
|
errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode)
|
||||||
if !ok {
|
if !ok {
|
||||||
return s, "ACTIVE", err
|
return s, "ACTIVE", err
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ import (
|
||||||
"github.com/hashicorp/terraform/helper/resource"
|
"github.com/hashicorp/terraform/helper/resource"
|
||||||
"github.com/hashicorp/terraform/terraform"
|
"github.com/hashicorp/terraform/terraform"
|
||||||
|
|
||||||
"github.com/rackspace/gophercloud/openstack/networking/v2/subnets"
|
"github.com/gophercloud/gophercloud/openstack/networking/v2/subnets"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestAccNetworkingV2Subnet_basic(t *testing.T) {
|
func TestAccNetworkingV2Subnet_basic(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue