@@ -3,11 +3,8 @@ package linodego
33import (
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.
158134func (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.
181157func (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
224176func (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
255186func (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
265192func (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
276203func (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
292214func (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
308225func (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
315232func (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
326243func (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.
337254func (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.
344261func (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.
360272func (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