From a734c78c1086cf2e24524c4d96ba7e6a7ffe60ca Mon Sep 17 00:00:00 2001 From: Sameer Shaikh <79081767+sameshai@users.noreply.github.com> Date: Wed, 13 Aug 2025 16:54:30 +0530 Subject: [PATCH 1/6] Regional rfs support (#62) * Enhance RFS volume support: add bandwidth/iops update handling, omit zone in create payload, update CLI tool Signed-off-by: Renuka * updated new changes for regional file Signed-off-by: Renuka * removed unnesasory comment Signed-off-by: Renuka * fixed travis issues Signed-off-by: Renuka * test.go files error Signed-off-by: Renuka * removed glide and ppa Signed-off-by: Renuka * fixed test.go file again Signed-off-by: Renuka * updated config Signed-off-by: Renuka * removed config file Signed-off-by: Renuka * addressed comments Signed-off-by: Renuka * removed unnassasory comments Signed-off-by: Renuka * removed unnassasory comments Signed-off-by: Renuka * Adressed comments Signed-off-by: Renuka * removed unnassory changes Signed-off-by: Renuka * added retry code again Signed-off-by: Renuka * added zone validation Signed-off-by: Renuka * updated version Signed-off-by: Renuka * Addressed comment Signed-off-by: Renuka * Addressed comment Signed-off-by: Renuka * Fixed travis issue Signed-off-by: Renuka * Addressed the comments Signed-off-by: Renuka * Adressed comment Signed-off-by: Renuka * Addressed comment Signed-off-by: Renuka * Added UT of regional file Signed-off-by: Renuka * Addressed PR comments Signed-off-by: Renuka * changed date Signed-off-by: Renuka * Added accessprotocol Signed-off-by: Renuka * added accessprotocol validation Signed-off-by: Renuka * Added accessprotocol validation Signed-off-by: Renuka * Addressed PR comments Signed-off-by: Renuka * fixed traivs issue Signed-off-by: Renuka * Addressed PR comment Signed-off-by: Renuka * Added lable for profile , href Signed-off-by: Renuka * Resolved travis issue Signed-off-by: Renuka --------- Signed-off-by: Renuka Co-authored-by: Renuka Signed-off-by: Sameer Shaikh --- common/vpcclient/riaas/riaas.go | 1 + 1 file changed, 1 insertion(+) diff --git a/common/vpcclient/riaas/riaas.go b/common/vpcclient/riaas/riaas.go index d6bfe73f..e02b586f 100644 --- a/common/vpcclient/riaas/riaas.go +++ b/common/vpcclient/riaas/riaas.go @@ -69,6 +69,7 @@ func New(config Config) (*Session, error) { queryValues := url.Values{ "version": []string{backendAPIVersion}, "generation": []string{strconv.Itoa(apiGen)}, + "maturity": []string{"beta"}, } riaasClient := client.New(ctx, config.baseURL(), queryValues, config.httpClient(), config.ContextID, config.ResourceGroup) From b2a1af0ca1712b301080edfb9ba9c6a72abc802f Mon Sep 17 00:00:00 2001 From: Sameer Shaikh <79081767+sameshai@users.noreply.github.com> Date: Thu, 21 Aug 2025 17:16:57 +0530 Subject: [PATCH 2/6] Feature flag (#70) * Support for GetShareProfileName Signed-off-by: Sameer Shaikh --- common/vpcclient/riaas/riaas.go | 1 - 1 file changed, 1 deletion(-) diff --git a/common/vpcclient/riaas/riaas.go b/common/vpcclient/riaas/riaas.go index e02b586f..d6bfe73f 100644 --- a/common/vpcclient/riaas/riaas.go +++ b/common/vpcclient/riaas/riaas.go @@ -69,7 +69,6 @@ func New(config Config) (*Session, error) { queryValues := url.Values{ "version": []string{backendAPIVersion}, "generation": []string{strconv.Itoa(apiGen)}, - "maturity": []string{"beta"}, } riaasClient := client.New(ctx, config.baseURL(), queryValues, config.httpClient(), config.ContextID, config.ResourceGroup) From 7ba8343367ab3e779f5eea9776b1f2b9599f83c7 Mon Sep 17 00:00:00 2001 From: Sameer Shaikh Date: Thu, 28 Aug 2025 20:45:27 +0530 Subject: [PATCH 3/6] fix UTs Signed-off-by: Sameer Shaikh --- common/vpcclient/models/profile.go | 21 ++++++++-- common/vpcclient/vpcfilevolume/fakes/share.go | 40 +++++++++++++++++++ .../vpcfilevolume/file_share_service.go | 4 ++ .../vpcfilevolume/get_share_profile.go | 8 ++++ .../vpcfilevolume/get_share_profile_test.go | 8 ++++ file/provider/create_volume.go | 22 ++++++++++ file/provider/get_volume_profile_test.go | 10 +++++ file/provider/util.go | 13 ++++++ 8 files changed, 123 insertions(+), 3 deletions(-) diff --git a/common/vpcclient/models/profile.go b/common/vpcclient/models/profile.go index 7948ceeb..39404b74 100644 --- a/common/vpcclient/models/profile.go +++ b/common/vpcclient/models/profile.go @@ -19,9 +19,24 @@ package models // Profile ... type Profile struct { - CRN string `json:"crn,omitempty"` - Href string `json:"href,omitempty"` - Name string `json:"name,omitempty"` + CRN string `json:"crn,omitempty"` + Href string `json:"href,omitempty"` + Name string `json:"name,omitempty"` + Capacity CapIops `json:"capacity,omitempty"` + Family string `json:"family,omitempty"` + Iops CapIops `json:"iops,omitempty"` + ResourceType string `json:"resource_type,omitempty"` +} + +// CapIops +type CapIops struct { + Default int32 `json:"default,omitempty"` + Max int32 `json:"max,omitempty"` + Min int32 `json:"min,omitempty"` + Step int32 `json:"step,omitempty"` + Type string `json:"type,omitempty"` + Value int32 `json:"value,omitempty"` + Values []int32 `json:"values,omitempty"` } type ProfileDetails struct { diff --git a/common/vpcclient/vpcfilevolume/fakes/share.go b/common/vpcclient/vpcfilevolume/fakes/share.go index e33a5a00..97383a52 100644 --- a/common/vpcclient/vpcfilevolume/fakes/share.go +++ b/common/vpcclient/vpcfilevolume/fakes/share.go @@ -155,18 +155,30 @@ type FileShareService struct { result1 *models.ShareTarget result2 error } +<<<<<<< HEAD GetShareProfileStub func(string, *zap.Logger) (*models.ProfileDetails, error) +======= + GetShareProfileStub func(string, *zap.Logger) (*models.Profile, error) +>>>>>>> 65230db (fix UTs) getShareProfileMutex sync.RWMutex getShareProfileArgsForCall []struct { arg1 string arg2 *zap.Logger } getShareProfileReturns struct { +<<<<<<< HEAD result1 *models.ProfileDetails result2 error } getShareProfileReturnsOnCall map[int]struct { result1 *models.ProfileDetails +======= + result1 *models.Profile + result2 error + } + getShareProfileReturnsOnCall map[int]struct { + result1 *models.Profile +>>>>>>> 65230db (fix UTs) result2 error } ListFileShareTargetsStub func(string, *models.ListShareTargetFilters, *zap.Logger) (*models.ShareTargetList, error) @@ -915,7 +927,11 @@ func (fake *FileShareService) GetFileShareTargetByNameReturnsOnCall(i int, resul }{result1, result2} } +<<<<<<< HEAD func (fake *FileShareService) GetShareProfile(arg1 string, arg2 *zap.Logger) (*models.ProfileDetails, error) { +======= +func (fake *FileShareService) GetShareProfile(arg1 string, arg2 *zap.Logger) (*models.Profile, error) { +>>>>>>> 65230db (fix UTs) fake.getShareProfileMutex.Lock() ret, specificReturn := fake.getShareProfileReturnsOnCall[len(fake.getShareProfileArgsForCall)] fake.getShareProfileArgsForCall = append(fake.getShareProfileArgsForCall, struct { @@ -941,7 +957,11 @@ func (fake *FileShareService) GetShareProfileCallCount() int { return len(fake.getShareProfileArgsForCall) } +<<<<<<< HEAD func (fake *FileShareService) GetShareProfileCalls(stub func(string, *zap.Logger) (*models.ProfileDetails, error)) { +======= +func (fake *FileShareService) GetShareProfileCalls(stub func(string, *zap.Logger) (*models.Profile, error)) { +>>>>>>> 65230db (fix UTs) fake.getShareProfileMutex.Lock() defer fake.getShareProfileMutex.Unlock() fake.GetShareProfileStub = stub @@ -954,28 +974,48 @@ func (fake *FileShareService) GetShareProfileArgsForCall(i int) (string, *zap.Lo return argsForCall.arg1, argsForCall.arg2 } +<<<<<<< HEAD func (fake *FileShareService) GetShareProfileReturns(result1 *models.ProfileDetails, result2 error) { +======= +func (fake *FileShareService) GetShareProfileReturns(result1 *models.Profile, result2 error) { +>>>>>>> 65230db (fix UTs) fake.getShareProfileMutex.Lock() defer fake.getShareProfileMutex.Unlock() fake.GetShareProfileStub = nil fake.getShareProfileReturns = struct { +<<<<<<< HEAD result1 *models.ProfileDetails +======= + result1 *models.Profile +>>>>>>> 65230db (fix UTs) result2 error }{result1, result2} } +<<<<<<< HEAD func (fake *FileShareService) GetShareProfileReturnsOnCall(i int, result1 *models.ProfileDetails, result2 error) { +======= +func (fake *FileShareService) GetShareProfileReturnsOnCall(i int, result1 *models.Profile, result2 error) { +>>>>>>> 65230db (fix UTs) fake.getShareProfileMutex.Lock() defer fake.getShareProfileMutex.Unlock() fake.GetShareProfileStub = nil if fake.getShareProfileReturnsOnCall == nil { fake.getShareProfileReturnsOnCall = make(map[int]struct { +<<<<<<< HEAD result1 *models.ProfileDetails +======= + result1 *models.Profile +>>>>>>> 65230db (fix UTs) result2 error }) } fake.getShareProfileReturnsOnCall[i] = struct { +<<<<<<< HEAD result1 *models.ProfileDetails +======= + result1 *models.Profile +>>>>>>> 65230db (fix UTs) result2 error }{result1, result2} } diff --git a/common/vpcclient/vpcfilevolume/file_share_service.go b/common/vpcclient/vpcfilevolume/file_share_service.go index 10d9c457..6015ce15 100644 --- a/common/vpcclient/vpcfilevolume/file_share_service.go +++ b/common/vpcclient/vpcfilevolume/file_share_service.go @@ -32,7 +32,11 @@ import ( type FileShareManager interface { // Get the share profile by using profile name +<<<<<<< HEAD GetShareProfile(profileName string, ctxLogger *zap.Logger) (*models.ProfileDetails, error) +======= + GetShareProfile(profileName string, ctxLogger *zap.Logger) (*models.Profile, error) +>>>>>>> 65230db (fix UTs) // Create the file share with authorisation by passing required information in the share object CreateFileShare(volumeTemplate *models.Share, ctxLogger *zap.Logger) (*models.Share, error) diff --git a/common/vpcclient/vpcfilevolume/get_share_profile.go b/common/vpcclient/vpcfilevolume/get_share_profile.go index 5860f9e7..31d420b1 100644 --- a/common/vpcclient/vpcfilevolume/get_share_profile.go +++ b/common/vpcclient/vpcfilevolume/get_share_profile.go @@ -27,7 +27,11 @@ import ( ) // GetShareProfile GET to /shares/profiles/{profile-name} +<<<<<<< HEAD func (vs *FileShareService) GetShareProfile(name string, ctxLogger *zap.Logger) (*models.ProfileDetails, error) { +======= +func (vs *FileShareService) GetShareProfile(name string, ctxLogger *zap.Logger) (*models.Profile, error) { +>>>>>>> 65230db (fix UTs) ctxLogger.Debug("Entry GetShareProfile") defer ctxLogger.Debug("Exit GetShareProfile") @@ -39,7 +43,11 @@ func (vs *FileShareService) GetShareProfile(name string, ctxLogger *zap.Logger) PathPattern: shareProfileName, } +<<<<<<< HEAD var profile models.ProfileDetails +======= + var profile models.Profile +>>>>>>> 65230db (fix UTs) var apiErr models.Error request := vs.client.NewRequest(operation) diff --git a/common/vpcclient/vpcfilevolume/get_share_profile_test.go b/common/vpcclient/vpcfilevolume/get_share_profile_test.go index efe11840..ae9fe8b6 100644 --- a/common/vpcclient/vpcfilevolume/get_share_profile_test.go +++ b/common/vpcclient/vpcfilevolume/get_share_profile_test.go @@ -41,7 +41,11 @@ func TestGetShareProfile(t *testing.T) { // Expected return expectErr string +<<<<<<< HEAD verify func(*testing.T, *models.ProfileDetails, error) +======= + verify func(*testing.T, *models.Profile, error) +>>>>>>> 65230db (fix UTs) }{ { name: "Verify that the correct endpoint is invoked", @@ -56,7 +60,11 @@ func TestGetShareProfile(t *testing.T) { content: "{\"capacity\":{\"default\":10,\"max\":32000,\"min\":10,\"step\":1,\"type\":\"range\"},\"family\":\"defined_performance\",\"href\":\"https://us-south-stage01.iaasdev.cloud.ibm.com/v1/share/profiles/dp2\",\"name\":\"dp2\",\"resource_type\":\"share_profile\"}", status: http.StatusOK, +<<<<<<< HEAD verify: func(t *testing.T, profile *models.ProfileDetails, err error) { +======= + verify: func(t *testing.T, profile *models.Profile, err error) { +>>>>>>> 65230db (fix UTs) if assert.NotNil(t, profile) { assert.Equal(t, "dp2", profile.Name) } diff --git a/file/provider/create_volume.go b/file/provider/create_volume.go index 5cd79865..fb2c5a20 100644 --- a/file/provider/create_volume.go +++ b/file/provider/create_volume.go @@ -29,8 +29,12 @@ import ( ) const ( +<<<<<<< HEAD minSize = 10 //10 GB dp2Profile = "dp2" +======= + minSize = 10 //10 GB +>>>>>>> 65230db (fix UTs) ) // CreateVolume creates file share @@ -163,6 +167,24 @@ func validateVolumeRequest(volumeRequest provider.Volume) (models.ResourceGroup, // Volume name should not be empty if volumeRequest.Name == nil || len(*volumeRequest.Name) == 0 { return resourceGroup, iops, bandwidth, userError.GetUserError("InvalidVolumeName", nil, nil) +<<<<<<< HEAD +======= + } + + if volumeRequest.Capacity == nil { + return resourceGroup, iops, bandwidth, userError.GetUserError("VolumeCapacityInvalid", nil, nil) + } else if *volumeRequest.Capacity < minSize { + return resourceGroup, iops, bandwidth, userError.GetUserError("VolumeCapacityInvalid", nil, *volumeRequest.Capacity) + } + + // Read user provided error, no harm to pass the 0 values to RIaaS in case of tiered profiles + if volumeRequest.Iops != nil { + iops = ToInt64(*volumeRequest.Iops) + } + + if volumeRequest.Bandwidth != 0 { + bandwidth = volumeRequest.VPCVolume.Bandwidth +>>>>>>> 65230db (fix UTs) } if volumeRequest.VPCVolume.Profile == nil { diff --git a/file/provider/get_volume_profile_test.go b/file/provider/get_volume_profile_test.go index 518c7a18..efd1d104 100644 --- a/file/provider/get_volume_profile_test.go +++ b/file/provider/get_volume_profile_test.go @@ -38,7 +38,11 @@ func TestGetVolumeProfileByName(t *testing.T) { testCases := []struct { testCaseName string volumeProfileName string +<<<<<<< HEAD baseProfile *models.ProfileDetails +======= + baseProfile *models.Profile +>>>>>>> 65230db (fix UTs) setup func() @@ -49,11 +53,17 @@ func TestGetVolumeProfileByName(t *testing.T) { { testCaseName: "OK", volumeProfileName: "rfs", +<<<<<<< HEAD baseProfile: &models.ProfileDetails{ Profile: models.Profile{ Name: "rfs", Href: "href", }, +======= + baseProfile: &models.Profile{ + Name: "rfs", + Href: "href", +>>>>>>> 65230db (fix UTs) Capacity: models.CapIops{ Default: 1, Max: 32000, diff --git a/file/provider/util.go b/file/provider/util.go index cea33fc4..0b1edb26 100644 --- a/file/provider/util.go +++ b/file/provider/util.go @@ -338,7 +338,11 @@ func FromProviderToLibVolume(vpcVolume *models.Share, logger *zap.Logger) (libVo } // FromLibToProviderProfile converting vpc provider volume profile type from generic lib share profile type +<<<<<<< HEAD func FromLibToProviderProfile(vpcProfile *models.ProfileDetails, logger *zap.Logger) (libProfile *provider.Profile) { +======= +func FromLibToProviderProfile(vpcProfile *models.Profile, logger *zap.Logger) (libProfile *provider.Profile) { +>>>>>>> 65230db (fix UTs) logger.Debug("Entry of FromLibToProviderProfile method...") defer logger.Debug("Exit from FromLibToProviderProfile method...") @@ -350,12 +354,21 @@ func FromLibToProviderProfile(vpcProfile *models.ProfileDetails, logger *zap.Log logger.Debug("Profile details of VPC client", zap.Reflect("models.Profile", vpcProfile)) profile := &provider.Profile{ +<<<<<<< HEAD Name: vpcProfile.Name, Href: vpcProfile.Href, Capacity: (provider.CapIops)(vpcProfile.Capacity), Family: vpcProfile.Family, Iops: (provider.CapIops)(vpcProfile.Iops), ResourceType: vpcProfile.ResourceType, +======= + Name: vpcProfile.Name, + Href: vpcProfile.Href, + Capacity: (provider.CapIops)(vpcProfile.Capacity), + Family: vpcProfile.Family, + Iops: (provider.CapIops)(vpcProfile.Iops), + ResourceType: vpcProfile.ResourceType, +>>>>>>> 65230db (fix UTs) } return profile From 12791d6a21b7e3c48c572764d34697ec1d43ac90 Mon Sep 17 00:00:00 2001 From: Sameer Shaikh Date: Thu, 28 Aug 2025 21:02:40 +0530 Subject: [PATCH 4/6] fix UTs Signed-off-by: Sameer Shaikh --- common/vpcclient/vpcfilevolume/fakes/share.go | 40 ------------------- .../vpcfilevolume/file_share_service.go | 4 -- .../vpcfilevolume/get_share_profile.go | 8 ---- .../vpcfilevolume/get_share_profile_test.go | 8 ---- file/provider/create_volume.go | 22 ---------- file/provider/get_volume_profile_test.go | 10 ----- file/provider/util.go | 13 ------ 7 files changed, 105 deletions(-) diff --git a/common/vpcclient/vpcfilevolume/fakes/share.go b/common/vpcclient/vpcfilevolume/fakes/share.go index 97383a52..e33a5a00 100644 --- a/common/vpcclient/vpcfilevolume/fakes/share.go +++ b/common/vpcclient/vpcfilevolume/fakes/share.go @@ -155,30 +155,18 @@ type FileShareService struct { result1 *models.ShareTarget result2 error } -<<<<<<< HEAD GetShareProfileStub func(string, *zap.Logger) (*models.ProfileDetails, error) -======= - GetShareProfileStub func(string, *zap.Logger) (*models.Profile, error) ->>>>>>> 65230db (fix UTs) getShareProfileMutex sync.RWMutex getShareProfileArgsForCall []struct { arg1 string arg2 *zap.Logger } getShareProfileReturns struct { -<<<<<<< HEAD result1 *models.ProfileDetails result2 error } getShareProfileReturnsOnCall map[int]struct { result1 *models.ProfileDetails -======= - result1 *models.Profile - result2 error - } - getShareProfileReturnsOnCall map[int]struct { - result1 *models.Profile ->>>>>>> 65230db (fix UTs) result2 error } ListFileShareTargetsStub func(string, *models.ListShareTargetFilters, *zap.Logger) (*models.ShareTargetList, error) @@ -927,11 +915,7 @@ func (fake *FileShareService) GetFileShareTargetByNameReturnsOnCall(i int, resul }{result1, result2} } -<<<<<<< HEAD func (fake *FileShareService) GetShareProfile(arg1 string, arg2 *zap.Logger) (*models.ProfileDetails, error) { -======= -func (fake *FileShareService) GetShareProfile(arg1 string, arg2 *zap.Logger) (*models.Profile, error) { ->>>>>>> 65230db (fix UTs) fake.getShareProfileMutex.Lock() ret, specificReturn := fake.getShareProfileReturnsOnCall[len(fake.getShareProfileArgsForCall)] fake.getShareProfileArgsForCall = append(fake.getShareProfileArgsForCall, struct { @@ -957,11 +941,7 @@ func (fake *FileShareService) GetShareProfileCallCount() int { return len(fake.getShareProfileArgsForCall) } -<<<<<<< HEAD func (fake *FileShareService) GetShareProfileCalls(stub func(string, *zap.Logger) (*models.ProfileDetails, error)) { -======= -func (fake *FileShareService) GetShareProfileCalls(stub func(string, *zap.Logger) (*models.Profile, error)) { ->>>>>>> 65230db (fix UTs) fake.getShareProfileMutex.Lock() defer fake.getShareProfileMutex.Unlock() fake.GetShareProfileStub = stub @@ -974,48 +954,28 @@ func (fake *FileShareService) GetShareProfileArgsForCall(i int) (string, *zap.Lo return argsForCall.arg1, argsForCall.arg2 } -<<<<<<< HEAD func (fake *FileShareService) GetShareProfileReturns(result1 *models.ProfileDetails, result2 error) { -======= -func (fake *FileShareService) GetShareProfileReturns(result1 *models.Profile, result2 error) { ->>>>>>> 65230db (fix UTs) fake.getShareProfileMutex.Lock() defer fake.getShareProfileMutex.Unlock() fake.GetShareProfileStub = nil fake.getShareProfileReturns = struct { -<<<<<<< HEAD result1 *models.ProfileDetails -======= - result1 *models.Profile ->>>>>>> 65230db (fix UTs) result2 error }{result1, result2} } -<<<<<<< HEAD func (fake *FileShareService) GetShareProfileReturnsOnCall(i int, result1 *models.ProfileDetails, result2 error) { -======= -func (fake *FileShareService) GetShareProfileReturnsOnCall(i int, result1 *models.Profile, result2 error) { ->>>>>>> 65230db (fix UTs) fake.getShareProfileMutex.Lock() defer fake.getShareProfileMutex.Unlock() fake.GetShareProfileStub = nil if fake.getShareProfileReturnsOnCall == nil { fake.getShareProfileReturnsOnCall = make(map[int]struct { -<<<<<<< HEAD result1 *models.ProfileDetails -======= - result1 *models.Profile ->>>>>>> 65230db (fix UTs) result2 error }) } fake.getShareProfileReturnsOnCall[i] = struct { -<<<<<<< HEAD result1 *models.ProfileDetails -======= - result1 *models.Profile ->>>>>>> 65230db (fix UTs) result2 error }{result1, result2} } diff --git a/common/vpcclient/vpcfilevolume/file_share_service.go b/common/vpcclient/vpcfilevolume/file_share_service.go index 6015ce15..10d9c457 100644 --- a/common/vpcclient/vpcfilevolume/file_share_service.go +++ b/common/vpcclient/vpcfilevolume/file_share_service.go @@ -32,11 +32,7 @@ import ( type FileShareManager interface { // Get the share profile by using profile name -<<<<<<< HEAD GetShareProfile(profileName string, ctxLogger *zap.Logger) (*models.ProfileDetails, error) -======= - GetShareProfile(profileName string, ctxLogger *zap.Logger) (*models.Profile, error) ->>>>>>> 65230db (fix UTs) // Create the file share with authorisation by passing required information in the share object CreateFileShare(volumeTemplate *models.Share, ctxLogger *zap.Logger) (*models.Share, error) diff --git a/common/vpcclient/vpcfilevolume/get_share_profile.go b/common/vpcclient/vpcfilevolume/get_share_profile.go index 31d420b1..5860f9e7 100644 --- a/common/vpcclient/vpcfilevolume/get_share_profile.go +++ b/common/vpcclient/vpcfilevolume/get_share_profile.go @@ -27,11 +27,7 @@ import ( ) // GetShareProfile GET to /shares/profiles/{profile-name} -<<<<<<< HEAD func (vs *FileShareService) GetShareProfile(name string, ctxLogger *zap.Logger) (*models.ProfileDetails, error) { -======= -func (vs *FileShareService) GetShareProfile(name string, ctxLogger *zap.Logger) (*models.Profile, error) { ->>>>>>> 65230db (fix UTs) ctxLogger.Debug("Entry GetShareProfile") defer ctxLogger.Debug("Exit GetShareProfile") @@ -43,11 +39,7 @@ func (vs *FileShareService) GetShareProfile(name string, ctxLogger *zap.Logger) PathPattern: shareProfileName, } -<<<<<<< HEAD var profile models.ProfileDetails -======= - var profile models.Profile ->>>>>>> 65230db (fix UTs) var apiErr models.Error request := vs.client.NewRequest(operation) diff --git a/common/vpcclient/vpcfilevolume/get_share_profile_test.go b/common/vpcclient/vpcfilevolume/get_share_profile_test.go index ae9fe8b6..efe11840 100644 --- a/common/vpcclient/vpcfilevolume/get_share_profile_test.go +++ b/common/vpcclient/vpcfilevolume/get_share_profile_test.go @@ -41,11 +41,7 @@ func TestGetShareProfile(t *testing.T) { // Expected return expectErr string -<<<<<<< HEAD verify func(*testing.T, *models.ProfileDetails, error) -======= - verify func(*testing.T, *models.Profile, error) ->>>>>>> 65230db (fix UTs) }{ { name: "Verify that the correct endpoint is invoked", @@ -60,11 +56,7 @@ func TestGetShareProfile(t *testing.T) { content: "{\"capacity\":{\"default\":10,\"max\":32000,\"min\":10,\"step\":1,\"type\":\"range\"},\"family\":\"defined_performance\",\"href\":\"https://us-south-stage01.iaasdev.cloud.ibm.com/v1/share/profiles/dp2\",\"name\":\"dp2\",\"resource_type\":\"share_profile\"}", status: http.StatusOK, -<<<<<<< HEAD verify: func(t *testing.T, profile *models.ProfileDetails, err error) { -======= - verify: func(t *testing.T, profile *models.Profile, err error) { ->>>>>>> 65230db (fix UTs) if assert.NotNil(t, profile) { assert.Equal(t, "dp2", profile.Name) } diff --git a/file/provider/create_volume.go b/file/provider/create_volume.go index fb2c5a20..5cd79865 100644 --- a/file/provider/create_volume.go +++ b/file/provider/create_volume.go @@ -29,12 +29,8 @@ import ( ) const ( -<<<<<<< HEAD minSize = 10 //10 GB dp2Profile = "dp2" -======= - minSize = 10 //10 GB ->>>>>>> 65230db (fix UTs) ) // CreateVolume creates file share @@ -167,24 +163,6 @@ func validateVolumeRequest(volumeRequest provider.Volume) (models.ResourceGroup, // Volume name should not be empty if volumeRequest.Name == nil || len(*volumeRequest.Name) == 0 { return resourceGroup, iops, bandwidth, userError.GetUserError("InvalidVolumeName", nil, nil) -<<<<<<< HEAD -======= - } - - if volumeRequest.Capacity == nil { - return resourceGroup, iops, bandwidth, userError.GetUserError("VolumeCapacityInvalid", nil, nil) - } else if *volumeRequest.Capacity < minSize { - return resourceGroup, iops, bandwidth, userError.GetUserError("VolumeCapacityInvalid", nil, *volumeRequest.Capacity) - } - - // Read user provided error, no harm to pass the 0 values to RIaaS in case of tiered profiles - if volumeRequest.Iops != nil { - iops = ToInt64(*volumeRequest.Iops) - } - - if volumeRequest.Bandwidth != 0 { - bandwidth = volumeRequest.VPCVolume.Bandwidth ->>>>>>> 65230db (fix UTs) } if volumeRequest.VPCVolume.Profile == nil { diff --git a/file/provider/get_volume_profile_test.go b/file/provider/get_volume_profile_test.go index efd1d104..518c7a18 100644 --- a/file/provider/get_volume_profile_test.go +++ b/file/provider/get_volume_profile_test.go @@ -38,11 +38,7 @@ func TestGetVolumeProfileByName(t *testing.T) { testCases := []struct { testCaseName string volumeProfileName string -<<<<<<< HEAD baseProfile *models.ProfileDetails -======= - baseProfile *models.Profile ->>>>>>> 65230db (fix UTs) setup func() @@ -53,17 +49,11 @@ func TestGetVolumeProfileByName(t *testing.T) { { testCaseName: "OK", volumeProfileName: "rfs", -<<<<<<< HEAD baseProfile: &models.ProfileDetails{ Profile: models.Profile{ Name: "rfs", Href: "href", }, -======= - baseProfile: &models.Profile{ - Name: "rfs", - Href: "href", ->>>>>>> 65230db (fix UTs) Capacity: models.CapIops{ Default: 1, Max: 32000, diff --git a/file/provider/util.go b/file/provider/util.go index 0b1edb26..cea33fc4 100644 --- a/file/provider/util.go +++ b/file/provider/util.go @@ -338,11 +338,7 @@ func FromProviderToLibVolume(vpcVolume *models.Share, logger *zap.Logger) (libVo } // FromLibToProviderProfile converting vpc provider volume profile type from generic lib share profile type -<<<<<<< HEAD func FromLibToProviderProfile(vpcProfile *models.ProfileDetails, logger *zap.Logger) (libProfile *provider.Profile) { -======= -func FromLibToProviderProfile(vpcProfile *models.Profile, logger *zap.Logger) (libProfile *provider.Profile) { ->>>>>>> 65230db (fix UTs) logger.Debug("Entry of FromLibToProviderProfile method...") defer logger.Debug("Exit from FromLibToProviderProfile method...") @@ -354,21 +350,12 @@ func FromLibToProviderProfile(vpcProfile *models.Profile, logger *zap.Logger) (l logger.Debug("Profile details of VPC client", zap.Reflect("models.Profile", vpcProfile)) profile := &provider.Profile{ -<<<<<<< HEAD Name: vpcProfile.Name, Href: vpcProfile.Href, Capacity: (provider.CapIops)(vpcProfile.Capacity), Family: vpcProfile.Family, Iops: (provider.CapIops)(vpcProfile.Iops), ResourceType: vpcProfile.ResourceType, -======= - Name: vpcProfile.Name, - Href: vpcProfile.Href, - Capacity: (provider.CapIops)(vpcProfile.Capacity), - Family: vpcProfile.Family, - Iops: (provider.CapIops)(vpcProfile.Iops), - ResourceType: vpcProfile.ResourceType, ->>>>>>> 65230db (fix UTs) } return profile From fb41d0b0922019ae5a11eed20c29a3a25443e3c8 Mon Sep 17 00:00:00 2001 From: Sameer Shaikh Date: Fri, 29 Aug 2025 19:34:47 +0530 Subject: [PATCH 5/6] fix UTs Signed-off-by: Sameer Shaikh --- file/provider/create_volume.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/file/provider/create_volume.go b/file/provider/create_volume.go index 5cd79865..c012085f 100644 --- a/file/provider/create_volume.go +++ b/file/provider/create_volume.go @@ -62,14 +62,19 @@ func (vpcs *VPCSession) CreateVolume(volumeRequest provider.Volume) (volumeRespo Name: *volumeRequest.Name, Size: int64(*volumeRequest.Capacity), InitialOwner: (*models.InitialOwner)(volumeRequest.InitialOwner), - Iops: iops, - Bandwidth: bandwidth, AccessControlMode: volumeRequest.AccessControlMode, ResourceGroup: &resourceGroup, Profile: &models.Profile{ Name: volumeRequest.VPCVolume.Profile.Name, }, - Zone: zone, + } + + //Set Zone and iops if profile is dp2 + if volumeRequest.VPCVolume.Profile.Name == dp2Profile { + shareTemplate.Iops = iops + shareTemplate.Zone = zone + } else if volumeRequest.VPCVolume.Profile.Name == vpcfile.RFSProfile { //Set bandwitdh if profile is rfs, + shareTemplate.Bandwidth = bandwidth } // Check for VPC ID, SubnetID or PrimaryIPID either of the one is mandatory for VolumeAccessPoint/FileShareTarget creation From eee04e24c89ac91a3a330ca1a90d6c2578f32b71 Mon Sep 17 00:00:00 2001 From: Sameer Shaikh Date: Sun, 31 Aug 2025 12:53:23 +0530 Subject: [PATCH 6/6] Support for configurable beta Signed-off-by: Sameer Shaikh --- file/provider/create_volume.go | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/file/provider/create_volume.go b/file/provider/create_volume.go index c012085f..5cd79865 100644 --- a/file/provider/create_volume.go +++ b/file/provider/create_volume.go @@ -62,19 +62,14 @@ func (vpcs *VPCSession) CreateVolume(volumeRequest provider.Volume) (volumeRespo Name: *volumeRequest.Name, Size: int64(*volumeRequest.Capacity), InitialOwner: (*models.InitialOwner)(volumeRequest.InitialOwner), + Iops: iops, + Bandwidth: bandwidth, AccessControlMode: volumeRequest.AccessControlMode, ResourceGroup: &resourceGroup, Profile: &models.Profile{ Name: volumeRequest.VPCVolume.Profile.Name, }, - } - - //Set Zone and iops if profile is dp2 - if volumeRequest.VPCVolume.Profile.Name == dp2Profile { - shareTemplate.Iops = iops - shareTemplate.Zone = zone - } else if volumeRequest.VPCVolume.Profile.Name == vpcfile.RFSProfile { //Set bandwitdh if profile is rfs, - shareTemplate.Bandwidth = bandwidth + Zone: zone, } // Check for VPC ID, SubnetID or PrimaryIPID either of the one is mandatory for VolumeAccessPoint/FileShareTarget creation