diff --git a/builtin/providers/openstack/resource_openstack_networking_subnet_v2.go b/builtin/providers/openstack/resource_openstack_networking_subnet_v2.go index 140b29f02..991686eb2 100644 --- a/builtin/providers/openstack/resource_openstack_networking_subnet_v2.go +++ b/builtin/providers/openstack/resource_openstack_networking_subnet_v2.go @@ -8,8 +8,8 @@ import ( "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/schema" - "github.com/rackspace/gophercloud" - "github.com/rackspace/gophercloud/openstack/networking/v2/subnets" + "github.com/gophercloud/gophercloud" + "github.com/gophercloud/gophercloud/openstack/networking/v2/subnets" ) func resourceNetworkingSubnetV2() *schema.Resource { @@ -74,9 +74,10 @@ func resourceNetworkingSubnetV2() *schema.Resource { Computed: true, }, "no_gateway": &schema.Schema{ - Type: schema.TypeBool, - Optional: true, - ForceNew: false, + Type: schema.TypeBool, + Optional: true, + ForceNew: false, + Deprecated: "This argument is no longer required. Instead, omit gateway_ip or set it to an empty string", }, "ip_version": &schema.Schema{ Type: schema.TypeInt, @@ -133,8 +134,7 @@ type SubnetCreateOpts struct { TenantID string AllocationPools []subnets.AllocationPool GatewayIP string - NoGateway bool - IPVersion int + IPVersion gophercloud.IPVersion EnableDHCP *bool DNSNameservers []string HostRoutes []subnets.HostRoute @@ -151,15 +151,10 @@ func (opts SubnetCreateOpts) ToSubnetCreateMap() (map[string]interface{}, error) if opts.CIDR == "" { 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") } - // 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["cidr"] = opts.CIDR @@ -171,8 +166,6 @@ func (opts SubnetCreateOpts) ToSubnetCreateMap() (map[string]interface{}, error) } if opts.GatewayIP != "" { s["gateway_ip"] = opts.GatewayIP - } else if opts.NoGateway { - s["gateway_ip"] = nil } if opts.TenantID != "" { s["tenant_id"] = opts.TenantID @@ -221,14 +214,17 @@ func resourceNetworkingSubnetV2Create(d *schema.ResourceData, meta interface{}) TenantID: d.Get("tenant_id").(string), AllocationPools: resourceSubnetAllocationPoolsV2(d), GatewayIP: d.Get("gateway_ip").(string), - NoGateway: d.Get("no_gateway").(bool), - IPVersion: d.Get("ip_version").(int), DNSNameservers: resourceSubnetDNSNameserversV2(d), HostRoutes: resourceSubnetHostRoutesV2(d), EnableDHCP: &enableDHCP, 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) s, err := subnets.Create(networkingClient, createOpts).Extract() if err != nil { @@ -306,7 +302,7 @@ func resourceNetworkingSubnetV2Update(d *schema.ResourceData, meta interface{}) } if d.HasChange("no_gateway") { - updateOpts.NoGateway = d.Get("no_gateway").(bool) + updateOpts.GatewayIP = "" } if d.HasChange("dns_nameservers") { @@ -392,6 +388,18 @@ func resourceSubnetHostRoutesV2(d *schema.ResourceData) []subnets.HostRoute { 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 { return func() (interface{}, string, error) { 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() if err != nil { - errCode, ok := err.(*gophercloud.UnexpectedResponseCodeError) + errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) if !ok { return s, "ACTIVE", err } @@ -422,7 +430,7 @@ func waitForSubnetDelete(networkingClient *gophercloud.ServiceClient, subnetId s err = subnets.Delete(networkingClient, subnetId).ExtractErr() if err != nil { - errCode, ok := err.(*gophercloud.UnexpectedResponseCodeError) + errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) if !ok { return s, "ACTIVE", err } diff --git a/builtin/providers/openstack/resource_openstack_networking_subnet_v2_test.go b/builtin/providers/openstack/resource_openstack_networking_subnet_v2_test.go index 35a25da1a..83f6c9b19 100644 --- a/builtin/providers/openstack/resource_openstack_networking_subnet_v2_test.go +++ b/builtin/providers/openstack/resource_openstack_networking_subnet_v2_test.go @@ -7,7 +7,7 @@ import ( "github.com/hashicorp/terraform/helper/resource" "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) {