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 }