fix extraction of EBS volume id when there's no region prefix (#2351)
* add prefix /vol- on when EBS doesn't have * add new unit test for to get the volumeID * add a prefix to search in the string of volumeID --------- Co-authored-by: Jociele Padilha <jociele.padilha@zalando.de>
This commit is contained in:
		
							parent
							
								
									af084a5a65
								
							
						
					
					
						commit
						04f18b9716
					
				|  | @ -35,7 +35,7 @@ func (c *Cluster) syncVolumes() error { | ||||||
| 
 | 
 | ||||||
| 		err = c.populateVolumeMetaData() | 		err = c.populateVolumeMetaData() | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			c.logger.Errorf("populating EBS meta data failed, skipping potential adjustements: %v", err) | 			c.logger.Errorf("populating EBS meta data failed, skipping potential adjustments: %v", err) | ||||||
| 		} else { | 		} else { | ||||||
| 			err = c.syncUnderlyingEBSVolume() | 			err = c.syncUnderlyingEBSVolume() | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
|  |  | ||||||
|  | @ -39,8 +39,12 @@ func (r *EBSVolumeResizer) VolumeBelongsToProvider(pv *v1.PersistentVolume) bool | ||||||
| 	return pv.Spec.AWSElasticBlockStore != nil && pv.Annotations[constants.VolumeStorateProvisionerAnnotation] == constants.EBSProvisioner | 	return pv.Spec.AWSElasticBlockStore != nil && pv.Annotations[constants.VolumeStorateProvisionerAnnotation] == constants.EBSProvisioner | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // ExtractVolumeID extracts volumeID
 | // ExtractVolumeID extracts volumeID from "aws://eu-central-1a/vol-075ddfc4a127d0bd4"
 | ||||||
|  | // or return only the vol-075ddfc4a127d0bd4 when it doesn't have "aws://"
 | ||||||
| func (r *EBSVolumeResizer) ExtractVolumeID(volumeID string) (string, error) { | func (r *EBSVolumeResizer) ExtractVolumeID(volumeID string) (string, error) { | ||||||
|  | 	if (strings.HasPrefix(volumeID, "vol-")) && !(strings.HasPrefix(volumeID, "aws://")) { | ||||||
|  | 		return volumeID, nil | ||||||
|  | 	} | ||||||
| 	idx := strings.LastIndex(volumeID, constants.EBSVolumeIDStart) + 1 | 	idx := strings.LastIndex(volumeID, constants.EBSVolumeIDStart) + 1 | ||||||
| 	if idx == 0 { | 	if idx == 0 { | ||||||
| 		return "", fmt.Errorf("malformed EBS volume id %q", volumeID) | 		return "", fmt.Errorf("malformed EBS volume id %q", volumeID) | ||||||
|  |  | ||||||
|  | @ -0,0 +1,49 @@ | ||||||
|  | package volumes | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"testing" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func TestExtractVolumeID(t *testing.T) { | ||||||
|  | 	var tests = []struct { | ||||||
|  | 		input          string | ||||||
|  | 		expectedResult string | ||||||
|  | 		expectedErr    error | ||||||
|  | 	}{ | ||||||
|  | 		{ | ||||||
|  | 			input:          "aws://eu-central-1c/vol-01234a5b6c78df9gh", | ||||||
|  | 			expectedResult: "vol-01234a5b6c78df9gh", | ||||||
|  | 			expectedErr:    nil, | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			input:          "vol-0g9fd87c6b5a43210", | ||||||
|  | 			expectedResult: "vol-0g9fd87c6b5a43210", | ||||||
|  | 			expectedErr:    nil, | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			input:          "aws://eu-central-1c/01234a5b6c78df9g0", | ||||||
|  | 			expectedResult: "", | ||||||
|  | 			expectedErr:    fmt.Errorf("malformed EBS volume id %q", "aws://eu-central-1c/01234a5b6c78df9g0"), | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			input:          "hg9fd87c6b5a43210", | ||||||
|  | 			expectedResult: "", | ||||||
|  | 			expectedErr:    fmt.Errorf("malformed EBS volume id %q", "hg9fd87c6b5a43210"), | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	resizer := EBSVolumeResizer{} | ||||||
|  | 
 | ||||||
|  | 	for _, tt := range tests { | ||||||
|  | 		volumeId, err := resizer.ExtractVolumeID(tt.input) | ||||||
|  | 		if volumeId != tt.expectedResult { | ||||||
|  | 			t.Errorf("%s expected: %s, got %s", t.Name(), tt.expectedResult, volumeId) | ||||||
|  | 		} | ||||||
|  | 		if err != tt.expectedErr { | ||||||
|  | 			if tt.expectedErr != nil && err.Error() != tt.expectedErr.Error() { | ||||||
|  | 				t.Errorf("%s unexpected error: got %v", t.Name(), err) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue