Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Refactor code to add interface #79

Draft
wants to merge 5 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 45 additions & 57 deletions filesystem.go

Large diffs are not rendered by default.

183 changes: 91 additions & 92 deletions filesystem_test.go

Large diffs are not rendered by default.

72 changes: 31 additions & 41 deletions host.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,6 @@ import (
"github.com/dell/gounity/types"
)

// Host Structure
type Host struct {
client *Client
}

// Host not found error variables
var (
ErrorHostNotFound = errors.New("unable to find host")
Expand All @@ -31,20 +26,15 @@ var (
HostNotFoundErrorCode = "0x7d13005"
)

// NewHost function returns new host
func NewHost(client *Client) *Host {
return &Host{client}
}

// FindHostByName Finds the Host by it's name. If the Host is not found, an error will be returned.
func (h *Host) FindHostByName(ctx context.Context, hostName string) (*types.Host, error) {
func (c *UnityClientImpl) FindHostByName(ctx context.Context, hostName string) (*types.Host, error) {
log := util.GetRunIDLogger(ctx)
if len(hostName) == 0 {
return nil, errors.New("host Name shouldn't be empty")
}
hResponse := &types.Host{}
log.Info("URI", fmt.Sprintf(api.UnityAPIGetResourceByNameWithFieldsURI, api.HostAction, hostName, HostfieldsToQuery))
err := h.client.executeWithRetryAuthenticate(ctx, http.MethodGet, fmt.Sprintf(api.UnityAPIGetResourceByNameWithFieldsURI, api.HostAction, hostName, HostfieldsToQuery), nil, hResponse)
err := c.executeWithRetryAuthenticate(ctx, http.MethodGet, fmt.Sprintf(api.UnityAPIGetResourceByNameWithFieldsURI, api.HostAction, hostName, HostfieldsToQuery), nil, hResponse)
if err != nil {
// Using the multiple host found error code(MultipleHostFoundErrorCode) for comparison
if strings.Contains(err.Error(), MultipleHostFoundErrorCode) {
Expand All @@ -58,7 +48,7 @@ func (h *Host) FindHostByName(ctx context.Context, hostName string) (*types.Host
}

// CreateHost Create a new Host
func (h *Host) CreateHost(ctx context.Context, hostName string, tenantID string) (*types.Host, error) {
func (c *UnityClientImpl) CreateHost(ctx context.Context, hostName string, tenantID string) (*types.Host, error) {
if len(hostName) == 0 {
return nil, errors.New("hostname shouldn't be empty")
}
Expand All @@ -77,29 +67,29 @@ func (h *Host) CreateHost(ctx context.Context, hostName string, tenantID string)
}

hostResp := &types.Host{}
err := h.client.executeWithRetryAuthenticate(ctx, http.MethodPost, fmt.Sprintf(api.UnityAPIInstanceTypeResources, api.HostAction), hostReq, hostResp)
err := c.executeWithRetryAuthenticate(ctx, http.MethodPost, fmt.Sprintf(api.UnityAPIInstanceTypeResources, api.HostAction), hostReq, hostResp)
if err != nil {
return nil, err
}
return hostResp, nil
}

// DeleteHost function is used only in unit tests
func (h *Host) DeleteHost(ctx context.Context, hostName string) error {
func (c *UnityClientImpl) DeleteHost(ctx context.Context, hostName string) error {
if len(hostName) == 0 {
return fmt.Errorf("hostname shouldn't be empty")
}

hostResp := &types.Host{}
err := h.client.executeWithRetryAuthenticate(ctx, http.MethodDelete, fmt.Sprintf(api.UnityAPIGetResourceByNameURI, api.HostAction, hostName), nil, hostResp)
err := c.executeWithRetryAuthenticate(ctx, http.MethodDelete, fmt.Sprintf(api.UnityAPIGetResourceByNameURI, api.HostAction, hostName), nil, hostResp)
if err != nil {
return err
}
return nil
}

// CreateHostIPPort - Create Host IP Port
func (h *Host) CreateHostIPPort(ctx context.Context, hostID, ip string) (*types.HostIPPort, error) {
func (c *UnityClientImpl) CreateHostIPPort(ctx context.Context, hostID, ip string) (*types.HostIPPort, error) {
if len(hostID) == 0 {
return nil, errors.New("host ID shouldn't be empty")
}
Expand All @@ -114,41 +104,41 @@ func (h *Host) CreateHostIPPort(ctx context.Context, hostID, ip string) (*types.
}

hostIPResp := &types.HostIPPort{}
err := h.client.executeWithRetryAuthenticate(ctx, http.MethodPost, fmt.Sprintf(api.UnityAPIInstanceTypeResources, api.HostIPPortAction), hostIPReq, hostIPResp)
err := c.executeWithRetryAuthenticate(ctx, http.MethodPost, fmt.Sprintf(api.UnityAPIInstanceTypeResources, api.HostIPPortAction), hostIPReq, hostIPResp)
if err != nil {
return nil, err
}
return hostIPResp, nil
}

// FindHostIPPortByID method to get host Ip port object from Unity by cli ID
func (h *Host) FindHostIPPortByID(ctx context.Context, hostIPID string) (*types.HostIPPort, error) {
func (c *UnityClientImpl) FindHostIPPortByID(ctx context.Context, hostIPID string) (*types.HostIPPort, error) {
hostIPResp := &types.HostIPPort{}
err := h.client.executeWithRetryAuthenticate(ctx, http.MethodGet, fmt.Sprintf(api.UnityAPIGetResourceWithFieldsURI, api.HostIPPortAction, hostIPID, HostIPPortDisplayFields), nil, hostIPResp)
err := c.executeWithRetryAuthenticate(ctx, http.MethodGet, fmt.Sprintf(api.UnityAPIGetResourceWithFieldsURI, api.HostIPPortAction, hostIPID, HostIPPortDisplayFields), nil, hostIPResp)
if err != nil {
return nil, err
}
return hostIPResp, nil
}

// ListHostInitiators lists all host initiators
func (h *Host) ListHostInitiators(ctx context.Context) ([]types.HostInitiator, error) {
func (c *UnityClientImpl) ListHostInitiators(ctx context.Context) ([]types.HostInitiator, error) {
listInitiatorResp := &types.ListHostInitiator{}
hostInitiatorURI := api.UnityListHostInitiatorsURI + HostInitiatorsDisplayFields
err := h.client.executeWithRetryAuthenticate(ctx, http.MethodGet, hostInitiatorURI, nil, listInitiatorResp)
err := c.executeWithRetryAuthenticate(ctx, http.MethodGet, hostInitiatorURI, nil, listInitiatorResp)
if err != nil {
return nil, err
}
return listInitiatorResp.HostInitiator, nil
}

// FindHostInitiatorByName - Find Host Initiator by name
func (h *Host) FindHostInitiatorByName(ctx context.Context, wwnOrIqn string) (*types.HostInitiator, error) {
func (c *UnityClientImpl) FindHostInitiatorByName(ctx context.Context, wwnOrIqn string) (*types.HostInitiator, error) {
if len(wwnOrIqn) == 0 {
return nil, errors.New("host Initiator Name shouldn't be empty")
}

list, err := h.ListHostInitiators(ctx)
list, err := c.ListHostInitiators(ctx)
if err != nil {
return nil, err
}
Expand All @@ -161,7 +151,7 @@ func (h *Host) FindHostInitiatorByName(ctx context.Context, wwnOrIqn string) (*t

// @TODO The following code should work. Unity rest api having a bug querying host initiators by host initiatorID
//hostInitiatorResp := &types.HostInitiator{}
//err := h.client.executeWithRetryAuthenticate(http.MethodGet, fmt.Sprintf(api.UnityApiGetResourceByPropertyWithFieldsUri, "hostInitiator", "initiatorID" ,wwnOrIqn, api.HostInitiatorsDisplayFields), nil, hostInitiatorResp)
//err := c.executeWithRetryAuthenticate(http.MethodGet, fmt.Sprintf(api.UnityApiGetResourceByPropertyWithFieldsUri, "hostInitiator", "initiatorID" ,wwnOrIqn, api.HostInitiatorsDisplayFields), nil, hostInitiatorResp)
//if err != nil {
// log.Info("Unable to find host initiator:", wwnOrIqn)
// return nil, errors.New(fmt.Sprintf("Unable to find host %s", wwnOrIqn))
Expand All @@ -171,17 +161,17 @@ func (h *Host) FindHostInitiatorByName(ctx context.Context, wwnOrIqn string) (*t
}

// FindHostInitiatorByID - Find Host Initiator
func (h *Host) FindHostInitiatorByID(ctx context.Context, wwnOrIqn string) (*types.HostInitiator, error) {
func (c *UnityClientImpl) FindHostInitiatorByID(ctx context.Context, wwnOrIqn string) (*types.HostInitiator, error) {
hostInitiatorResp := &types.HostInitiator{}
err := h.client.executeWithRetryAuthenticate(ctx, http.MethodGet, fmt.Sprintf(api.UnityAPIGetResourceWithFieldsURI, api.HostInitiatorAction, wwnOrIqn, HostInitiatorsDisplayFields), nil, hostInitiatorResp)
err := c.executeWithRetryAuthenticate(ctx, http.MethodGet, fmt.Sprintf(api.UnityAPIGetResourceWithFieldsURI, api.HostInitiatorAction, wwnOrIqn, HostInitiatorsDisplayFields), nil, hostInitiatorResp)
if err != nil {
return nil, fmt.Errorf("unable to find host %s : %v", wwnOrIqn, err)
}
return hostInitiatorResp, nil
}

// CreateHostInitiator - Create Host Initiator
func (h *Host) CreateHostInitiator(ctx context.Context, hostID, wwnOrIqn string, initiatorType types.InitiatorType) (*types.HostInitiator, error) {
func (c *UnityClientImpl) CreateHostInitiator(ctx context.Context, hostID, wwnOrIqn string, initiatorType types.InitiatorType) (*types.HostInitiator, error) {
log := util.GetRunIDLogger(ctx)
if len(hostID) == 0 {
return nil, errors.New("host ID shouldn't be empty")
Expand All @@ -194,7 +184,7 @@ func (h *Host) CreateHostInitiator(ctx context.Context, hostID, wwnOrIqn string,
hostInitiatorResp := &types.HostInitiator{}

log.Debugf("Finding Initiator: %s", wwnOrIqn)
initiator, err := h.FindHostInitiatorByName(ctx, wwnOrIqn)
initiator, err := c.FindHostInitiatorByName(ctx, wwnOrIqn)
log.Debugf("FindHostInitiatorByName: %v Error: %v", initiator, err)
if err != nil {
log.Debugf("Initiator not found. Adding new Initiator: %s to host: %s \n", wwnOrIqn, hostID)
Expand All @@ -207,13 +197,13 @@ func (h *Host) CreateHostInitiator(ctx context.Context, hostID, wwnOrIqn string,
InitiatorType: initiatorType,
InitiatorWwn: wwnOrIqn,
}
err := h.client.executeWithRetryAuthenticate(ctx, http.MethodPost, fmt.Sprintf(api.UnityAPIInstanceTypeResources, api.HostInitiatorAction), hostInitiatorReq, hostInitiatorResp)
err := c.executeWithRetryAuthenticate(ctx, http.MethodPost, fmt.Sprintf(api.UnityAPIInstanceTypeResources, api.HostInitiatorAction), hostInitiatorReq, hostInitiatorResp)
if err != nil {
return nil, fmt.Errorf("create Host Initiator %s Error: %v", wwnOrIqn, err)
}
} else if initiator.HostInitiatorContent.ParentHost.ID == "" {
log.Debugf("Initiator found, but parent host is not added. Updating the existing Initiator: %s to host: %s \n", wwnOrIqn, hostID)
initiator, err = h.ModifyHostInitiator(ctx, hostID, initiator)
initiator, err = c.ModifyHostInitiator(ctx, hostID, initiator)
if err != nil {
return nil, fmt.Errorf("modify Host Initiator %s Error: %v", wwnOrIqn, err)
}
Expand All @@ -229,16 +219,16 @@ func (h *Host) CreateHostInitiator(ctx context.Context, hostID, wwnOrIqn string,
}

// ModifyHostInitiator - WILL BE DEPRECATED
func (h *Host) ModifyHostInitiator(ctx context.Context, hostID string, initiator *types.HostInitiator) (*types.HostInitiator, error) {
func (c *UnityClientImpl) ModifyHostInitiator(ctx context.Context, hostID string, initiator *types.HostInitiator) (*types.HostInitiator, error) {
if initiator == nil {
return nil, errors.New("HostInitiator shouldn't be null")
}

return h.ModifyHostInitiatorByID(ctx, hostID, initiator.HostInitiatorContent.ID)
return c.ModifyHostInitiatorByID(ctx, hostID, initiator.HostInitiatorContent.ID)
}

// ModifyHostInitiatorByID function modifies host initiator by ID
func (h *Host) ModifyHostInitiatorByID(ctx context.Context, hostID, initiatorID string) (*types.HostInitiator, error) {
func (c *UnityClientImpl) ModifyHostInitiatorByID(ctx context.Context, hostID, initiatorID string) (*types.HostInitiator, error) {
if hostID == "" {
return nil, errors.New("Host ID shouldn't be null")
}
Expand All @@ -254,37 +244,37 @@ func (h *Host) ModifyHostInitiatorByID(ctx context.Context, hostID, initiatorID
HostIDContent: &hostIDContent,
}
hostInitiatorResp := &types.HostInitiator{}
err := h.client.executeWithRetryAuthenticate(ctx, http.MethodPost, fmt.Sprintf(api.UnityModifyHostInitiators, initiatorID), hostInitiatorReq, hostInitiatorResp)
err := c.executeWithRetryAuthenticate(ctx, http.MethodPost, fmt.Sprintf(api.UnityModifyHostInitiators, initiatorID), hostInitiatorReq, hostInitiatorResp)
if err != nil {
return nil, err
}
return hostInitiatorResp, nil
}

// FindHostInitiatorPathByID Finds Host Initiator
func (h *Host) FindHostInitiatorPathByID(ctx context.Context, initiatorPathID string) (*types.HostInitiatorPath, error) {
func (c *UnityClientImpl) FindHostInitiatorPathByID(ctx context.Context, initiatorPathID string) (*types.HostInitiatorPath, error) {
hostInitiatorPathResp := &types.HostInitiatorPath{}
err := h.client.executeWithRetryAuthenticate(ctx, http.MethodGet, fmt.Sprintf(api.UnityAPIGetResourceWithFieldsURI, api.HostInitiatorPathAction, initiatorPathID, HostInitiatorPathDisplayFields), nil, hostInitiatorPathResp)
err := c.executeWithRetryAuthenticate(ctx, http.MethodGet, fmt.Sprintf(api.UnityAPIGetResourceWithFieldsURI, api.HostInitiatorPathAction, initiatorPathID, HostInitiatorPathDisplayFields), nil, hostInitiatorPathResp)
if err != nil {
return nil, fmt.Errorf("unable to find host initiator path %s : %v", initiatorPathID, err)
}
return hostInitiatorPathResp, nil
}

// FindFcPortByID Finds FC Port
func (h *Host) FindFcPortByID(ctx context.Context, fcPortID string) (*types.FcPort, error) {
func (c *UnityClientImpl) FindFcPortByID(ctx context.Context, fcPortID string) (*types.FcPort, error) {
fcPortResp := &types.FcPort{}
err := h.client.executeWithRetryAuthenticate(ctx, http.MethodGet, fmt.Sprintf(api.UnityAPIGetResourceWithFieldsURI, HostInitiatorPathDisplayFields, fcPortID, FcPortDisplayFields), nil, fcPortResp)
err := c.executeWithRetryAuthenticate(ctx, http.MethodGet, fmt.Sprintf(api.UnityAPIGetResourceWithFieldsURI, HostInitiatorPathDisplayFields, fcPortID, FcPortDisplayFields), nil, fcPortResp)
if err != nil {
return nil, fmt.Errorf("unable to find Fc port %s : %v", fcPortID, err)
}
return fcPortResp, nil
}

// FindTenants finds tenants
func (h *Host) FindTenants(ctx context.Context) (*types.TenantInfo, error) {
func (c *UnityClientImpl) FindTenants(ctx context.Context) (*types.TenantInfo, error) {
tenantsResp := &types.TenantInfo{}
err := h.client.executeWithRetryAuthenticate(ctx, http.MethodGet, fmt.Sprintf(api.UnityAPIGetTenantURI, api.TenantAction, TenantDisplayFields), nil, tenantsResp)
err := c.executeWithRetryAuthenticate(ctx, http.MethodGet, fmt.Sprintf(api.UnityAPIGetTenantURI, api.TenantAction, TenantDisplayFields), nil, tenantsResp)
if err != nil {
return nil, fmt.Errorf("unable to find tenants : %v", err)
}
Expand Down
Loading