Skip to content
This repository was archived by the owner on Aug 1, 2023. It is now read-only.

Commit 23867bb

Browse files
author
Jamie Hannaford
committed
Adding configuration parameters 👌
1 parent be00824 commit 23867bb

File tree

5 files changed

+245
-1
lines changed

5 files changed

+245
-1
lines changed

rackspace/db/v1/configurations/fixtures.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,51 @@ var listInstancesJSON = `
7777
}
7878
`
7979

80+
var listParamsJSON = `
81+
{
82+
"configuration-parameters": [
83+
{
84+
"max": 1,
85+
"min": 0,
86+
"name": "innodb_file_per_table",
87+
"restart_required": true,
88+
"type": "integer"
89+
},
90+
{
91+
"max": 4294967296,
92+
"min": 0,
93+
"name": "key_buffer_size",
94+
"restart_required": false,
95+
"type": "integer"
96+
},
97+
{
98+
"max": 65535,
99+
"min": 2,
100+
"name": "connect_timeout",
101+
"restart_required": false,
102+
"type": "integer"
103+
},
104+
{
105+
"max": 4294967296,
106+
"min": 0,
107+
"name": "join_buffer_size",
108+
"restart_required": false,
109+
"type": "integer"
110+
}
111+
]
112+
}
113+
`
114+
115+
var getParamJSON = `
116+
{
117+
"max": 1,
118+
"min": 0,
119+
"name": "innodb_file_per_table",
120+
"restart_required": true,
121+
"type": "integer"
122+
}
123+
`
124+
80125
var exampleConfig = Config{
81126
Created: "2014-07-31T18:56:09",
82127
DatastoreName: "mysql",

rackspace/db/v1/configurations/requests.go

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,41 @@ func ListInstances(client *gophercloud.ServiceClient, configID string) paginatio
190190
pageFn := func(r pagination.PageResult) pagination.Page {
191191
return instances.InstancePage{pagination.LinkedPageBase{PageResult: r}}
192192
}
193-
194193
return pagination.NewPager(client, instancesURL(client, configID), pageFn)
195194
}
195+
196+
func ListDatastoreParams(client *gophercloud.ServiceClient, datastoreID, versionID string) pagination.Pager {
197+
pageFn := func(r pagination.PageResult) pagination.Page {
198+
return ParamPage{pagination.SinglePageBase(r)}
199+
}
200+
return pagination.NewPager(client, listDSParamsURL(client, datastoreID, versionID), pageFn)
201+
}
202+
203+
func GetDatastoreParam(client *gophercloud.ServiceClient, datastoreID, versionID, paramID string) ParamResult {
204+
var res ParamResult
205+
206+
_, res.Err = client.Request("GET", getDSParamURL(client, datastoreID, versionID, paramID), gophercloud.RequestOpts{
207+
OkCodes: []int{200},
208+
JSONResponse: &res.Body,
209+
})
210+
211+
return res
212+
}
213+
214+
func ListGlobalParams(client *gophercloud.ServiceClient, versionID string) pagination.Pager {
215+
pageFn := func(r pagination.PageResult) pagination.Page {
216+
return ParamPage{pagination.SinglePageBase(r)}
217+
}
218+
return pagination.NewPager(client, listGlobalParamsURL(client, versionID), pageFn)
219+
}
220+
221+
func GetGlobalParam(client *gophercloud.ServiceClient, versionID, paramID string) ParamResult {
222+
var res ParamResult
223+
224+
_, res.Err = client.Request("GET", getGlobalParamURL(client, versionID, paramID), gophercloud.RequestOpts{
225+
OkCodes: []int{200},
226+
JSONResponse: &res.Body,
227+
})
228+
229+
return res
230+
}

rackspace/db/v1/configurations/requests_test.go

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@ var (
1414
configID = "{configID}"
1515
_baseURL = "/configurations"
1616
resURL = _baseURL + "/" + configID
17+
18+
dsID = "{datastoreID}"
19+
versionID = "{versionID}"
20+
paramID = "{paramID}"
21+
dsParamListURL = "/datastores/" + dsID + "/versions/" + versionID + "/parameters"
22+
dsParamGetURL = "/datastores/" + dsID + "/versions/" + versionID + "/parameters/" + paramID
23+
globalParamListURL = "/datastores/versions/" + versionID + "/parameters"
24+
globalParamGetURL = "/datastores/versions/" + versionID + "/parameters/" + paramID
1725
)
1826

1927
func TestList(t *testing.T) {
@@ -143,3 +151,97 @@ func TestListInstances(t *testing.T) {
143151
th.AssertNoErr(t, err)
144152
th.AssertEquals(t, 1, pages)
145153
}
154+
155+
func TestListDSParams(t *testing.T) {
156+
th.SetupHTTP()
157+
defer th.TeardownHTTP()
158+
159+
fixture.SetupHandler(t, dsParamListURL, "GET", "", listParamsJSON, 200)
160+
161+
pages := 0
162+
err := ListDatastoreParams(fake.ServiceClient(), dsID, versionID).EachPage(func(page pagination.Page) (bool, error) {
163+
pages++
164+
165+
actual, err := ExtractParams(page)
166+
if err != nil {
167+
return false, err
168+
}
169+
170+
expected := []Param{
171+
Param{Max: 1, Min: 0, Name: "innodb_file_per_table", RestartRequired: true, Type: "integer"},
172+
Param{Max: 4294967296, Min: 0, Name: "key_buffer_size", RestartRequired: false, Type: "integer"},
173+
Param{Max: 65535, Min: 2, Name: "connect_timeout", RestartRequired: false, Type: "integer"},
174+
Param{Max: 4294967296, Min: 0, Name: "join_buffer_size", RestartRequired: false, Type: "integer"},
175+
}
176+
177+
th.AssertDeepEquals(t, actual, expected)
178+
179+
return true, nil
180+
})
181+
182+
th.AssertNoErr(t, err)
183+
th.AssertEquals(t, 1, pages)
184+
}
185+
186+
func TestGetDSParam(t *testing.T) {
187+
th.SetupHTTP()
188+
defer th.TeardownHTTP()
189+
190+
fixture.SetupHandler(t, dsParamGetURL, "GET", "", getParamJSON, 200)
191+
192+
param, err := GetDatastoreParam(fake.ServiceClient(), dsID, versionID, paramID).Extract()
193+
th.AssertNoErr(t, err)
194+
195+
expected := &Param{
196+
Max: 1, Min: 0, Name: "innodb_file_per_table", RestartRequired: true, Type: "integer",
197+
}
198+
199+
th.AssertDeepEquals(t, expected, param)
200+
}
201+
202+
func TestListGlobalParams(t *testing.T) {
203+
th.SetupHTTP()
204+
defer th.TeardownHTTP()
205+
206+
fixture.SetupHandler(t, globalParamListURL, "GET", "", listParamsJSON, 200)
207+
208+
pages := 0
209+
err := ListGlobalParams(fake.ServiceClient(), versionID).EachPage(func(page pagination.Page) (bool, error) {
210+
pages++
211+
212+
actual, err := ExtractParams(page)
213+
if err != nil {
214+
return false, err
215+
}
216+
217+
expected := []Param{
218+
Param{Max: 1, Min: 0, Name: "innodb_file_per_table", RestartRequired: true, Type: "integer"},
219+
Param{Max: 4294967296, Min: 0, Name: "key_buffer_size", RestartRequired: false, Type: "integer"},
220+
Param{Max: 65535, Min: 2, Name: "connect_timeout", RestartRequired: false, Type: "integer"},
221+
Param{Max: 4294967296, Min: 0, Name: "join_buffer_size", RestartRequired: false, Type: "integer"},
222+
}
223+
224+
th.AssertDeepEquals(t, actual, expected)
225+
226+
return true, nil
227+
})
228+
229+
th.AssertNoErr(t, err)
230+
th.AssertEquals(t, 1, pages)
231+
}
232+
233+
func TestGetGlobalParam(t *testing.T) {
234+
th.SetupHTTP()
235+
defer th.TeardownHTTP()
236+
237+
fixture.SetupHandler(t, globalParamGetURL, "GET", "", getParamJSON, 200)
238+
239+
param, err := GetGlobalParam(fake.ServiceClient(), versionID, paramID).Extract()
240+
th.AssertNoErr(t, err)
241+
242+
expected := &Param{
243+
Max: 1, Min: 0, Name: "innodb_file_per_table", RestartRequired: true, Type: "integer",
244+
}
245+
246+
th.AssertDeepEquals(t, expected, param)
247+
}

rackspace/db/v1/configurations/results.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,49 @@ type ReplaceResult struct {
7777
type DeleteResult struct {
7878
gophercloud.ErrResult
7979
}
80+
81+
type Param struct {
82+
Max int
83+
Min int
84+
Name string
85+
RestartRequired bool `mapstructure:"restart_required" json:"restart_required"`
86+
Type string
87+
}
88+
89+
type ParamPage struct {
90+
pagination.SinglePageBase
91+
}
92+
93+
func (r ParamPage) IsEmpty() (bool, error) {
94+
is, err := ExtractParams(r)
95+
if err != nil {
96+
return true, err
97+
}
98+
return len(is) == 0, nil
99+
}
100+
101+
func ExtractParams(page pagination.Page) ([]Param, error) {
102+
casted := page.(ParamPage).Body
103+
104+
var resp struct {
105+
Params []Param `mapstructure:"configuration-parameters" json:"configuration-parameters"`
106+
}
107+
108+
err := mapstructure.Decode(casted, &resp)
109+
return resp.Params, err
110+
}
111+
112+
type ParamResult struct {
113+
gophercloud.Result
114+
}
115+
116+
func (r ParamResult) Extract() (*Param, error) {
117+
if r.Err != nil {
118+
return nil, r.Err
119+
}
120+
121+
var param Param
122+
123+
err := mapstructure.Decode(r.Body, &param)
124+
return &param, err
125+
}

rackspace/db/v1/configurations/urls.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,19 @@ func resourceURL(c *gophercloud.ServiceClient, configID string) string {
1313
func instancesURL(c *gophercloud.ServiceClient, configID string) string {
1414
return c.ServiceURL("configurations", configID, "instances")
1515
}
16+
17+
func listDSParamsURL(c *gophercloud.ServiceClient, datastoreID, versionID string) string {
18+
return c.ServiceURL("datastores", dsID, "versions", versionID, "parameters")
19+
}
20+
21+
func getDSParamURL(c *gophercloud.ServiceClient, datastoreID, versionID, paramID string) string {
22+
return c.ServiceURL("datastores", dsID, "versions", versionID, "parameters", paramID)
23+
}
24+
25+
func listGlobalParamsURL(c *gophercloud.ServiceClient, versionID string) string {
26+
return c.ServiceURL("datastores", "versions", versionID, "parameters")
27+
}
28+
29+
func getGlobalParamURL(c *gophercloud.ServiceClient, versionID, paramID string) string {
30+
return c.ServiceURL("datastores", "versions", versionID, "parameters", paramID)
31+
}

0 commit comments

Comments
 (0)