github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/sharedfilesystems/v2/shareaccessrules.go (about)

     1  package v2
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/gophercloud/gophercloud"
     8  	"github.com/gophercloud/gophercloud/internal/acceptance/tools"
     9  	"github.com/gophercloud/gophercloud/openstack/sharedfilesystems/v2/shareaccessrules"
    10  	"github.com/gophercloud/gophercloud/openstack/sharedfilesystems/v2/shares"
    11  )
    12  
    13  func ShareAccessRuleGet(t *testing.T, client *gophercloud.ServiceClient, accessID string) (*shareaccessrules.ShareAccess, error) {
    14  	accessRule, err := shareaccessrules.Get(client, accessID).Extract()
    15  	if err != nil {
    16  		t.Logf("Failed to get share access rule %s: %v", accessID, err)
    17  		return nil, err
    18  	}
    19  
    20  	return accessRule, nil
    21  }
    22  
    23  // AccessRightToShareAccess is a helper function that converts
    24  // shares.AccessRight into shareaccessrules.ShareAccess struct.
    25  func AccessRightToShareAccess(accessRight *shares.AccessRight) *shareaccessrules.ShareAccess {
    26  	return &shareaccessrules.ShareAccess{
    27  		ShareID:     accessRight.ShareID,
    28  		AccessType:  accessRight.AccessType,
    29  		AccessTo:    accessRight.AccessTo,
    30  		AccessKey:   accessRight.AccessKey,
    31  		AccessLevel: accessRight.AccessLevel,
    32  		State:       accessRight.State,
    33  		ID:          accessRight.ID,
    34  	}
    35  }
    36  
    37  func WaitForShareAccessRule(t *testing.T, client *gophercloud.ServiceClient, accessRule *shareaccessrules.ShareAccess, status string) error {
    38  	if accessRule.State == status {
    39  		return nil
    40  	}
    41  
    42  	return tools.WaitFor(func() (bool, error) {
    43  		latest, err := ShareAccessRuleGet(t, client, accessRule.ID)
    44  		if err != nil {
    45  			if _, ok := err.(gophercloud.ErrDefault404); ok {
    46  				return false, nil
    47  			}
    48  
    49  			return false, err
    50  		}
    51  
    52  		if latest.State == status {
    53  			*accessRule = *latest
    54  			return true, nil
    55  		}
    56  
    57  		if latest.State == "error" {
    58  			return false, fmt.Errorf("share access rule %s for share %s is in error state", accessRule.ID, accessRule.ShareID)
    59  		}
    60  
    61  		return false, nil
    62  	})
    63  }
    64  
    65  func ShareAccessRuleList(t *testing.T, client *gophercloud.ServiceClient, shareID string) ([]shareaccessrules.ShareAccess, error) {
    66  	accessRules, err := shareaccessrules.List(client, shareID).Extract()
    67  	if err != nil {
    68  		t.Logf("Failed to list share access rules for share %s: %v", shareID, err)
    69  		return nil, err
    70  	}
    71  
    72  	return accessRules, nil
    73  }