Skip to content

Commit 3ba4bb7

Browse files
authored
feat(k8s): method to change cluster type (#1593)
1 parent 8df14b1 commit 3ba4bb7

File tree

1 file changed

+49
-1
lines changed

1 file changed

+49
-1
lines changed

api/k8s/v1/k8s_sdk.go

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1304,7 +1304,7 @@ type UpgradeClusterRequest struct {
13041304
// New Kubernetes version of the cluster. Note that the version shoud either be a higher patch version of the same minor version or the direct minor version after the current one.
13051305
Version string `json:"version"`
13061306
// UpgradePools: enablement of the pools upgrade.
1307-
// This field makes the upgrade upgrades the pool once the Kubernetes master in upgrade.
1307+
// This field also trigger pools upgrade once the control plane is upgraded.
13081308
UpgradePools bool `json:"upgrade_pools"`
13091309
}
13101310

@@ -1346,6 +1346,54 @@ func (s *API) UpgradeCluster(req *UpgradeClusterRequest, opts ...scw.RequestOpti
13461346
return &resp, nil
13471347
}
13481348

1349+
type SetClusterTypeRequest struct {
1350+
// Region: region to target. If none is passed will use default region from the config.
1351+
Region scw.Region `json:"-"`
1352+
// ClusterID: ID of the cluster to migrate from one type to another.
1353+
ClusterID string `json:"-"`
1354+
// Type: type of the cluster.
1355+
// Type of the cluster. Note that some migrations are not possible (please refer to product documentation).
1356+
Type string `json:"type"`
1357+
}
1358+
1359+
// SetClusterType: change type of a cluster.
1360+
// Change type of a specific Kubernetes cluster.
1361+
func (s *API) SetClusterType(req *SetClusterTypeRequest, opts ...scw.RequestOption) (*Cluster, error) {
1362+
var err error
1363+
1364+
if req.Region == "" {
1365+
defaultRegion, _ := s.client.GetDefaultRegion()
1366+
req.Region = defaultRegion
1367+
}
1368+
1369+
if fmt.Sprint(req.Region) == "" {
1370+
return nil, errors.New("field Region cannot be empty in request")
1371+
}
1372+
1373+
if fmt.Sprint(req.ClusterID) == "" {
1374+
return nil, errors.New("field ClusterID cannot be empty in request")
1375+
}
1376+
1377+
scwReq := &scw.ScalewayRequest{
1378+
Method: "POST",
1379+
Path: "/k8s/v1/regions/" + fmt.Sprint(req.Region) + "/clusters/" + fmt.Sprint(req.ClusterID) + "/set-type",
1380+
Headers: http.Header{},
1381+
}
1382+
1383+
err = scwReq.SetBody(req)
1384+
if err != nil {
1385+
return nil, err
1386+
}
1387+
1388+
var resp Cluster
1389+
1390+
err = s.client.Do(scwReq, &resp, opts...)
1391+
if err != nil {
1392+
return nil, err
1393+
}
1394+
return &resp, nil
1395+
}
1396+
13491397
type ListClusterAvailableVersionsRequest struct {
13501398
// Region: region to target. If none is passed will use default region from the config.
13511399
Region scw.Region `json:"-"`

0 commit comments

Comments
 (0)