1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
|
package securityservices
import (
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/pagination"
)
type SecurityServiceType string
// Valid security service types
const (
LDAP SecurityServiceType = "ldap"
Kerberos SecurityServiceType = "kerberos"
ActiveDirectory SecurityServiceType = "active_directory"
)
// CreateOptsBuilder allows extensions to add additional parameters to the
// Create request.
type CreateOptsBuilder interface {
ToSecurityServiceCreateMap() (map[string]interface{}, error)
}
// CreateOpts contains options for creating a SecurityService. This object is
// passed to the securityservices.Create function. For more information about
// these parameters, see the SecurityService object.
type CreateOpts struct {
// The security service type. A valid value is ldap, kerberos, or active_directory
Type SecurityServiceType `json:"type" required:"true"`
// The security service name
Name string `json:"name,omitempty"`
// The security service description
Description string `json:"description,omitempty"`
// The DNS IP address that is used inside the tenant network
DNSIP string `json:"dns_ip,omitempty"`
// The security service organizational unit (OU). Minimum supported microversion for OU is 2.44.
OU string `json:"ou,omitempty"`
// The security service user or group name that is used by the tenant
User string `json:"user,omitempty"`
// The user password, if you specify a user
Password string `json:"password,omitempty"`
// The security service domain
Domain string `json:"domain,omitempty"`
// The security service host name or IP address
Server string `json:"server,omitempty"`
}
// ToSecurityServicesCreateMap assembles a request body based on the contents of a
// CreateOpts.
func (opts CreateOpts) ToSecurityServiceCreateMap() (map[string]interface{}, error) {
return gophercloud.BuildRequestBody(opts, "security_service")
}
// Create will create a new SecurityService based on the values in CreateOpts. To
// extract the SecurityService object from the response, call the Extract method
// on the CreateResult.
func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) (r CreateResult) {
b, err := opts.ToSecurityServiceCreateMap()
if err != nil {
r.Err = err
return
}
resp, err := client.Post(createURL(client), b, &r.Body, &gophercloud.RequestOpts{
OkCodes: []int{200},
})
_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
return
}
// Delete will delete the existing SecurityService with the provided ID.
func Delete(client *gophercloud.ServiceClient, id string) (r DeleteResult) {
resp, err := client.Delete(deleteURL(client, id), nil)
_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
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 organizational unit (OU). Minimum supported microversion for OU is 2.44.
OU string `q:"ou"`
// 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)}
})
}
// Get retrieves the SecurityService with the provided ID. To extract the SecurityService
// object from the response, call the Extract method on the GetResult.
func Get(client *gophercloud.ServiceClient, id string) (r GetResult) {
resp, err := client.Get(getURL(client, id), &r.Body, nil)
_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
return
}
// UpdateOptsBuilder allows extensions to add additional parameters to the
// Update request.
type UpdateOptsBuilder interface {
ToSecurityServiceUpdateMap() (map[string]interface{}, error)
}
// UpdateOpts contain options for updating an existing SecurityService. This object is passed
// to the securityservices.Update function. For more information about the parameters, see
// the SecurityService object.
type UpdateOpts struct {
// The security service name
Name *string `json:"name"`
// The security service description
Description *string `json:"description,omitempty"`
// The security service type. A valid value is ldap, kerberos, or active_directory
Type string `json:"type,omitempty"`
// The DNS IP address that is used inside the tenant network
DNSIP *string `json:"dns_ip,omitempty"`
// The security service organizational unit (OU). Minimum supported microversion for OU is 2.44.
OU *string `json:"ou,omitempty"`
// The security service user or group name that is used by the tenant
User *string `json:"user,omitempty"`
// The user password, if you specify a user
Password *string `json:"password,omitempty"`
// The security service domain
Domain *string `json:"domain,omitempty"`
// The security service host name or IP address
Server *string `json:"server,omitempty"`
}
// ToSecurityServiceUpdateMap assembles a request body based on the contents of an
// UpdateOpts.
func (opts UpdateOpts) ToSecurityServiceUpdateMap() (map[string]interface{}, error) {
return gophercloud.BuildRequestBody(opts, "security_service")
}
// Update will update the SecurityService with provided information. To extract the updated
// SecurityService from the response, call the Extract method on the UpdateResult.
func Update(client *gophercloud.ServiceClient, id string, opts UpdateOptsBuilder) (r UpdateResult) {
b, err := opts.ToSecurityServiceUpdateMap()
if err != nil {
r.Err = err
return
}
resp, err := client.Put(updateURL(client, id), b, &r.Body, &gophercloud.RequestOpts{
OkCodes: []int{200},
})
_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
return
}
|