mirror of https://github.com/kubernetes/kops.git
Merge pull request #10849 from ottosulin/fix/deletebackoff
Fix OpenStack delete functions
This commit is contained in:
commit
dbd503f4c6
|
|
@ -90,6 +90,14 @@ var writeBackoff = wait.Backoff{
|
|||
Steps: 5,
|
||||
}
|
||||
|
||||
// deleteBackoff is the backoff strategy for openstack delete retries.
|
||||
var deleteBackoff = wait.Backoff{
|
||||
Duration: time.Second,
|
||||
Factor: 5,
|
||||
Jitter: 0.1,
|
||||
Steps: 4,
|
||||
}
|
||||
|
||||
type OpenstackCloud interface {
|
||||
fi.Cloud
|
||||
|
||||
|
|
|
|||
|
|
@ -99,13 +99,15 @@ func (c *openstackCloud) DeleteFloatingIP(id string) (err error) {
|
|||
}
|
||||
|
||||
func deleteFloatingIP(c OpenstackCloud, id string) (err error) {
|
||||
|
||||
done, err := vfs.RetryWithBackoff(writeBackoff, func() (bool, error) {
|
||||
done, err := vfs.RetryWithBackoff(deleteBackoff, func() (bool, error) {
|
||||
err = l3floatingip.Delete(c.ComputeClient(), id).ExtractErr()
|
||||
if err != nil && !isNotFound(err) {
|
||||
return false, fmt.Errorf("failed to delete floating ip %s: %v", id, err)
|
||||
}
|
||||
return true, nil
|
||||
if isNotFound(err) {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
})
|
||||
if !done && err == nil {
|
||||
err = wait.ErrWaitTimeout
|
||||
|
|
|
|||
|
|
@ -151,7 +151,23 @@ func (c *openstackCloud) DeleteInstanceWithID(instanceID string) error {
|
|||
}
|
||||
|
||||
func deleteInstanceWithID(c OpenstackCloud, instanceID string) error {
|
||||
return servers.Delete(c.ComputeClient(), instanceID).ExtractErr()
|
||||
done, err := vfs.RetryWithBackoff(deleteBackoff, func() (bool, error) {
|
||||
err := servers.Delete(c.ComputeClient(), instanceID).ExtractErr()
|
||||
if err != nil && !isNotFound(err) {
|
||||
return false, fmt.Errorf("error deleting instance: %s", err)
|
||||
}
|
||||
if isNotFound(err) {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
} else if done {
|
||||
return nil
|
||||
} else {
|
||||
return wait.ErrWaitTimeout
|
||||
}
|
||||
}
|
||||
|
||||
// DetachInstance is not implemented yet. It needs to cause a cloud instance to no longer be counted against the group's size limits.
|
||||
|
|
|
|||
|
|
@ -79,13 +79,15 @@ func (c *openstackCloud) DeleteKeyPair(name string) error {
|
|||
}
|
||||
|
||||
func deleteKeyPair(c OpenstackCloud, name string) error {
|
||||
done, err := vfs.RetryWithBackoff(readBackoff, func() (bool, error) {
|
||||
done, err := vfs.RetryWithBackoff(deleteBackoff, func() (bool, error) {
|
||||
err := keypairs.Delete(c.ComputeClient(), name).ExtractErr()
|
||||
if err != nil && !isNotFound(err) {
|
||||
return false, fmt.Errorf("error deleting keypair: %v", err)
|
||||
}
|
||||
|
||||
return true, nil
|
||||
if isNotFound(err) {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -64,12 +64,15 @@ func deleteMonitor(c OpenstackCloud, monitorID string) error {
|
|||
if c.LoadBalancerClient() == nil {
|
||||
return fmt.Errorf("loadbalancer support not available in this deployment")
|
||||
}
|
||||
done, err := vfs.RetryWithBackoff(writeBackoff, func() (bool, error) {
|
||||
done, err := vfs.RetryWithBackoff(deleteBackoff, func() (bool, error) {
|
||||
err := monitors.Delete(c.LoadBalancerClient(), monitorID).ExtractErr()
|
||||
if err != nil && !isNotFound(err) {
|
||||
return false, fmt.Errorf("error deleting pool: %v", err)
|
||||
}
|
||||
return true, nil
|
||||
if isNotFound(err) {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -89,12 +92,15 @@ func deletePool(c OpenstackCloud, poolID string) error {
|
|||
return fmt.Errorf("loadbalancer support not available in this deployment")
|
||||
}
|
||||
|
||||
done, err := vfs.RetryWithBackoff(writeBackoff, func() (bool, error) {
|
||||
done, err := vfs.RetryWithBackoff(deleteBackoff, func() (bool, error) {
|
||||
err := v2pools.Delete(c.LoadBalancerClient(), poolID).ExtractErr()
|
||||
if err != nil && !isNotFound(err) {
|
||||
return false, fmt.Errorf("error deleting pool: %v", err)
|
||||
}
|
||||
return true, nil
|
||||
if isNotFound(err) {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -114,12 +120,15 @@ func deleteListener(c OpenstackCloud, listenerID string) error {
|
|||
return fmt.Errorf("loadbalancer support not available in this deployment")
|
||||
}
|
||||
|
||||
done, err := vfs.RetryWithBackoff(writeBackoff, func() (bool, error) {
|
||||
done, err := vfs.RetryWithBackoff(deleteBackoff, func() (bool, error) {
|
||||
err := listeners.Delete(c.LoadBalancerClient(), listenerID).ExtractErr()
|
||||
if err != nil && !isNotFound(err) {
|
||||
return false, fmt.Errorf("error deleting listener: %v", err)
|
||||
}
|
||||
return true, nil
|
||||
if isNotFound(err) {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -139,12 +148,15 @@ func deleteLB(c OpenstackCloud, lbID string, opts loadbalancers.DeleteOpts) erro
|
|||
return fmt.Errorf("loadbalancer support not available in this deployment")
|
||||
}
|
||||
|
||||
done, err := vfs.RetryWithBackoff(writeBackoff, func() (bool, error) {
|
||||
done, err := vfs.RetryWithBackoff(deleteBackoff, func() (bool, error) {
|
||||
err := loadbalancers.Delete(c.LoadBalancerClient(), lbID, opts).ExtractErr()
|
||||
if err != nil && !isNotFound(err) {
|
||||
return false, fmt.Errorf("error deleting loadbalancer: %v", err)
|
||||
}
|
||||
return true, nil
|
||||
if isNotFound(err) {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -220,12 +220,15 @@ func (c *openstackCloud) DeleteNetwork(networkID string) error {
|
|||
}
|
||||
|
||||
func deleteNetwork(c OpenstackCloud, networkID string) error {
|
||||
done, err := vfs.RetryWithBackoff(writeBackoff, func() (bool, error) {
|
||||
done, err := vfs.RetryWithBackoff(deleteBackoff, func() (bool, error) {
|
||||
err := networks.Delete(c.NetworkingClient(), networkID).ExtractErr()
|
||||
if err != nil && !isNotFound(err) {
|
||||
return false, fmt.Errorf("error deleting network: %v", err)
|
||||
}
|
||||
return true, nil
|
||||
if isNotFound(err) {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -130,12 +130,15 @@ func (c *openstackCloud) DeletePort(portID string) error {
|
|||
}
|
||||
|
||||
func deletePort(c OpenstackCloud, portID string) error {
|
||||
done, err := vfs.RetryWithBackoff(writeBackoff, func() (bool, error) {
|
||||
done, err := vfs.RetryWithBackoff(deleteBackoff, func() (bool, error) {
|
||||
err := ports.Delete(c.NetworkingClient(), portID).ExtractErr()
|
||||
if err != nil && !isNotFound(err) {
|
||||
return false, fmt.Errorf("error deleting port: %v", err)
|
||||
}
|
||||
return true, nil
|
||||
if isNotFound(err) {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -106,12 +106,15 @@ func (c *openstackCloud) DeleteRouterInterface(routerID string, opt routers.Remo
|
|||
}
|
||||
|
||||
func deleteRouterInterface(c OpenstackCloud, routerID string, opt routers.RemoveInterfaceOptsBuilder) error {
|
||||
done, err := vfs.RetryWithBackoff(writeBackoff, func() (bool, error) {
|
||||
done, err := vfs.RetryWithBackoff(deleteBackoff, func() (bool, error) {
|
||||
_, err := routers.RemoveInterface(c.NetworkingClient(), routerID, opt).Extract()
|
||||
if err != nil && !isNotFound(err) {
|
||||
return false, fmt.Errorf("error deleting router interface: %v", err)
|
||||
}
|
||||
return true, nil
|
||||
if isNotFound(err) {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -127,12 +130,15 @@ func (c *openstackCloud) DeleteRouter(routerID string) error {
|
|||
}
|
||||
|
||||
func deleteRouter(c OpenstackCloud, routerID string) error {
|
||||
done, err := vfs.RetryWithBackoff(writeBackoff, func() (bool, error) {
|
||||
done, err := vfs.RetryWithBackoff(deleteBackoff, func() (bool, error) {
|
||||
err := routers.Delete(c.NetworkingClient(), routerID).ExtractErr()
|
||||
if err != nil && !isNotFound(err) {
|
||||
return false, fmt.Errorf("error deleting router: %v", err)
|
||||
}
|
||||
return true, nil
|
||||
if isNotFound(err) {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -136,12 +136,15 @@ func (c *openstackCloud) DeleteSecurityGroup(sgID string) error {
|
|||
}
|
||||
|
||||
func deleteSecurityGroup(c OpenstackCloud, sgID string) error {
|
||||
done, err := vfs.RetryWithBackoff(writeBackoff, func() (bool, error) {
|
||||
done, err := vfs.RetryWithBackoff(deleteBackoff, func() (bool, error) {
|
||||
err := sg.Delete(c.NetworkingClient(), sgID).ExtractErr()
|
||||
if err != nil && !isNotFound(err) {
|
||||
return false, fmt.Errorf("error deleting security group: %v", err)
|
||||
}
|
||||
return true, nil
|
||||
if isNotFound(err) {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -164,12 +164,15 @@ func (c *openstackCloud) DeleteServerGroup(groupID string) error {
|
|||
}
|
||||
|
||||
func deleteServerGroup(c OpenstackCloud, groupID string) error {
|
||||
done, err := vfs.RetryWithBackoff(writeBackoff, func() (bool, error) {
|
||||
done, err := vfs.RetryWithBackoff(deleteBackoff, func() (bool, error) {
|
||||
err := servergroups.Delete(c.ComputeClient(), groupID).ExtractErr()
|
||||
if err != nil && !isNotFound(err) {
|
||||
return false, fmt.Errorf("error deleting server group: %v", err)
|
||||
}
|
||||
return true, nil
|
||||
if isNotFound(err) {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -106,12 +106,15 @@ func (c *openstackCloud) DeleteSubnet(subnetID string) error {
|
|||
}
|
||||
|
||||
func deleteSubnet(c OpenstackCloud, subnetID string) error {
|
||||
done, err := vfs.RetryWithBackoff(writeBackoff, func() (bool, error) {
|
||||
done, err := vfs.RetryWithBackoff(deleteBackoff, func() (bool, error) {
|
||||
err := subnets.Delete(c.NetworkingClient(), subnetID).ExtractErr()
|
||||
if err != nil && !isNotFound(err) {
|
||||
return false, fmt.Errorf("error deleting subnet: %v", err)
|
||||
}
|
||||
return true, nil
|
||||
if isNotFound(err) {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -136,12 +136,15 @@ func (c *openstackCloud) DeleteVolume(volumeID string) error {
|
|||
}
|
||||
|
||||
func deleteVolume(c OpenstackCloud, volumeID string) error {
|
||||
done, err := vfs.RetryWithBackoff(writeBackoff, func() (bool, error) {
|
||||
done, err := vfs.RetryWithBackoff(deleteBackoff, func() (bool, error) {
|
||||
err := cinder.Delete(c.BlockStorageClient(), volumeID, cinder.DeleteOpts{}).ExtractErr()
|
||||
if err != nil && !isNotFound(err) {
|
||||
return false, fmt.Errorf("error deleting volume: %v", err)
|
||||
}
|
||||
return true, nil
|
||||
if isNotFound(err) {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
|||
Loading…
Reference in New Issue