Skip to content

Commit ea893ef

Browse files
Migrate LKE and MySQL Client Functions to Utilize Request Helpers (#540)
* Migrated files and reran fixtures * Added missing paged response structs * Fixes
1 parent 3cb05c9 commit ea893ef

33 files changed

+8294
-5387
lines changed

lke_cluster_pools.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@ type LKEClusterPoolCreateOptions = LKENodePoolCreateOptions
2222
// Deprecated: LKEClusterPoolUpdateOptions fields are those accepted by UpdateLKEClusterPool
2323
type LKEClusterPoolUpdateOptions = LKENodePoolUpdateOptions
2424

25-
// Deprecated: LKEClusterPoolsPagedResponse represents a paginated LKEClusterPool API response
26-
type LKEClusterPoolsPagedResponse = LKENodePoolsPagedResponse
27-
2825
// Deprecated: ListLKEClusterPools lists LKEClusterPools
2926
func (c *Client) ListLKEClusterPools(ctx context.Context, clusterID int, opts *ListOptions) ([]LKEClusterPool, error) {
3027
return c.ListLKENodePools(ctx, clusterID, opts)

lke_clusters.go

Lines changed: 40 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,8 @@ package linodego
33
import (
44
"context"
55
"encoding/json"
6-
"fmt"
7-
"net/url"
86
"time"
97

10-
"github.com/go-resty/resty/v2"
118
"github.com/linode/linodego/internal/parseabletime"
129
)
1310

@@ -133,32 +130,11 @@ func (i LKECluster) GetUpdateOptions() (o LKEClusterUpdateOptions) {
133130
return
134131
}
135132

136-
// LKEVersionsPagedResponse represents a paginated LKEVersion API response
137-
type LKEVersionsPagedResponse struct {
138-
*PageOptions
139-
Data []LKEVersion `json:"data"`
140-
}
141-
142-
// endpoint gets the endpoint URL for LKEVersion
143-
func (LKEVersionsPagedResponse) endpoint(_ ...any) string {
144-
return "lke/versions"
145-
}
146-
147-
func (resp *LKEVersionsPagedResponse) castResult(r *resty.Request, e string) (int, int, error) {
148-
res, err := coupleAPIErrors(r.SetResult(LKEVersionsPagedResponse{}).Get(e))
149-
if err != nil {
150-
return 0, 0, err
151-
}
152-
castedRes := res.Result().(*LKEVersionsPagedResponse)
153-
resp.Data = append(resp.Data, castedRes.Data...)
154-
return castedRes.Pages, castedRes.Results, nil
155-
}
156-
157133
// ListLKEVersions lists the Kubernetes versions available through LKE. This endpoint is cached by default.
158134
func (c *Client) ListLKEVersions(ctx context.Context, opts *ListOptions) ([]LKEVersion, error) {
159-
response := LKEVersionsPagedResponse{}
135+
e := "lke/versions"
160136

161-
endpoint, err := generateListCacheURL(response.endpoint(), opts)
137+
endpoint, err := generateListCacheURL(e, opts)
162138
if err != nil {
163139
return nil, err
164140
}
@@ -167,198 +143,134 @@ func (c *Client) ListLKEVersions(ctx context.Context, opts *ListOptions) ([]LKEV
167143
return result.([]LKEVersion), nil
168144
}
169145

170-
err = c.listHelper(ctx, &response, opts)
146+
response, err := getPaginatedResults[LKEVersion](ctx, c, e, opts)
171147
if err != nil {
172148
return nil, err
173149
}
174150

175-
c.addCachedResponse(endpoint, response.Data, &cacheExpiryTime)
151+
c.addCachedResponse(endpoint, response, &cacheExpiryTime)
176152

177-
return response.Data, nil
153+
return response, nil
178154
}
179155

180156
// GetLKEVersion gets details about a specific LKE Version. This endpoint is cached by default.
181157
func (c *Client) GetLKEVersion(ctx context.Context, version string) (*LKEVersion, error) {
182-
version = url.PathEscape(version)
183-
e := fmt.Sprintf("lke/versions/%s", version)
158+
e := formatAPIPath("lke/versions/%s", version)
184159

185160
if result := c.getCachedResponse(e); result != nil {
186161
result := result.(LKEVersion)
187162
return &result, nil
188163
}
189164

190-
req := c.R(ctx).SetResult(&LKEVersion{})
191-
r, err := coupleAPIErrors(req.Get(e))
165+
response, err := doGETRequest[LKEVersion](ctx, c, e)
192166
if err != nil {
193167
return nil, err
194168
}
195169

196-
c.addCachedResponse(e, r.Result(), &cacheExpiryTime)
197-
198-
return r.Result().(*LKEVersion), nil
199-
}
200-
201-
// LKEClusterAPIEndpointsPagedResponse represents a paginated LKEClusterAPIEndpoints API response
202-
type LKEClusterAPIEndpointsPagedResponse struct {
203-
*PageOptions
204-
Data []LKEClusterAPIEndpoint `json:"data"`
205-
}
170+
c.addCachedResponse(e, response, &cacheExpiryTime)
206171

207-
// endpoint gets the endpoint URL for LKEClusterAPIEndpointsPagedResponse
208-
func (LKEClusterAPIEndpointsPagedResponse) endpoint(ids ...any) string {
209-
id := ids[0].(int)
210-
return fmt.Sprintf("lke/clusters/%d/api-endpoints", id)
211-
}
212-
213-
func (resp *LKEClusterAPIEndpointsPagedResponse) castResult(r *resty.Request, e string) (int, int, error) {
214-
res, err := coupleAPIErrors(r.SetResult(LKEClusterAPIEndpointsPagedResponse{}).Get(e))
215-
if err != nil {
216-
return 0, 0, err
217-
}
218-
castedRes := res.Result().(*LKEClusterAPIEndpointsPagedResponse)
219-
resp.Data = append(resp.Data, castedRes.Data...)
220-
return castedRes.Pages, castedRes.Results, nil
172+
return response, nil
221173
}
222174

223175
// ListLKEClusterAPIEndpoints gets the API Endpoint for the LKE Cluster specified
224176
func (c *Client) ListLKEClusterAPIEndpoints(ctx context.Context, clusterID int, opts *ListOptions) ([]LKEClusterAPIEndpoint, error) {
225-
response := LKEClusterAPIEndpointsPagedResponse{}
226-
err := c.listHelper(ctx, &response, opts, clusterID)
177+
response, err := getPaginatedResults[LKEClusterAPIEndpoint](ctx, c, formatAPIPath("lke/clusters/%d/api-endpoints", clusterID), opts)
227178
if err != nil {
228179
return nil, err
229180
}
230-
return response.Data, nil
231-
}
232-
233-
// LKEClustersPagedResponse represents a paginated LKECluster API response
234-
type LKEClustersPagedResponse struct {
235-
*PageOptions
236-
Data []LKECluster `json:"data"`
237-
}
238-
239-
// endpoint gets the endpoint URL for LKECluster
240-
func (LKEClustersPagedResponse) endpoint(_ ...any) string {
241-
return "lke/clusters"
242-
}
243181

244-
func (resp *LKEClustersPagedResponse) castResult(r *resty.Request, e string) (int, int, error) {
245-
res, err := coupleAPIErrors(r.SetResult(LKEClustersPagedResponse{}).Get(e))
246-
if err != nil {
247-
return 0, 0, err
248-
}
249-
castedRes := res.Result().(*LKEClustersPagedResponse)
250-
resp.Data = append(resp.Data, castedRes.Data...)
251-
return castedRes.Pages, castedRes.Results, nil
182+
return response, nil
252183
}
253184

254185
// ListLKEClusters lists LKEClusters
255186
func (c *Client) ListLKEClusters(ctx context.Context, opts *ListOptions) ([]LKECluster, error) {
256-
response := LKEClustersPagedResponse{}
257-
err := c.listHelper(ctx, &response, opts)
258-
if err != nil {
259-
return nil, err
260-
}
261-
return response.Data, nil
187+
response, err := getPaginatedResults[LKECluster](ctx, c, "lke/clusters", opts)
188+
return response, err
262189
}
263190

264191
// GetLKECluster gets the lkeCluster with the provided ID
265192
func (c *Client) GetLKECluster(ctx context.Context, clusterID int) (*LKECluster, error) {
266-
e := fmt.Sprintf("lke/clusters/%d", clusterID)
267-
req := c.R(ctx).SetResult(&LKECluster{})
268-
r, err := coupleAPIErrors(req.Get(e))
193+
e := formatAPIPath("lke/clusters/%d", clusterID)
194+
response, err := doGETRequest[LKECluster](ctx, c, e)
269195
if err != nil {
270196
return nil, err
271197
}
272-
return r.Result().(*LKECluster), nil
198+
199+
return response, nil
273200
}
274201

275202
// CreateLKECluster creates a LKECluster
276203
func (c *Client) CreateLKECluster(ctx context.Context, opts LKEClusterCreateOptions) (*LKECluster, error) {
277-
body, err := json.Marshal(opts)
278-
if err != nil {
279-
return nil, err
280-
}
281-
282204
e := "lke/clusters"
283-
req := c.R(ctx).SetResult(&LKECluster{}).SetBody(string(body))
284-
r, err := coupleAPIErrors(req.Post(e))
205+
response, err := doPOSTRequest[LKECluster](ctx, c, e, opts)
285206
if err != nil {
286207
return nil, err
287208
}
288-
return r.Result().(*LKECluster), nil
209+
210+
return response, nil
289211
}
290212

291213
// UpdateLKECluster updates the LKECluster with the specified id
292214
func (c *Client) UpdateLKECluster(ctx context.Context, clusterID int, opts LKEClusterUpdateOptions) (*LKECluster, error) {
293-
body, err := json.Marshal(opts)
215+
e := formatAPIPath("lke/clusters/%d", clusterID)
216+
response, err := doPUTRequest[LKECluster](ctx, c, e, opts)
294217
if err != nil {
295218
return nil, err
296219
}
297220

298-
e := fmt.Sprintf("lke/clusters/%d", clusterID)
299-
req := c.R(ctx).SetResult(&LKECluster{}).SetBody(string(body))
300-
r, err := coupleAPIErrors(req.Put(e))
301-
if err != nil {
302-
return nil, err
303-
}
304-
return r.Result().(*LKECluster), nil
221+
return response, nil
305222
}
306223

307224
// DeleteLKECluster deletes the LKECluster with the specified id
308225
func (c *Client) DeleteLKECluster(ctx context.Context, clusterID int) error {
309-
e := fmt.Sprintf("lke/clusters/%d", clusterID)
310-
_, err := coupleAPIErrors(c.R(ctx).Delete(e))
226+
e := formatAPIPath("lke/clusters/%d", clusterID)
227+
err := doDELETERequest(ctx, c, e)
311228
return err
312229
}
313230

314231
// GetLKEClusterKubeconfig gets the Kubeconfig for the LKE Cluster specified
315232
func (c *Client) GetLKEClusterKubeconfig(ctx context.Context, clusterID int) (*LKEClusterKubeconfig, error) {
316-
e := fmt.Sprintf("lke/clusters/%d/kubeconfig", clusterID)
317-
req := c.R(ctx).SetResult(&LKEClusterKubeconfig{})
318-
r, err := coupleAPIErrors(req.Get(e))
233+
e := formatAPIPath("lke/clusters/%d/kubeconfig", clusterID)
234+
response, err := doGETRequest[LKEClusterKubeconfig](ctx, c, e)
319235
if err != nil {
320236
return nil, err
321237
}
322-
return r.Result().(*LKEClusterKubeconfig), nil
238+
239+
return response, nil
323240
}
324241

325242
// GetLKEClusterDashboard gets information about the dashboard for an LKE cluster
326243
func (c *Client) GetLKEClusterDashboard(ctx context.Context, clusterID int) (*LKEClusterDashboard, error) {
327-
e := fmt.Sprintf("lke/clusters/%d/dashboard", clusterID)
328-
req := c.R(ctx).SetResult(&LKEClusterDashboard{})
329-
r, err := coupleAPIErrors(req.Get(e))
244+
e := formatAPIPath("lke/clusters/%d/dashboard", clusterID)
245+
response, err := doGETRequest[LKEClusterDashboard](ctx, c, e)
330246
if err != nil {
331247
return nil, err
332248
}
333-
return r.Result().(*LKEClusterDashboard), nil
249+
250+
return response, nil
334251
}
335252

336253
// RecycleLKEClusterNodes recycles all nodes in all pools of the specified LKE Cluster.
337254
func (c *Client) RecycleLKEClusterNodes(ctx context.Context, clusterID int) error {
338-
e := fmt.Sprintf("lke/clusters/%d/recycle", clusterID)
339-
_, err := coupleAPIErrors(c.R(ctx).Post(e))
255+
e := formatAPIPath("lke/clusters/%d/recycle", clusterID)
256+
_, err := doPOSTRequest[LKECluster, any](ctx, c, e)
340257
return err
341258
}
342259

343260
// RegenerateLKECluster regenerates the Kubeconfig file and/or the service account token for the specified LKE Cluster.
344261
func (c *Client) RegenerateLKECluster(ctx context.Context, clusterID int, opts LKEClusterRegenerateOptions) (*LKECluster, error) {
345-
body, err := json.Marshal(opts)
262+
e := formatAPIPath("lke/clusters/%d/regenerate", clusterID)
263+
response, err := doPOSTRequest[LKECluster](ctx, c, e, opts)
346264
if err != nil {
347265
return nil, err
348266
}
349267

350-
e := fmt.Sprintf("lke/clusters/%d/regenerate", clusterID)
351-
req := c.R(ctx).SetResult(&LKECluster{}).SetBody(string(body))
352-
r, err := coupleAPIErrors(req.Post(e))
353-
if err != nil {
354-
return nil, err
355-
}
356-
return r.Result().(*LKECluster), nil
268+
return response, nil
357269
}
358270

359271
// DeleteLKEClusterServiceToken deletes and regenerate the service account token for a Cluster.
360272
func (c *Client) DeleteLKEClusterServiceToken(ctx context.Context, clusterID int) error {
361-
e := fmt.Sprintf("lke/clusters/%d/servicetoken", clusterID)
362-
_, err := coupleAPIErrors(c.R(ctx).Delete(e))
273+
e := formatAPIPath("lke/clusters/%d/servicetoken", clusterID)
274+
err := doDELETERequest(ctx, c, e)
363275
return err
364276
}

0 commit comments

Comments
 (0)