mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-15 06:43:54 +00:00
AWS: Handle deleting volume that no longer exists
The tests in particular double-delete volumes, so we need to handle this graciously.
This commit is contained in:
parent
1ae1db6027
commit
6c87a4be7c
@ -164,7 +164,9 @@ type Volumes interface {
|
||||
// Create a volume with the specified options
|
||||
CreateDisk(volumeOptions *VolumeOptions) (volumeName string, err error)
|
||||
// Delete the specified volume
|
||||
DeleteDisk(volumeName string) error
|
||||
// Returns true iff the volume was deleted
|
||||
// If the was not found, returns (false, nil)
|
||||
DeleteDisk(volumeName string) (bool, error)
|
||||
|
||||
// Get labels to apply to volume on creation
|
||||
GetVolumeLabels(volumeName string) (map[string]string, error)
|
||||
@ -1104,13 +1106,18 @@ func (self *awsDisk) waitForAttachmentStatus(status string) error {
|
||||
}
|
||||
|
||||
// Deletes the EBS disk
|
||||
func (self *awsDisk) deleteVolume() error {
|
||||
func (self *awsDisk) deleteVolume() (bool, error) {
|
||||
request := &ec2.DeleteVolumeInput{VolumeId: aws.String(self.awsID)}
|
||||
_, err := self.ec2.DeleteVolume(request)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error delete EBS volumes: %v", err)
|
||||
if awsError, ok := err.(awserr.Error); ok {
|
||||
if awsError.Code() == "InvalidVolume.NotFound" {
|
||||
return false, nil
|
||||
}
|
||||
}
|
||||
return false, fmt.Errorf("error deleting EBS volumes: %v", err)
|
||||
}
|
||||
return nil
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// Gets the awsInstance for the EC2 instance on which we are running
|
||||
@ -1328,7 +1335,7 @@ func (s *AWSCloud) CreateDisk(volumeOptions *VolumeOptions) (string, error) {
|
||||
tagRequest.Tags = tags
|
||||
if _, err := s.createTags(tagRequest); err != nil {
|
||||
// delete the volume and hope it succeeds
|
||||
delerr := s.DeleteDisk(volumeName)
|
||||
_, delerr := s.DeleteDisk(volumeName)
|
||||
if delerr != nil {
|
||||
// delete did not succeed, we have a stray volume!
|
||||
return "", fmt.Errorf("error tagging volume %s, could not delete the volume: %v", volumeName, delerr)
|
||||
@ -1340,10 +1347,10 @@ func (s *AWSCloud) CreateDisk(volumeOptions *VolumeOptions) (string, error) {
|
||||
}
|
||||
|
||||
// Implements Volumes.DeleteDisk
|
||||
func (aws *AWSCloud) DeleteDisk(volumeName string) error {
|
||||
func (aws *AWSCloud) DeleteDisk(volumeName string) (bool, error) {
|
||||
awsDisk, err := newAWSDisk(aws, volumeName)
|
||||
if err != nil {
|
||||
return err
|
||||
return false, err
|
||||
}
|
||||
return awsDisk.deleteVolume()
|
||||
}
|
||||
|
@ -115,11 +115,16 @@ func (util *AWSDiskUtil) DeleteVolume(d *awsElasticBlockStoreDeleter) error {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = cloud.DeleteDisk(d.volumeID); err != nil {
|
||||
deleted, err := cloud.DeleteDisk(d.volumeID)
|
||||
if err != nil {
|
||||
glog.V(2).Infof("Error deleting EBS Disk volume %s: %v", d.volumeID, err)
|
||||
return err
|
||||
}
|
||||
glog.V(2).Infof("Successfully deleted EBS Disk volume %s", d.volumeID)
|
||||
if deleted {
|
||||
glog.V(2).Infof("Successfully deleted EBS Disk volume %s", d.volumeID)
|
||||
} else {
|
||||
glog.V(2).Infof("Successfully deleted EBS Disk volume %s (actually already deleted)", d.volumeID)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -45,8 +45,8 @@ func (v *mockVolumes) CreateDisk(volumeOptions *aws.VolumeOptions) (volumeName s
|
||||
return "", fmt.Errorf("not implemented")
|
||||
}
|
||||
|
||||
func (v *mockVolumes) DeleteVolume(volumeName string) error {
|
||||
return fmt.Errorf("not implemented")
|
||||
func (v *mockVolumes) DeleteDisk(volumeName string) (bool, error) {
|
||||
return false, fmt.Errorf("not implemented")
|
||||
}
|
||||
|
||||
func (v *mockVolumes) GetVolumeLabels(volumeName string) (map[string]string, error) {
|
||||
|
@ -353,7 +353,15 @@ func deletePD(pdName string) error {
|
||||
if !ok {
|
||||
return fmt.Errorf("Provider does not support volumes")
|
||||
}
|
||||
return volumes.DeleteDisk(pdName)
|
||||
deleted, err := volumes.DeleteDisk(pdName)
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
if !deleted {
|
||||
Logf("Volume deletion implicitly succeeded because volume %q does not exist.", pdName)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user