From 1822b6af3d48457b4d8d06d8802768b1f5fddeef Mon Sep 17 00:00:00 2001 From: Utkarsh Dubey Date: Thu, 18 Jan 2024 15:04:15 +0530 Subject: [PATCH 1/3] adds nvmetcp target API Signed-off-by: Utkarsh Dubey --- client.go | 1 + ip_pool_address.go | 26 ++++++++++++++++++++++++++ ip_pool_address_types.go | 2 ++ 3 files changed, 29 insertions(+) diff --git a/client.go b/client.go index 94940de..1e7dda4 100644 --- a/client.go +++ b/client.go @@ -74,6 +74,7 @@ type Client interface { DetachVolumeFromHost(ctx context.Context, hostID string, detachParams *HostVolumeDetach) (EmptyResponse, error) DetachVolumeFromHostGroup(ctx context.Context, hostGroupID string, detachParams *HostVolumeDetach) (EmptyResponse, error) GetStorageISCSITargetAddresses(ctx context.Context) ([]IPPoolAddress, error) + GetStorageNVMETCPTargetAddresses(ctx context.Context) ([]IPPoolAddress, error) GetCapacity(ctx context.Context) (int64, error) GetFCPorts(ctx context.Context) (resp []FcPort, err error) GetFCPort(ctx context.Context, id string) (resp FcPort, err error) diff --git a/ip_pool_address.go b/ip_pool_address.go index c4ffd53..24e7778 100644 --- a/ip_pool_address.go +++ b/ip_pool_address.go @@ -51,3 +51,29 @@ func (c *ClientIMPL) GetStorageISCSITargetAddresses( } return resp, nil } + +// GetStorageNVMETCPTargetAddresses returns a list of PowerStore NVME/TCP targets ip addresses +func (c *ClientIMPL) GetStorageNVMETCPTargetAddresses( + ctx context.Context, +) (resp []IPPoolAddress, err error) { + var ipPoolAddress IPPoolAddress + qp := c.APIClient().QueryParamsWithFields(&ipPoolAddress) + qp.RawArg("purposes", fmt.Sprintf("cs.{%s}", IPPurposeTypeEnumStorageNVMETCPPort)) + qp.Order("id") + _, err = c.APIClient().Query( + ctx, + RequestConfig{ + Method: "GET", + Endpoint: apiPoolAddressURL, + QueryParams: qp, + }, + &resp) + err = WrapErr(err) + if err != nil { + return resp, err + } + if len(resp) == 0 { + return resp, errors.New("can't get iscsi target address") + } + return resp, nil +} diff --git a/ip_pool_address_types.go b/ip_pool_address_types.go index ec30e9a..7866699 100644 --- a/ip_pool_address_types.go +++ b/ip_pool_address_types.go @@ -42,6 +42,8 @@ const ( IPPurposeTypeEnumStorageIscsiInitiator IPPurposeTypeEnum = "Storage_Iscsi_Initiator" // IPPurposeTypeEnumStorageIscsiTarget captures enum value "Storage_Iscsi_Target" IPPurposeTypeEnumStorageIscsiTarget IPPurposeTypeEnum = "Storage_Iscsi_Target" + // IPPurposeTypeEnumStorageNVMETCPPort captures enum value "Storage_NVMe_TCP_Port" + IPPurposeTypeEnumStorageNVMETCPPort IPPurposeTypeEnum = "Storage_NVMe_TCP_Port" // IPPurposeTypeEnumStorageClusterFloating captures enum value "Storage_Cluster_Floating" IPPurposeTypeEnumStorageClusterFloating IPPurposeTypeEnum = "Storage_Cluster_Floating" // IPPurposeTypeEnumICDNode captures enum value "ICD_Node" From 7b2a164c9a5e0b86f269e026b6f24ff7721df2e4 Mon Sep 17 00:00:00 2001 From: Utkarsh Dubey Date: Thu, 18 Jan 2024 16:18:00 +0530 Subject: [PATCH 2/3] Adds mock func for GetNVMeTCP targets --- mocks/Client.go | 32 +++++++++++++++++++++++++++++- mocks/FieldProvider.go | 2 +- mocks/Logger.go | 2 +- mocks/QueryParamsEncoder.go | 2 +- mocks/RequestConfigRenderer.go | 2 +- mocks/TimeoutSemaphoreInterface.go | 2 +- mocks/Traceable.go | 2 +- replication_types.go | 2 +- 8 files changed, 38 insertions(+), 8 deletions(-) diff --git a/mocks/Client.go b/mocks/Client.go index 86d07d7..f24c227 100644 --- a/mocks/Client.go +++ b/mocks/Client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.38.0. DO NOT EDIT. +// Code generated by mockery v2.40.1. DO NOT EDIT. package mocks @@ -2673,6 +2673,36 @@ func (_m *Client) GetStorageISCSITargetAddresses(ctx context.Context) ([]gopower return r0, r1 } +// GetStorageNVMETCPTargetAddresses provides a mock function with given fields: ctx +func (_m *Client) GetStorageNVMETCPTargetAddresses(ctx context.Context) ([]gopowerstore.IPPoolAddress, error) { + ret := _m.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for GetStorageNVMETCPTargetAddresses") + } + + var r0 []gopowerstore.IPPoolAddress + var r1 error + if rf, ok := ret.Get(0).(func(context.Context) ([]gopowerstore.IPPoolAddress, error)); ok { + return rf(ctx) + } + if rf, ok := ret.Get(0).(func(context.Context) []gopowerstore.IPPoolAddress); ok { + r0 = rf(ctx) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]gopowerstore.IPPoolAddress) + } + } + + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(ctx) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // GetVolume provides a mock function with given fields: ctx, id func (_m *Client) GetVolume(ctx context.Context, id string) (gopowerstore.Volume, error) { ret := _m.Called(ctx, id) diff --git a/mocks/FieldProvider.go b/mocks/FieldProvider.go index fd33d64..f17b6a2 100644 --- a/mocks/FieldProvider.go +++ b/mocks/FieldProvider.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.38.0. DO NOT EDIT. +// Code generated by mockery v2.40.1. DO NOT EDIT. package mocks diff --git a/mocks/Logger.go b/mocks/Logger.go index 85284ac..a33eb83 100644 --- a/mocks/Logger.go +++ b/mocks/Logger.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.38.0. DO NOT EDIT. +// Code generated by mockery v2.40.1. DO NOT EDIT. package mocks diff --git a/mocks/QueryParamsEncoder.go b/mocks/QueryParamsEncoder.go index 42eb28b..c665839 100644 --- a/mocks/QueryParamsEncoder.go +++ b/mocks/QueryParamsEncoder.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.38.0. DO NOT EDIT. +// Code generated by mockery v2.40.1. DO NOT EDIT. package mocks diff --git a/mocks/RequestConfigRenderer.go b/mocks/RequestConfigRenderer.go index 2cd792e..676931d 100644 --- a/mocks/RequestConfigRenderer.go +++ b/mocks/RequestConfigRenderer.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.38.0. DO NOT EDIT. +// Code generated by mockery v2.40.1. DO NOT EDIT. package mocks diff --git a/mocks/TimeoutSemaphoreInterface.go b/mocks/TimeoutSemaphoreInterface.go index 9682d6e..afc6a78 100644 --- a/mocks/TimeoutSemaphoreInterface.go +++ b/mocks/TimeoutSemaphoreInterface.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.38.0. DO NOT EDIT. +// Code generated by mockery v2.40.1. DO NOT EDIT. package mocks diff --git a/mocks/Traceable.go b/mocks/Traceable.go index 54dfe3d..141929a 100644 --- a/mocks/Traceable.go +++ b/mocks/Traceable.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.38.0. DO NOT EDIT. +// Code generated by mockery v2.40.1. DO NOT EDIT. package mocks diff --git a/replication_types.go b/replication_types.go index 8de72ab..b52f930 100644 --- a/replication_types.go +++ b/replication_types.go @@ -40,7 +40,7 @@ const ( RsStatePausedForNdu RSStateEnum = "Paused_For_NDU" RsStateResuming RSStateEnum = "Resuming" RsStateFailingOver RSStateEnum = "Failing_Over" - RsStateFailingOverForDr RSStateEnum = "Failing_Over_For_DR" + RsStateFailingOverForDR RSStateEnum = "Failing_Over_For_DR" RsStateFailedOver RSStateEnum = "Failed_Over" RsStateReprotecting RSStateEnum = "Reprotecting" RsStatePartialCutoverForMigration RSStateEnum = "Partial_Cutover_For_Migration" From 6f0f86c240681c2835604047cfffe002bad8fa27 Mon Sep 17 00:00:00 2001 From: Utkarsh Dubey Date: Tue, 23 Jan 2024 16:34:12 +0530 Subject: [PATCH 3/3] Address PR comment --- ip_pool_address.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ip_pool_address.go b/ip_pool_address.go index 24e7778..8d12394 100644 --- a/ip_pool_address.go +++ b/ip_pool_address.go @@ -73,7 +73,7 @@ func (c *ClientIMPL) GetStorageNVMETCPTargetAddresses( return resp, err } if len(resp) == 0 { - return resp, errors.New("can't get iscsi target address") + return resp, errors.New("can't get NVMeTCP target address") } return resp, nil }