forked from gophercloud/gophercloud
-
Notifications
You must be signed in to change notification settings - Fork 0
/
requests.go
182 lines (164 loc) · 6.7 KB
/
requests.go
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
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
}
_, r.Err = client.Post(createURL(client), b, &r.Body, &gophercloud.RequestOpts{
OkCodes: []int{200},
})
return
}
// Delete will delete the existing SecurityService with the provided ID.
func Delete(client *gophercloud.ServiceClient, id string) (r DeleteResult) {
_, 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 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) {
_, r.Err = client.Get(getURL(client, id), &r.Body, nil)
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
}
_, r.Err = client.Put(updateURL(client, id), b, &r.Body, &gophercloud.RequestOpts{
OkCodes: []int{200},
})
return
}