Skip to content

Commit

Permalink
Merge pull request #2041 from divyenpatel/fix-QueryVolumeInfo
Browse files Browse the repository at this point in the history
added support for returning array of BaseCnsVolumeOperationResult for QueryVolumeInfo API
  • Loading branch information
dougm authored Jul 1, 2020
2 parents 1ddd1fe + 12955a6 commit a411671
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 13 deletions.
28 changes: 15 additions & 13 deletions cns/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ func TestClient(t *testing.T) {
t.Errorf("Failed to query volume. Error: %+v \n", err)
t.Fatal(err)
}
t.Logf("Sucessfully Queried Volumes. queryResult: %+v", pretty.Sprint(queryResult))
t.Logf("Successfully Queried Volumes. queryResult: %+v", pretty.Sprint(queryResult))

// Test QueryVolumeInfo API
// QueryVolumeInfo is not supported on ReleaseVSAN67u3 and ReleaseVSAN70
Expand All @@ -230,20 +230,22 @@ func TestClient(t *testing.T) {
t.Errorf("Failed to query volumes with QueryVolumeInfo. Error: %+v \n", err)
t.Fatal(err)
}
queryVolumeInfoTaskResult, err := GetTaskResult(ctx, queryVolumeInfoTaskInfo)
queryVolumeInfoTaskResults, err := GetTaskResultArray(ctx, queryVolumeInfoTaskInfo)
if err != nil {
t.Errorf("Failed to query volumes with QueryVolumeInfo. Error: %+v \n", err)
t.Fatal(err)
}
if queryVolumeInfoTaskResult == nil {
if queryVolumeInfoTaskResults == nil {
t.Fatalf("Empty queryVolumeInfoTaskResult")
t.FailNow()
}
queryVolumeInfoOperationRes := queryVolumeInfoTaskResult.GetCnsVolumeOperationResult()
if queryVolumeInfoOperationRes.Fault != nil {
t.Fatalf("Failed to query volumes with QueryVolumeInfo. fault=%+v", queryVolumeInfoOperationRes.Fault)
for _, queryVolumeInfoTaskResult := range queryVolumeInfoTaskResults {
queryVolumeInfoOperationRes := queryVolumeInfoTaskResult.GetCnsVolumeOperationResult()
if queryVolumeInfoOperationRes.Fault != nil {
t.Fatalf("Failed to query volumes with QueryVolumeInfo. fault=%+v", queryVolumeInfoOperationRes.Fault)
}
t.Logf("Successfully Queried Volumes. queryVolumeInfoTaskResult: %+v", pretty.Sprint(queryVolumeInfoTaskResult))
}
t.Logf("Sucessfully Queried Volumes. queryVolumeInfoTaskResult: %+v", pretty.Sprint(queryVolumeInfoTaskResult))
}
// Test ExtendVolume API
var newCapacityInMb int64 = 10240
Expand Down Expand Up @@ -289,7 +291,7 @@ func TestClient(t *testing.T) {
t.Errorf("Failed to query volume. Error: %+v \n", err)
t.Fatal(err)
}
t.Logf("Sucessfully Queried Volumes after ExtendVolume. queryResult: %+v", pretty.Sprint(queryResult))
t.Logf("Successfully Queried Volumes after ExtendVolume. queryResult: %+v", pretty.Sprint(queryResult))
queryCapacity := queryResult.Volumes[0].BackingObjectDetails.(*cnstypes.CnsBlockBackingDetails).CapacityInMb
if newCapacityInMb != queryCapacity {
t.Errorf("After extend volume %s, expected new volume size is %d, but actual volume size is %d.", extendVolumeId, newCapacityInMb, queryCapacity)
Expand Down Expand Up @@ -395,7 +397,7 @@ func TestClient(t *testing.T) {
if updateVolumeOperationRes.Fault != nil {
t.Fatalf("Failed to update volume metadata: fault=%+v", updateVolumeOperationRes.Fault)
} else {
t.Logf("Sucessfully updated volume metadata")
t.Logf("Successfully updated volume metadata")
}

t.Logf("Calling QueryVolume using queryFilter: %+v", pretty.Sprint(queryFilter))
Expand All @@ -404,7 +406,7 @@ func TestClient(t *testing.T) {
t.Errorf("Failed to query volume. Error: %+v \n", err)
t.Fatal(err)
}
t.Logf("Sucessfully Queried Volumes. queryResult: %+v", pretty.Sprint(queryResult))
t.Logf("Successfully Queried Volumes. queryResult: %+v", pretty.Sprint(queryResult))

// Test QueryAll
querySelection := cnstypes.CnsQuerySelection{
Expand All @@ -421,7 +423,7 @@ func TestClient(t *testing.T) {
t.Errorf("Failed to query all volumes. Error: %+v \n", err)
t.Fatal(err)
}
t.Logf("Sucessfully Queried all Volumes. queryResult: %+v", pretty.Sprint(queryResult))
t.Logf("Successfully Queried all Volumes. queryResult: %+v", pretty.Sprint(queryResult))

// Create a VM to test Attach Volume API.
virtualMachineConfigSpec := vim25types.VirtualMachineConfigSpec{
Expand Down Expand Up @@ -675,7 +677,7 @@ func TestClient(t *testing.T) {
t.Errorf("Failed to query volume. Error: %+v \n", err)
t.Fatal(err)
}
t.Logf("Sucessfully Queried Volumes. queryResult: %+v", queryResult)
t.Logf("Successfully Queried Volumes. queryResult: %+v", queryResult)
fileBackingInfo := queryResult.Volumes[0].BackingObjectDetails.(*cnstypes.CnsVsanFileShareBackingDetails)
t.Logf("File Share Name: %s with accessPoints: %+v", fileBackingInfo.Name, fileBackingInfo.AccessPoints)

Expand Down Expand Up @@ -815,7 +817,7 @@ func TestClient(t *testing.T) {
t.Errorf("Failed to query volume. Error: %+v \n", err)
t.Fatal(err)
}
t.Logf("Sucessfully Queried Volumes. queryResult: %+v", pretty.Sprint(queryResult))
t.Logf("Successfully Queried Volumes. queryResult: %+v", pretty.Sprint(queryResult))

t.Logf("Deleting CNS volume created above using BACKING_DISK_URL_PATH: %s with volume: %+v", backingDiskURLPath, volumeIDList)
deleteTask, err = cnsClient.DeleteVolume(ctx, volumeIDList, true)
Expand Down
17 changes: 17 additions & 0 deletions cns/cns_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,23 @@ func GetTaskResult(ctx context.Context, taskInfo *vim25types.TaskInfo) (cnstypes
return nil, errors.New("TaskInfo result is empty")
}

// GetTaskResultArray gets the task result array for a specified task info
func GetTaskResultArray(ctx context.Context, taskInfo *vim25types.TaskInfo) ([]cnstypes.BaseCnsVolumeOperationResult, error) {
if taskInfo == nil {
return nil, errors.New("TaskInfo is empty")
}
if taskInfo.Result != nil {
volumeOperationBatchResult := taskInfo.Result.(cnstypes.CnsVolumeOperationBatchResult)
if &volumeOperationBatchResult == nil ||
volumeOperationBatchResult.VolumeResults == nil ||
len(volumeOperationBatchResult.VolumeResults) == 0 {
return nil, errors.New("Cannot get VolumeOperationResult")
}
return volumeOperationBatchResult.VolumeResults, nil
}
return nil, errors.New("TaskInfo result is empty")
}

// dropUnknownCreateSpecElements helps drop newly added elements in the CnsVolumeCreateSpec, which are not known to the prior vSphere releases
func dropUnknownCreateSpecElements(c *Client, createSpecList []cnstypes.CnsVolumeCreateSpec) []cnstypes.CnsVolumeCreateSpec {
var updatedcreateSpecList []cnstypes.CnsVolumeCreateSpec
Expand Down

0 comments on commit a411671

Please sign in to comment.