From 0b8abdaa1d58512a31027bd2b69b6434d8d3c95a Mon Sep 17 00:00:00 2001 From: Jan Safranek Date: Wed, 24 Jul 2019 10:44:41 +0200 Subject: [PATCH] Fix detachment of deleted volumes Volumes that were attached to nodes and were forcefuly deleted by admin should be considered as detached. --- .../providers/openstack/openstack.go | 2 +- .../providers/openstack/openstack_volumes.go | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/pkg/cloudprovider/providers/openstack/openstack.go b/pkg/cloudprovider/providers/openstack/openstack.go index f8a80e3d8bf..0a5ffe36bc2 100644 --- a/pkg/cloudprovider/providers/openstack/openstack.go +++ b/pkg/cloudprovider/providers/openstack/openstack.go @@ -41,7 +41,7 @@ import ( "github.com/mitchellh/mapstructure" "gopkg.in/gcfg.v1" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" netutil "k8s.io/apimachinery/pkg/util/net" diff --git a/pkg/cloudprovider/providers/openstack/openstack_volumes.go b/pkg/cloudprovider/providers/openstack/openstack_volumes.go index f4d2a3d29f3..4d1f39b5479 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_volumes.go +++ b/pkg/cloudprovider/providers/openstack/openstack_volumes.go @@ -26,7 +26,7 @@ import ( "strings" "time" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/types" cloudprovider "k8s.io/cloud-provider" @@ -177,6 +177,9 @@ func (volumes *VolumesV1) getVolume(volumeID string) (Volume, error) { timeTaken := time.Since(startTime).Seconds() recordOpenstackOperationMetric("get_v1_volume", timeTaken, err) if err != nil { + if isNotFound(err) { + return Volume{}, ErrNotFound + } return Volume{}, fmt.Errorf("error occurred getting volume by ID: %s, err: %v", volumeID, err) } @@ -202,6 +205,9 @@ func (volumes *VolumesV2) getVolume(volumeID string) (Volume, error) { timeTaken := time.Since(startTime).Seconds() recordOpenstackOperationMetric("get_v2_volume", timeTaken, err) if err != nil { + if isNotFound(err) { + return Volume{}, ErrNotFound + } return Volume{}, fmt.Errorf("error occurred getting volume by ID: %s, err: %v", volumeID, err) } @@ -227,6 +233,9 @@ func (volumes *VolumesV3) getVolume(volumeID string) (Volume, error) { timeTaken := time.Since(startTime).Seconds() recordOpenstackOperationMetric("get_v3_volume", timeTaken, err) if err != nil { + if isNotFound(err) { + return Volume{}, ErrNotFound + } return Volume{}, fmt.Errorf("error occurred getting volume by ID: %s, err: %v", volumeID, err) } @@ -614,6 +623,10 @@ func (os *OpenStack) DiskIsAttached(instanceID, volumeID string) (bool, error) { } volume, err := os.getVolume(volumeID) if err != nil { + if err == ErrNotFound { + // Volume does not exists, it can't be attached. + return false, nil + } return false, err }