From c11a4ef2149f2825b092547ab2da0cf5da8ca5cd Mon Sep 17 00:00:00 2001 From: Joe Topjian Date: Sun, 4 Sep 2016 04:57:25 +0000 Subject: [PATCH] provider/openstack: gophercloud migration: updating error responses --- ...source_openstack_blockstorage_volume_v1.go | 6 +-- ...e_openstack_blockstorage_volume_v1_test.go | 7 +--- ...source_openstack_blockstorage_volume_v2.go | 6 +-- ...e_openstack_blockstorage_volume_v2_test.go | 6 +-- .../resource_openstack_compute_instance_v2.go | 42 +++++++------------ ...urce_openstack_compute_instance_v2_test.go | 6 +-- .../resource_openstack_compute_secgroup_v2.go | 10 ++--- .../resource_openstack_fw_firewall_v1.go | 7 +--- .../resource_openstack_fw_firewall_v1_test.go | 14 +++---- .../resource_openstack_fw_policy_v1.go | 3 +- .../resource_openstack_fw_policy_v1_test.go | 13 ++---- .../resource_openstack_fw_rule_v1_test.go | 13 ++---- .../resource_openstack_lb_listener_v2.go | 14 ++----- .../resource_openstack_lb_loadbalancer_v2.go | 14 ++----- .../resource_openstack_lb_member_v1.go | 7 +--- .../resource_openstack_lb_member_v2.go | 14 ++----- .../resource_openstack_lb_monitor_v1.go | 34 ++++++++------- .../resource_openstack_lb_monitor_v2.go | 14 ++----- .../resource_openstack_lb_pool_v1.go | 14 ++----- .../resource_openstack_lb_pool_v2.go | 14 ++----- .../openstack/resource_openstack_lb_vip_v1.go | 14 ++----- ...urce_openstack_networking_floatingip_v2.go | 14 ++----- ...esource_openstack_networking_network_v2.go | 14 ++----- .../resource_openstack_networking_port_v2.go | 14 ++----- ...penstack_networking_router_interface_v2.go | 22 +++------- ...ce_openstack_networking_router_route_v2.go | 24 +++-------- ...resource_openstack_networking_router_v2.go | 22 +++------- ...e_openstack_networking_secgroup_rule_v2.go | 14 ++----- ...source_openstack_networking_secgroup_v2.go | 14 ++----- ...resource_openstack_networking_subnet_v2.go | 14 ++----- builtin/providers/openstack/util.go | 7 +--- 31 files changed, 133 insertions(+), 298 deletions(-) diff --git a/builtin/providers/openstack/resource_openstack_blockstorage_volume_v1.go b/builtin/providers/openstack/resource_openstack_blockstorage_volume_v1.go index eab4303b40..589f0af19e 100644 --- a/builtin/providers/openstack/resource_openstack_blockstorage_volume_v1.go +++ b/builtin/providers/openstack/resource_openstack_blockstorage_volume_v1.go @@ -306,11 +306,7 @@ func VolumeV1StateRefreshFunc(client *gophercloud.ServiceClient, volumeID string return func() (interface{}, string, error) { v, err := volumes.Get(client, volumeID).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return nil, "", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { return v, "deleted", nil } return nil, "", err diff --git a/builtin/providers/openstack/resource_openstack_blockstorage_volume_v1_test.go b/builtin/providers/openstack/resource_openstack_blockstorage_volume_v1_test.go index 0c3ee8c8bc..13eb2053c5 100644 --- a/builtin/providers/openstack/resource_openstack_blockstorage_volume_v1_test.go +++ b/builtin/providers/openstack/resource_openstack_blockstorage_volume_v1_test.go @@ -117,13 +117,10 @@ func testAccCheckBlockStorageV1VolumeDoesNotExist(t *testing.T, n string, volume _, err = volumes.Get(blockStorageClient, volume.ID).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { return nil } + return err } diff --git a/builtin/providers/openstack/resource_openstack_blockstorage_volume_v2.go b/builtin/providers/openstack/resource_openstack_blockstorage_volume_v2.go index 745fbfa587..6aa9e79706 100644 --- a/builtin/providers/openstack/resource_openstack_blockstorage_volume_v2.go +++ b/builtin/providers/openstack/resource_openstack_blockstorage_volume_v2.go @@ -318,11 +318,7 @@ func VolumeV2StateRefreshFunc(client *gophercloud.ServiceClient, volumeID string return func() (interface{}, string, error) { v, err := volumes.Get(client, volumeID).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return nil, "", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { return v, "deleted", nil } return nil, "", err diff --git a/builtin/providers/openstack/resource_openstack_blockstorage_volume_v2_test.go b/builtin/providers/openstack/resource_openstack_blockstorage_volume_v2_test.go index d37658dc3b..663588a371 100644 --- a/builtin/providers/openstack/resource_openstack_blockstorage_volume_v2_test.go +++ b/builtin/providers/openstack/resource_openstack_blockstorage_volume_v2_test.go @@ -130,11 +130,7 @@ func testAccCheckBlockStorageV2VolumeDoesNotExist(t *testing.T, n string, volume _, err = volumes.Get(blockStorageClient, volume.ID).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { return nil } return err diff --git a/builtin/providers/openstack/resource_openstack_compute_instance_v2.go b/builtin/providers/openstack/resource_openstack_compute_instance_v2.go index 7888a4232e..80cb957d33 100644 --- a/builtin/providers/openstack/resource_openstack_compute_instance_v2.go +++ b/builtin/providers/openstack/resource_openstack_compute_instance_v2.go @@ -617,15 +617,11 @@ func resourceComputeInstanceV2Update(d *schema.ResourceData, meta interface{}) e for _, g := range secgroupsToRemove.List() { err := secgroups.RemoveServer(computeClient, d.Id(), g.(string)).ExtractErr() if err != nil && err.Error() != "EOF" { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return fmt.Errorf("Error removing security group (%s) from OpenStack server (%s): %s", g, d.Id(), err) - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { continue - } else { - return fmt.Errorf("Error removing security group (%s) from OpenStack server (%s): %s", g, d.Id(), err) } + + return fmt.Errorf("Error removing security group (%s) from OpenStack server (%s): %s", g, d.Id(), err) } else { log.Printf("[DEBUG] Removed security group (%s) from instance (%s)", g, d.Id()) } @@ -875,11 +871,7 @@ func ServerV2StateRefreshFunc(client *gophercloud.ServiceClient, instanceID stri return func() (interface{}, string, error) { s, err := servers.Get(client, instanceID).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return nil, "", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { return s, "DELETED", nil } return nil, "", err @@ -972,16 +964,19 @@ func getInstanceNetworks(computeClient *gophercloud.ServiceClient, d *schema.Res allPages, err := tenantnetworks.List(computeClient).AllPages() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { + if _, ok := err.(gophercloud.ErrDefault404); ok { + tenantNetworkExt = false + } + + if errCode, ok := err.(gophercloud.ErrUnexpectedResponseCode); ok { + if errCode.Actual == 403 { + tenantNetworkExt = false + } + return nil, err } - if errCode.Actual == 404 || errCode.Actual == 403 { - tenantNetworkExt = false - } else { - return nil, err - } + return nil, err } networkID := "" @@ -1290,19 +1285,14 @@ func setImageInformation(computeClient *gophercloud.ServiceClient, server *serve if imageId != "" { d.Set("image_id", imageId) if image, err := images.Get(computeClient, imageId).Extract(); err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { // If the image name can't be found, set the value to "Image not found". // The most likely scenario is that the image no longer exists in the Image Service // but the instance still has a record from when it existed. d.Set("image_name", "Image not found") return nil - } else { - return err } + return err } else { d.Set("image_name", image.Name) } diff --git a/builtin/providers/openstack/resource_openstack_compute_instance_v2_test.go b/builtin/providers/openstack/resource_openstack_compute_instance_v2_test.go index 102dcd4afe..42e6ec8cde 100644 --- a/builtin/providers/openstack/resource_openstack_compute_instance_v2_test.go +++ b/builtin/providers/openstack/resource_openstack_compute_instance_v2_test.go @@ -1098,11 +1098,7 @@ func testAccCheckComputeV2InstanceDoesNotExist(t *testing.T, n string, instance _, err = servers.Get(computeClient, instance.ID).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { return nil } return err diff --git a/builtin/providers/openstack/resource_openstack_compute_secgroup_v2.go b/builtin/providers/openstack/resource_openstack_compute_secgroup_v2.go index a39779b193..3d01eb6909 100644 --- a/builtin/providers/openstack/resource_openstack_compute_secgroup_v2.go +++ b/builtin/providers/openstack/resource_openstack_compute_secgroup_v2.go @@ -197,15 +197,11 @@ func resourceComputeSecGroupV2Update(d *schema.ResourceData, meta interface{}) e rule := resourceSecGroupRuleV2(d, r) err := secgroups.DeleteRule(computeClient, rule.ID).ExtractErr() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return fmt.Errorf("Error removing rule (%s) from OpenStack security group (%s): %s", rule.ID, d.Id(), err) - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { continue - } else { - return fmt.Errorf("Error removing rule (%s) from OpenStack security group (%s)", rule.ID, d.Id()) } + + return fmt.Errorf("Error removing rule (%s) from OpenStack security group (%s)", rule.ID, d.Id()) } else { log.Printf("[DEBUG] Removed rule (%s) from OpenStack security group (%s): %s", rule.ID, d.Id(), err) } diff --git a/builtin/providers/openstack/resource_openstack_fw_firewall_v1.go b/builtin/providers/openstack/resource_openstack_fw_firewall_v1.go index b411cdc499..1c3d4a643a 100644 --- a/builtin/providers/openstack/resource_openstack_fw_firewall_v1.go +++ b/builtin/providers/openstack/resource_openstack_fw_firewall_v1.go @@ -231,14 +231,11 @@ func waitForFirewallDeletion(networkingClient *gophercloud.ServiceClient, id str log.Printf("[DEBUG] Get firewall %s => %#v", id, fw) if err != nil { - httpStatus := err.(*gophercloud.ErrUnexpectedResponseCode) - log.Printf("[DEBUG] Get firewall %s status is %d", id, httpStatus.Actual) - - if httpStatus.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Firewall %s is actually deleted", id) return "", "DELETED", nil } - return nil, "", fmt.Errorf("Unexpected status code %d", httpStatus.Actual) + return nil, "", fmt.Errorf("Unexpected error: %s", err) } log.Printf("[DEBUG] Firewall %s deletion is pending", id) diff --git a/builtin/providers/openstack/resource_openstack_fw_firewall_v1_test.go b/builtin/providers/openstack/resource_openstack_fw_firewall_v1_test.go index 1def9f4788..a88cdff092 100644 --- a/builtin/providers/openstack/resource_openstack_fw_firewall_v1_test.go +++ b/builtin/providers/openstack/resource_openstack_fw_firewall_v1_test.go @@ -47,13 +47,13 @@ func testAccCheckFWFirewallV1Destroy(s *terraform.State) error { if rs.Type != "openstack_firewall" { continue } + _, err = firewalls.Get(networkingClient, rs.Primary.ID).Extract() if err == nil { return fmt.Errorf("Firewall (%s) still exists.", rs.Primary.ID) } - httpError, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok || httpError.Actual != 404 { - return httpError + if _, ok := err.(gophercloud.ErrDefault404); !ok { + return err } } return nil @@ -84,19 +84,15 @@ func testAccCheckFWFirewallV1Exists(n, expectedName, expectedDescription string, // if we get a 404 error. Fail on any other error. found, err = firewalls.Get(networkingClient, rs.Primary.ID).Extract() if err != nil { - httpError, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok || httpError.Actual != 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { time.Sleep(time.Second) continue } + return err } break } - if err != nil { - return err - } - if found.Name != expectedName { return fmt.Errorf("Expected Name to be <%s> but found <%s>", expectedName, found.Name) } diff --git a/builtin/providers/openstack/resource_openstack_fw_policy_v1.go b/builtin/providers/openstack/resource_openstack_fw_policy_v1.go index 13033afa31..10255516a1 100644 --- a/builtin/providers/openstack/resource_openstack_fw_policy_v1.go +++ b/builtin/providers/openstack/resource_openstack_fw_policy_v1.go @@ -186,8 +186,7 @@ func resourceFWPolicyV1Delete(d *schema.ResourceData, meta interface{}) error { break } - httpError, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok || httpError.Actual != 409 { + if _, ok := err.(gophercloud.ErrDefault404); !ok { return err } diff --git a/builtin/providers/openstack/resource_openstack_fw_policy_v1_test.go b/builtin/providers/openstack/resource_openstack_fw_policy_v1_test.go index 633f0207bf..86287429fa 100644 --- a/builtin/providers/openstack/resource_openstack_fw_policy_v1_test.go +++ b/builtin/providers/openstack/resource_openstack_fw_policy_v1_test.go @@ -80,9 +80,8 @@ func testAccCheckFWPolicyV1Destroy(s *terraform.State) error { if err == nil { return fmt.Errorf("Firewall policy (%s) still exists.", rs.Primary.ID) } - httpError, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok || httpError.Actual != 404 { - return httpError + if _, ok := err.(gophercloud.ErrDefault404); !ok { + return err } } return nil @@ -113,19 +112,15 @@ func testAccCheckFWPolicyV1Exists(n, name, description string, ruleCount int) re // if we get a 404 error. Fail on any other error. found, err = policies.Get(networkingClient, rs.Primary.ID).Extract() if err != nil { - httpError, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok || httpError.Actual != 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { time.Sleep(time.Second) continue } + return err } break } - if err != nil { - return err - } - if name != found.Name { return fmt.Errorf("Expected name <%s>, but found <%s>", name, found.Name) } diff --git a/builtin/providers/openstack/resource_openstack_fw_rule_v1_test.go b/builtin/providers/openstack/resource_openstack_fw_rule_v1_test.go index 8ca8b0cec6..560161d570 100644 --- a/builtin/providers/openstack/resource_openstack_fw_rule_v1_test.go +++ b/builtin/providers/openstack/resource_openstack_fw_rule_v1_test.go @@ -88,9 +88,8 @@ func testAccCheckFWRuleV1Destroy(s *terraform.State) error { if err == nil { return fmt.Errorf("Firewall rule (%s) still exists.", rs.Primary.ID) } - httpError, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok || httpError.Actual != 404 { - return httpError + if _, ok := err.(gophercloud.ErrDefault404); !ok { + return err } } return nil @@ -121,19 +120,15 @@ func testAccCheckFWRuleV1Exists(n string, expected *rules.Rule) resource.TestChe // if we get a 404 error. Fail on any other error. found, err = rules.Get(networkingClient, rs.Primary.ID).Extract() if err != nil { - httpError, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok || httpError.Actual != 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { time.Sleep(time.Second) continue } + return err } break } - if err != nil { - return err - } - expected.ID = found.ID // Erase the tenant id because we don't want to compare // it as long it is not present in the expected diff --git a/builtin/providers/openstack/resource_openstack_lb_listener_v2.go b/builtin/providers/openstack/resource_openstack_lb_listener_v2.go index 00a511eff4..f5e4de5941 100644 --- a/builtin/providers/openstack/resource_openstack_lb_listener_v2.go +++ b/builtin/providers/openstack/resource_openstack_lb_listener_v2.go @@ -285,27 +285,21 @@ func waitForListenerDelete(networkingClient *gophercloud.ServiceClient, listener listener, err := listeners.Get(networkingClient, listenerID).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return listener, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack LBaaSV2 listener %s", listenerID) return listener, "DELETED", nil } + return listener, "ACTIVE", err } log.Printf("[DEBUG] Openstack LBaaSV2 listener: %+v", listener) err = listeners.Delete(networkingClient, listenerID).ExtractErr() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return listener, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack LBaaSV2 listener %s", listenerID) return listener, "DELETED", nil } + return listener, "ACTIVE", err } log.Printf("[DEBUG] OpenStack LBaaSV2 listener %s still active.", listenerID) diff --git a/builtin/providers/openstack/resource_openstack_lb_loadbalancer_v2.go b/builtin/providers/openstack/resource_openstack_lb_loadbalancer_v2.go index ccfcc875eb..165ae68763 100644 --- a/builtin/providers/openstack/resource_openstack_lb_loadbalancer_v2.go +++ b/builtin/providers/openstack/resource_openstack_lb_loadbalancer_v2.go @@ -228,27 +228,21 @@ func waitForLoadBalancerDelete(networkingClient *gophercloud.ServiceClient, lbID lb, err := loadbalancers.Get(networkingClient, lbID).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return lb, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack LoadBalancerV2 %s", lbID) return lb, "DELETED", nil } + return lb, "ACTIVE", err } log.Printf("[DEBUG] Openstack LoadBalancerV2: %+v", lb) err = loadbalancers.Delete(networkingClient, lbID).ExtractErr() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return lb, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack LoadBalancerV2 %s", lbID) return lb, "DELETED", nil } + return lb, "ACTIVE", err } log.Printf("[DEBUG] OpenStack LoadBalancerV2 %s still active.", lbID) diff --git a/builtin/providers/openstack/resource_openstack_lb_member_v1.go b/builtin/providers/openstack/resource_openstack_lb_member_v1.go index f014e2323a..93959a55f2 100644 --- a/builtin/providers/openstack/resource_openstack_lb_member_v1.go +++ b/builtin/providers/openstack/resource_openstack_lb_member_v1.go @@ -216,14 +216,11 @@ func waitForLBMemberDelete(networkingClient *gophercloud.ServiceClient, memberId m, err := members.Get(networkingClient, memberId).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return m, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack LB member %s", memberId) return m, "DELETED", nil } + return m, "ACTIVE", err } log.Printf("[DEBUG] OpenStack LB member %s still active.", memberId) diff --git a/builtin/providers/openstack/resource_openstack_lb_member_v2.go b/builtin/providers/openstack/resource_openstack_lb_member_v2.go index 0afdd82ea5..d06225125a 100644 --- a/builtin/providers/openstack/resource_openstack_lb_member_v2.go +++ b/builtin/providers/openstack/resource_openstack_lb_member_v2.go @@ -243,27 +243,21 @@ func waitForMemberDelete(networkingClient *gophercloud.ServiceClient, poolID str member, err := pools.GetMember(networkingClient, poolID, memberID).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return member, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack LBaaSV2 Member %s", memberID) return member, "DELETED", nil } + return member, "ACTIVE", err } log.Printf("[DEBUG] Openstack LBaaSV2 Member: %+v", member) err = pools.DeleteMember(networkingClient, poolID, memberID).ExtractErr() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return member, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack LBaaSV2 Member %s", memberID) return member, "DELETED", nil } + return member, "ACTIVE", err } log.Printf("[DEBUG] OpenStack LBaaSV2 Member %s still active.", memberID) diff --git a/builtin/providers/openstack/resource_openstack_lb_monitor_v1.go b/builtin/providers/openstack/resource_openstack_lb_monitor_v1.go index c6b9178748..f3d15f6480 100644 --- a/builtin/providers/openstack/resource_openstack_lb_monitor_v1.go +++ b/builtin/providers/openstack/resource_openstack_lb_monitor_v1.go @@ -264,35 +264,37 @@ func waitForLBMonitorDelete(networkingClient *gophercloud.ServiceClient, monitor m, err := monitors.Get(networkingClient, monitorId).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return m, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack LB Monitor %s", monitorId) return m, "DELETED", nil } - if errCode.Actual == 409 { - log.Printf("[DEBUG] OpenStack LB Monitor (%s) is waiting for Pool to delete.", monitorId) - return m, "PENDING", nil + + if errCode, ok := err.(gophercloud.ErrUnexpectedResponseCode); ok { + if errCode.Actual == 409 { + log.Printf("[DEBUG] OpenStack LB Monitor (%s) is waiting for Pool to delete.", monitorId) + return m, "PENDING", nil + } } + + return m, "ACTIVE", err } log.Printf("[DEBUG] OpenStack LB Monitor: %+v", m) err = monitors.Delete(networkingClient, monitorId).ExtractErr() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return m, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack LB Monitor %s", monitorId) return m, "DELETED", nil } - if errCode.Actual == 409 { - log.Printf("[DEBUG] OpenStack LB Monitor (%s) is waiting for Pool to delete.", monitorId) - return m, "PENDING", nil + + if errCode, ok := err.(gophercloud.ErrUnexpectedResponseCode); ok { + if errCode.Actual == 409 { + log.Printf("[DEBUG] OpenStack LB Monitor (%s) is waiting for Pool to delete.", monitorId) + return m, "PENDING", nil + } } + + return m, "ACTIVE", err } log.Printf("[DEBUG] OpenStack LB Monitor %s still active.", monitorId) diff --git a/builtin/providers/openstack/resource_openstack_lb_monitor_v2.go b/builtin/providers/openstack/resource_openstack_lb_monitor_v2.go index c62bfe8e56..3b3421daab 100644 --- a/builtin/providers/openstack/resource_openstack_lb_monitor_v2.go +++ b/builtin/providers/openstack/resource_openstack_lb_monitor_v2.go @@ -258,27 +258,21 @@ func waitForMonitorDelete(networkingClient *gophercloud.ServiceClient, monitorID monitor, err := monitors.Get(networkingClient, monitorID).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return monitor, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack LBaaSV2 Monitor %s", monitorID) return monitor, "DELETED", nil } + return monitor, "ACTIVE", err } log.Printf("[DEBUG] Openstack LBaaSV2 Monitor: %+v", monitor) err = monitors.Delete(networkingClient, monitorID).ExtractErr() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return monitor, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack LBaaSV2 Monitor %s", monitorID) return monitor, "DELETED", nil } + return monitor, "ACTIVE", err } log.Printf("[DEBUG] OpenStack LBaaSV2 Monitor %s still active.", monitorID) diff --git a/builtin/providers/openstack/resource_openstack_lb_pool_v1.go b/builtin/providers/openstack/resource_openstack_lb_pool_v1.go index fd146a6f20..c1a15c200e 100644 --- a/builtin/providers/openstack/resource_openstack_lb_pool_v1.go +++ b/builtin/providers/openstack/resource_openstack_lb_pool_v1.go @@ -437,27 +437,21 @@ func waitForLBPoolDelete(networkingClient *gophercloud.ServiceClient, poolId str p, err := pools.Get(networkingClient, poolId).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return p, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack LB Pool %s", poolId) return p, "DELETED", nil } + return p, "ACTIVE", err } log.Printf("[DEBUG] OpenStack LB Pool: %+v", p) err = pools.Delete(networkingClient, poolId).ExtractErr() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return p, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack LB Pool %s", poolId) return p, "DELETED", nil } + return p, "ACTIVE", err } log.Printf("[DEBUG] OpenStack LB Pool %s still active.", poolId) diff --git a/builtin/providers/openstack/resource_openstack_lb_pool_v2.go b/builtin/providers/openstack/resource_openstack_lb_pool_v2.go index 4ba7d68edf..32313e06c5 100644 --- a/builtin/providers/openstack/resource_openstack_lb_pool_v2.go +++ b/builtin/providers/openstack/resource_openstack_lb_pool_v2.go @@ -291,27 +291,21 @@ func waitForPoolDelete(networkingClient *gophercloud.ServiceClient, poolID strin pool, err := pools.Get(networkingClient, poolID).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return pool, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack LBaaSV2 Pool %s", poolID) return pool, "DELETED", nil } + return pool, "ACTIVE", err } log.Printf("[DEBUG] Openstack LBaaSV2 Pool: %+v", pool) err = pools.Delete(networkingClient, poolID).ExtractErr() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return pool, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack LBaaSV2 Pool %s", poolID) return pool, "DELETED", nil } + return pool, "ACTIVE", err } log.Printf("[DEBUG] OpenStack LBaaSV2 Pool %s still active.", poolID) diff --git a/builtin/providers/openstack/resource_openstack_lb_vip_v1.go b/builtin/providers/openstack/resource_openstack_lb_vip_v1.go index 0be813e05a..9f64f7588e 100644 --- a/builtin/providers/openstack/resource_openstack_lb_vip_v1.go +++ b/builtin/providers/openstack/resource_openstack_lb_vip_v1.go @@ -370,27 +370,21 @@ func waitForLBVIPDelete(networkingClient *gophercloud.ServiceClient, vipId strin p, err := vips.Get(networkingClient, vipId).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return p, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack LB VIP %s", vipId) return p, "DELETED", nil } + return p, "ACTIVE", err } log.Printf("[DEBUG] OpenStack LB VIP: %+v", p) err = vips.Delete(networkingClient, vipId).ExtractErr() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return p, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack LB VIP %s", vipId) return p, "DELETED", nil } + return p, "ACTIVE", err } log.Printf("[DEBUG] OpenStack LB VIP %s still active.", vipId) diff --git a/builtin/providers/openstack/resource_openstack_networking_floatingip_v2.go b/builtin/providers/openstack/resource_openstack_networking_floatingip_v2.go index 82e98122c8..02c3f79264 100644 --- a/builtin/providers/openstack/resource_openstack_networking_floatingip_v2.go +++ b/builtin/providers/openstack/resource_openstack_networking_floatingip_v2.go @@ -259,26 +259,20 @@ func waitForFloatingIPDelete(networkingClient *gophercloud.ServiceClient, fId st f, err := floatingips.Get(networkingClient, fId).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return f, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Floating IP %s", fId) return f, "DELETED", nil } + return f, "ACTIVE", err } err = floatingips.Delete(networkingClient, fId).ExtractErr() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return f, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Floating IP %s", fId) return f, "DELETED", nil } + return f, "ACTIVE", err } log.Printf("[DEBUG] OpenStack Floating IP %s still active.\n", fId) diff --git a/builtin/providers/openstack/resource_openstack_networking_network_v2.go b/builtin/providers/openstack/resource_openstack_networking_network_v2.go index 73034eba33..7101abe3c6 100644 --- a/builtin/providers/openstack/resource_openstack_networking_network_v2.go +++ b/builtin/providers/openstack/resource_openstack_networking_network_v2.go @@ -264,26 +264,20 @@ func waitForNetworkDelete(networkingClient *gophercloud.ServiceClient, networkId n, err := networks.Get(networkingClient, networkId).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return n, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Network %s", networkId) return n, "DELETED", nil } + return n, "ACTIVE", err } err = networks.Delete(networkingClient, networkId).ExtractErr() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return n, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Network %s", networkId) return n, "DELETED", nil } + return n, "ACTIVE", err } log.Printf("[DEBUG] OpenStack Network %s still active.\n", networkId) diff --git a/builtin/providers/openstack/resource_openstack_networking_port_v2.go b/builtin/providers/openstack/resource_openstack_networking_port_v2.go index 71897e6f75..0fc0f1c118 100644 --- a/builtin/providers/openstack/resource_openstack_networking_port_v2.go +++ b/builtin/providers/openstack/resource_openstack_networking_port_v2.go @@ -359,26 +359,20 @@ func waitForNetworkPortDelete(networkingClient *gophercloud.ServiceClient, portI p, err := ports.Get(networkingClient, portId).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return p, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Port %s", portId) return p, "DELETED", nil } + return p, "ACTIVE", err } err = ports.Delete(networkingClient, portId).ExtractErr() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return p, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Port %s", portId) return p, "DELETED", nil } + return p, "ACTIVE", err } log.Printf("[DEBUG] OpenStack Port %s still active.\n", portId) diff --git a/builtin/providers/openstack/resource_openstack_networking_router_interface_v2.go b/builtin/providers/openstack/resource_openstack_networking_router_interface_v2.go index 2249b94351..4db584edc3 100644 --- a/builtin/providers/openstack/resource_openstack_networking_router_interface_v2.go +++ b/builtin/providers/openstack/resource_openstack_networking_router_interface_v2.go @@ -91,15 +91,11 @@ func resourceNetworkingRouterInterfaceV2Read(d *schema.ResourceData, meta interf n, err := ports.Get(networkingClient, d.Id()).Extract() if err != nil { - httpError, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return fmt.Errorf("Error retrieving OpenStack Neutron Router Interface: %s", err) - } - - if httpError.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { d.SetId("") return nil } + return fmt.Errorf("Error retrieving OpenStack Neutron Router Interface: %s", err) } @@ -159,26 +155,20 @@ func waitForRouterInterfaceDelete(networkingClient *gophercloud.ServiceClient, d r, err := ports.Get(networkingClient, routerInterfaceId).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return r, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Router Interface %s", routerInterfaceId) return r, "DELETED", nil } + return r, "ACTIVE", err } _, err = routers.RemoveInterface(networkingClient, routerId, removeOpts).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return r, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Router Interface %s", routerInterfaceId) return r, "DELETED", nil } + return r, "ACTIVE", err } log.Printf("[DEBUG] OpenStack Router Interface %s still active.\n", routerInterfaceId) diff --git a/builtin/providers/openstack/resource_openstack_networking_router_route_v2.go b/builtin/providers/openstack/resource_openstack_networking_router_route_v2.go index 4c39971039..54e68f9a36 100644 --- a/builtin/providers/openstack/resource_openstack_networking_router_route_v2.go +++ b/builtin/providers/openstack/resource_openstack_networking_router_route_v2.go @@ -59,15 +59,11 @@ func resourceNetworkingRouterRouteV2Create(d *schema.ResourceData, meta interfac n, err := routers.Get(networkingClient, routerId).Extract() if err != nil { - httpError, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return fmt.Errorf("Error retrieving OpenStack Neutron Router: %s", err) - } - - if httpError.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { d.SetId("") return nil } + return fmt.Errorf("Error retrieving OpenStack Neutron Router: %s", err) } @@ -121,15 +117,11 @@ func resourceNetworkingRouterRouteV2Read(d *schema.ResourceData, meta interface{ n, err := routers.Get(networkingClient, routerId).Extract() if err != nil { - httpError, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return fmt.Errorf("Error retrieving OpenStack Neutron Router: %s", err) - } - - if httpError.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { d.SetId("") return nil } + return fmt.Errorf("Error retrieving OpenStack Neutron Router: %s", err) } @@ -168,14 +160,10 @@ func resourceNetworkingRouterRouteV2Delete(d *schema.ResourceData, meta interfac n, err := routers.Get(networkingClient, routerId).Extract() if err != nil { - httpError, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return fmt.Errorf("Error retrieving OpenStack Neutron Router: %s", err) - } - - if httpError.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { return nil } + return fmt.Errorf("Error retrieving OpenStack Neutron Router: %s", err) } diff --git a/builtin/providers/openstack/resource_openstack_networking_router_v2.go b/builtin/providers/openstack/resource_openstack_networking_router_v2.go index ee0430e81c..caa714fd5c 100644 --- a/builtin/providers/openstack/resource_openstack_networking_router_v2.go +++ b/builtin/providers/openstack/resource_openstack_networking_router_v2.go @@ -171,15 +171,11 @@ func resourceNetworkingRouterV2Read(d *schema.ResourceData, meta interface{}) er n, err := routers.Get(networkingClient, d.Id()).Extract() if err != nil { - httpError, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return fmt.Errorf("Error retrieving OpenStack Neutron Router: %s", err) - } - - if httpError.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { d.SetId("") return nil } + return fmt.Errorf("Error retrieving OpenStack Neutron Router: %s", err) } @@ -276,26 +272,20 @@ func waitForRouterDelete(networkingClient *gophercloud.ServiceClient, routerId s r, err := routers.Get(networkingClient, routerId).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return r, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Router %s", routerId) return r, "DELETED", nil } + return r, "ACTIVE", err } err = routers.Delete(networkingClient, routerId).ExtractErr() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return r, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Router %s", routerId) return r, "DELETED", nil } + return r, "ACTIVE", err } log.Printf("[DEBUG] OpenStack Router %s still active.\n", routerId) diff --git a/builtin/providers/openstack/resource_openstack_networking_secgroup_rule_v2.go b/builtin/providers/openstack/resource_openstack_networking_secgroup_rule_v2.go index df2802fead..8c7494b7b5 100644 --- a/builtin/providers/openstack/resource_openstack_networking_secgroup_rule_v2.go +++ b/builtin/providers/openstack/resource_openstack_networking_secgroup_rule_v2.go @@ -241,26 +241,20 @@ func waitForSecGroupRuleDelete(networkingClient *gophercloud.ServiceClient, secG r, err := rules.Get(networkingClient, secGroupRuleId).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return r, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Neutron Security Group Rule %s", secGroupRuleId) return r, "DELETED", nil } + return r, "ACTIVE", err } err = rules.Delete(networkingClient, secGroupRuleId).ExtractErr() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return r, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Neutron Security Group Rule %s", secGroupRuleId) return r, "DELETED", nil } + return r, "ACTIVE", err } log.Printf("[DEBUG] OpenStack Neutron Security Group Rule %s still active.\n", secGroupRuleId) diff --git a/builtin/providers/openstack/resource_openstack_networking_secgroup_v2.go b/builtin/providers/openstack/resource_openstack_networking_secgroup_v2.go index 902cc19689..aecb31ee38 100644 --- a/builtin/providers/openstack/resource_openstack_networking_secgroup_v2.go +++ b/builtin/providers/openstack/resource_openstack_networking_secgroup_v2.go @@ -131,26 +131,20 @@ func waitForSecGroupDelete(networkingClient *gophercloud.ServiceClient, secGroup r, err := groups.Get(networkingClient, secGroupId).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return r, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Neutron Security Group %s", secGroupId) return r, "DELETED", nil } + return r, "ACTIVE", err } err = groups.Delete(networkingClient, secGroupId).ExtractErr() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return r, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Neutron Security Group %s", secGroupId) return r, "DELETED", nil } + return r, "ACTIVE", err } log.Printf("[DEBUG] OpenStack Neutron Security Group %s still active.\n", secGroupId) diff --git a/builtin/providers/openstack/resource_openstack_networking_subnet_v2.go b/builtin/providers/openstack/resource_openstack_networking_subnet_v2.go index 991686eb26..c2dcec7250 100644 --- a/builtin/providers/openstack/resource_openstack_networking_subnet_v2.go +++ b/builtin/providers/openstack/resource_openstack_networking_subnet_v2.go @@ -418,26 +418,20 @@ func waitForSubnetDelete(networkingClient *gophercloud.ServiceClient, subnetId s s, err := subnets.Get(networkingClient, subnetId).Extract() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return s, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Subnet %s", subnetId) return s, "DELETED", nil } + return s, "ACTIVE", err } err = subnets.Delete(networkingClient, subnetId).ExtractErr() if err != nil { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return s, "ACTIVE", err - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { log.Printf("[DEBUG] Successfully deleted OpenStack Subnet %s", subnetId) return s, "DELETED", nil } + return s, "ACTIVE", err } log.Printf("[DEBUG] OpenStack Subnet %s still active.\n", subnetId) diff --git a/builtin/providers/openstack/util.go b/builtin/providers/openstack/util.go index 04ffa2a7cb..ab9abd8e95 100644 --- a/builtin/providers/openstack/util.go +++ b/builtin/providers/openstack/util.go @@ -10,13 +10,10 @@ import ( // 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 { - errCode, ok := err.(*gophercloud.ErrUnexpectedResponseCode) - if !ok { - return fmt.Errorf("%s: %s", msg, err) - } - if errCode.Actual == 404 { + if _, ok := err.(gophercloud.ErrDefault404); ok { d.SetId("") return nil } + return fmt.Errorf("%s: %s", msg, err) }