Skip to content

Commit

Permalink
Kubernetes: upgrade support (#217)
Browse files Browse the repository at this point in the history
* vke upgrade support

* missing godoc
  • Loading branch information
ddymko authored Apr 28, 2022
1 parent 09f9aa7 commit e8b1787
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 0 deletions.
39 changes: 39 additions & 0 deletions kubernetes.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ type KubernetesService interface {

GetKubeConfig(ctx context.Context, vkeID string) (*KubeConfig, error)
GetVersions(ctx context.Context) (*Versions, error)

GetUpgrades(ctx context.Context, vkeID string) ([]string, error)
Upgrade(ctx context.Context, vkeID string, body *ClusterUpgradeReq) error
}

// KubernetesHandler handles interaction with the kubernetes methods for the Vultr API
Expand Down Expand Up @@ -138,6 +141,16 @@ type Versions struct {
Versions []string `json:"versions"`
}

// AvailableUpgrades for a given VKE cluster
type availableUpgrades struct {
AvailableUpgrades []string `json:"available_upgrades"`
}

// ClusterUpgradeReq struct for vke upgradse
type ClusterUpgradeReq struct {
UpgradeVersion string `json:"upgrade_version,omitempty"`
}

// CreateCluster will create a Kubernetes cluster.
func (k *KubernetesHandler) CreateCluster(ctx context.Context, createReq *ClusterReq) (*Cluster, error) {
req, err := k.client.NewRequest(ctx, http.MethodPost, vkePath, createReq)
Expand Down Expand Up @@ -348,3 +361,29 @@ func (k *KubernetesHandler) GetVersions(ctx context.Context) (*Versions, error)

return versions, nil
}

// GetUpgrades returns all version a VKE cluster can upgrade to
func (k *KubernetesHandler) GetUpgrades(ctx context.Context, vkeID string) ([]string, error) {
req, err := k.client.NewRequest(ctx, http.MethodGet, fmt.Sprintf("%s/%s/available-upgrades", vkePath, vkeID), nil)
if err != nil {
return nil, err
}

upgrades := new(availableUpgrades)
if err = k.client.DoWithContext(ctx, req, &upgrades); err != nil {
return nil, err
}

return upgrades.AvailableUpgrades, nil
}

// Upgrade beings a VKE cluster upgrade
func (k *KubernetesHandler) Upgrade(ctx context.Context, vkeID string, body *ClusterUpgradeReq) error {

req, err := k.client.NewRequest(ctx, http.MethodPost, fmt.Sprintf("%s/%s/upgrades", vkePath, vkeID), body)
if err != nil {
return err
}

return k.client.DoWithContext(ctx, req, nil)
}
42 changes: 42 additions & 0 deletions kubernetes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -758,3 +758,45 @@ func TestKubernetesHandler_GetVersions(t *testing.T) {
t.Error("Kubernetes.GetVersions returned nil")
}
}

func TestKubernetesHandler_GetUpgrades(t *testing.T) {
setup()
defer teardown()
path := fmt.Sprintf("%s/%s/available-upgrades", vkePath, "1")
mux.HandleFunc(fmt.Sprintf(path), func(writer http.ResponseWriter, request *http.Request) {
response := `{"available_upgrades": ["v1.20.0+1"]}`
fmt.Fprint(writer, response)
})

config, err := client.Kubernetes.GetUpgrades(ctx, "1")
if err != nil {
t.Errorf("Kubernetes.GetVersions returned %+v", err)
}

expected := []string{"v1.20.0+1"}
if !reflect.DeepEqual(config, expected) {
t.Errorf("Kubernetes.GetVersions returned %+v, expected %+v", config, expected)
}

c, can := context.WithTimeout(ctx, 1*time.Microsecond)
defer can()
_, err = client.Kubernetes.GetUpgrades(c, "1")
if err == nil {
t.Error("Kubernetes.GetUpgradeVersions returned nil")
}
}

func TestKubernetesHandler_Upgrade(t *testing.T) {
setup()
defer teardown()

mux.HandleFunc(fmt.Sprintf("%s/%s/upgrades", vkePath, "1"), func(writer http.ResponseWriter, request *http.Request) {
fmt.Fprint(writer)
})

req := &ClusterUpgradeReq{UpgradeVersion: "2"}
err := client.Kubernetes.Upgrade(ctx, "1", req)
if err != nil {
t.Errorf("Kubernetes.StartUpgrade returned %+v", err)
}
}

0 comments on commit e8b1787

Please sign in to comment.