Feature/filestorage securityservices list (#134)
* sfs: Add support for security services List
* sfs: Add acceptance tests for security service List
* sfs: Remove extra parameters for security service list
After taking a closer look at the code, some parameters
seem to be filtered out during the list request. They
have now been filtered out.
* sfs: Fix unit tests
* sfs: Use SecurityServiceType for ListOpts Type
diff --git a/openstack/sharedfilesystems/v2/securityservices/requests.go b/openstack/sharedfilesystems/v2/securityservices/requests.go
index 1253d33..9de58b9 100644
--- a/openstack/sharedfilesystems/v2/securityservices/requests.go
+++ b/openstack/sharedfilesystems/v2/securityservices/requests.go
@@ -1,6 +1,9 @@
package securityservices
-import "github.com/gophercloud/gophercloud"
+import (
+ "github.com/gophercloud/gophercloud"
+ "github.com/gophercloud/gophercloud/pagination"
+)
type SecurityServiceType string
@@ -65,3 +68,54 @@
_, r.Err = client.Delete(deleteURL(client, id), nil)
return
}
+
+// ListOptsBuilder allows extensions to add additional parameters to the List
+// request.
+type ListOptsBuilder interface {
+ ToSecurityServiceListQuery() (string, error)
+}
+
+// ListOpts holds options for listing SecurityServices. It is passed to the
+// securityservices.List function.
+type ListOpts struct {
+ // admin-only option. Set it to true to see all tenant security services.
+ AllTenants bool `q:"all_tenants"`
+ // The security service ID
+ ID string `q:"id"`
+ // The security service domain
+ Domain string `q:"domain"`
+ // The security service type. A valid value is ldap, kerberos, or active_directory
+ Type SecurityServiceType `q:"type"`
+ // The security service name
+ Name string `q:"name"`
+ // The DNS IP address that is used inside the tenant network
+ DNSIP string `q:"dns_ip"`
+ // The security service user or group name that is used by the tenant
+ User string `q:"user"`
+ // The security service host name or IP address
+ Server string `q:"server"`
+ // The ID of the share network using security services
+ ShareNetworkID string `q:"share_network_id"`
+}
+
+// ToSecurityServiceListQuery formats a ListOpts into a query string.
+func (opts ListOpts) ToSecurityServiceListQuery() (string, error) {
+ q, err := gophercloud.BuildQueryString(opts)
+ return q.String(), err
+}
+
+// List returns SecurityServices optionally limited by the conditions provided in ListOpts.
+func List(client *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
+ url := listURL(client)
+ if opts != nil {
+ query, err := opts.ToSecurityServiceListQuery()
+ if err != nil {
+ return pagination.Pager{Err: err}
+ }
+ url += query
+ }
+
+ return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
+ return SecurityServicePage{pagination.SinglePageBase(r)}
+ })
+}