kubernetes - add support for surge upgrades (#355)
This commit is contained in:
parent
c46bc28841
commit
d36624db38
|
@ -13,7 +13,7 @@ const oneClickBasePath = "v2/1-clicks"
|
||||||
// See: https://developers.digitalocean.com/documentation/v2/#1-click-applications
|
// See: https://developers.digitalocean.com/documentation/v2/#1-click-applications
|
||||||
type OneClickService interface {
|
type OneClickService interface {
|
||||||
List(context.Context, string) ([]*OneClick, *Response, error)
|
List(context.Context, string) ([]*OneClick, *Response, error)
|
||||||
InstallKubernetes(context.Context, *InstallKubernetesAppsRequest)(*InstallKubernetesAppsResponse, *Response, error)
|
InstallKubernetes(context.Context, *InstallKubernetesAppsRequest) (*InstallKubernetesAppsResponse, *Response, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ OneClickService = &OneClickServiceOp{}
|
var _ OneClickService = &OneClickServiceOp{}
|
||||||
|
@ -42,7 +42,7 @@ type InstallKubernetesAppsRequest struct {
|
||||||
|
|
||||||
// InstallKubernetesAppsResponse is the response of a kubernetes 1-click install request
|
// InstallKubernetesAppsResponse is the response of a kubernetes 1-click install request
|
||||||
type InstallKubernetesAppsResponse struct {
|
type InstallKubernetesAppsResponse struct {
|
||||||
Message string `json:"message"`
|
Message string `json:"message"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// List returns a list of the available 1-click applications.
|
// List returns a list of the available 1-click applications.
|
||||||
|
@ -64,8 +64,8 @@ func (ocs *OneClickServiceOp) List(ctx context.Context, oneClickType string) ([]
|
||||||
}
|
}
|
||||||
|
|
||||||
// InstallKubernetes installs an addon on a kubernetes cluster
|
// InstallKubernetes installs an addon on a kubernetes cluster
|
||||||
func (ocs *OneClickServiceOp) InstallKubernetes(ctx context.Context, install *InstallKubernetesAppsRequest ) (*InstallKubernetesAppsResponse, *Response, error) {
|
func (ocs *OneClickServiceOp) InstallKubernetes(ctx context.Context, install *InstallKubernetesAppsRequest) (*InstallKubernetesAppsResponse, *Response, error) {
|
||||||
path := fmt.Sprintf(oneClickBasePath+"/kubernetes")
|
path := fmt.Sprintf(oneClickBasePath + "/kubernetes")
|
||||||
|
|
||||||
req, err := ocs.client.NewRequest(ctx, http.MethodPost, path, install)
|
req, err := ocs.client.NewRequest(ctx, http.MethodPost, path, install)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -32,7 +32,7 @@ var testMessageJSON = `
|
||||||
|
|
||||||
var kubernetesPayload = &InstallKubernetesAppsRequest{
|
var kubernetesPayload = &InstallKubernetesAppsRequest{
|
||||||
ClusterUUID: "123",
|
ClusterUUID: "123",
|
||||||
Slugs: []string{"slug1", "slug2"},
|
Slugs: []string{"slug1", "slug2"},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestOneClick_List(t *testing.T) {
|
func TestOneClick_List(t *testing.T) {
|
||||||
|
@ -62,7 +62,6 @@ func TestOneClick_List(t *testing.T) {
|
||||||
assert.Equal(t, want, got)
|
assert.Equal(t, want, got)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func TestOneClick_InstallKubernetes(t *testing.T) {
|
func TestOneClick_InstallKubernetes(t *testing.T) {
|
||||||
setup()
|
setup()
|
||||||
defer teardown()
|
defer teardown()
|
||||||
|
@ -70,7 +69,6 @@ func TestOneClick_InstallKubernetes(t *testing.T) {
|
||||||
svc := client.OneClick
|
svc := client.OneClick
|
||||||
path := "/v2/1-clicks/kubernetes"
|
path := "/v2/1-clicks/kubernetes"
|
||||||
|
|
||||||
|
|
||||||
mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
|
mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
|
||||||
testMethod(t, r, http.MethodPost)
|
testMethod(t, r, http.MethodPost)
|
||||||
fmt.Fprint(w, testMessageJSON)
|
fmt.Fprint(w, testMessageJSON)
|
||||||
|
|
|
@ -66,6 +66,7 @@ type KubernetesClusterCreateRequest struct {
|
||||||
|
|
||||||
MaintenancePolicy *KubernetesMaintenancePolicy `json:"maintenance_policy"`
|
MaintenancePolicy *KubernetesMaintenancePolicy `json:"maintenance_policy"`
|
||||||
AutoUpgrade bool `json:"auto_upgrade"`
|
AutoUpgrade bool `json:"auto_upgrade"`
|
||||||
|
SurgeUpgrade bool `json:"surge_upgrade"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// KubernetesClusterUpdateRequest represents a request to update a Kubernetes cluster.
|
// KubernetesClusterUpdateRequest represents a request to update a Kubernetes cluster.
|
||||||
|
@ -74,6 +75,7 @@ type KubernetesClusterUpdateRequest struct {
|
||||||
Tags []string `json:"tags,omitempty"`
|
Tags []string `json:"tags,omitempty"`
|
||||||
MaintenancePolicy *KubernetesMaintenancePolicy `json:"maintenance_policy,omitempty"`
|
MaintenancePolicy *KubernetesMaintenancePolicy `json:"maintenance_policy,omitempty"`
|
||||||
AutoUpgrade *bool `json:"auto_upgrade,omitempty"`
|
AutoUpgrade *bool `json:"auto_upgrade,omitempty"`
|
||||||
|
SurgeUpgrade bool `json:"surge_upgrade,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// KubernetesClusterUpgradeRequest represents a request to upgrade a Kubernetes cluster.
|
// KubernetesClusterUpgradeRequest represents a request to upgrade a Kubernetes cluster.
|
||||||
|
@ -143,6 +145,7 @@ type KubernetesCluster struct {
|
||||||
|
|
||||||
MaintenancePolicy *KubernetesMaintenancePolicy `json:"maintenance_policy,omitempty"`
|
MaintenancePolicy *KubernetesMaintenancePolicy `json:"maintenance_policy,omitempty"`
|
||||||
AutoUpgrade bool `json:"auto_upgrade,omitempty"`
|
AutoUpgrade bool `json:"auto_upgrade,omitempty"`
|
||||||
|
SurgeUpgrade bool `json:"surge_upgrade,omitempty"`
|
||||||
|
|
||||||
Status *KubernetesClusterStatus `json:"status,omitempty"`
|
Status *KubernetesClusterStatus `json:"status,omitempty"`
|
||||||
CreatedAt time.Time `json:"created_at,omitempty"`
|
CreatedAt time.Time `json:"created_at,omitempty"`
|
||||||
|
|
|
@ -522,6 +522,7 @@ func TestKubernetesClusters_Create(t *testing.T) {
|
||||||
ServiceSubnet: "10.245.0.0/16",
|
ServiceSubnet: "10.245.0.0/16",
|
||||||
Tags: []string{"cluster-tag-1", "cluster-tag-2"},
|
Tags: []string{"cluster-tag-1", "cluster-tag-2"},
|
||||||
VPCUUID: "880b7f98-f062-404d-b33c-458d545696f6",
|
VPCUUID: "880b7f98-f062-404d-b33c-458d545696f6",
|
||||||
|
SurgeUpgrade: true,
|
||||||
NodePools: []*KubernetesNodePool{
|
NodePools: []*KubernetesNodePool{
|
||||||
&KubernetesNodePool{
|
&KubernetesNodePool{
|
||||||
ID: "8d91899c-0739-4a1a-acc5-deadbeefbb8a",
|
ID: "8d91899c-0739-4a1a-acc5-deadbeefbb8a",
|
||||||
|
@ -538,11 +539,12 @@ func TestKubernetesClusters_Create(t *testing.T) {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
createRequest := &KubernetesClusterCreateRequest{
|
createRequest := &KubernetesClusterCreateRequest{
|
||||||
Name: want.Name,
|
Name: want.Name,
|
||||||
RegionSlug: want.RegionSlug,
|
RegionSlug: want.RegionSlug,
|
||||||
VersionSlug: want.VersionSlug,
|
VersionSlug: want.VersionSlug,
|
||||||
Tags: want.Tags,
|
Tags: want.Tags,
|
||||||
VPCUUID: want.VPCUUID,
|
VPCUUID: want.VPCUUID,
|
||||||
|
SurgeUpgrade: true,
|
||||||
NodePools: []*KubernetesNodePoolCreateRequest{
|
NodePools: []*KubernetesNodePoolCreateRequest{
|
||||||
&KubernetesNodePoolCreateRequest{
|
&KubernetesNodePoolCreateRequest{
|
||||||
Size: want.NodePools[0].Size,
|
Size: want.NodePools[0].Size,
|
||||||
|
@ -572,6 +574,7 @@ func TestKubernetesClusters_Create(t *testing.T) {
|
||||||
"cluster-tag-2"
|
"cluster-tag-2"
|
||||||
],
|
],
|
||||||
"vpc_uuid": "880b7f98-f062-404d-b33c-458d545696f6",
|
"vpc_uuid": "880b7f98-f062-404d-b33c-458d545696f6",
|
||||||
|
"surge_upgrade": true,
|
||||||
"node_pools": [
|
"node_pools": [
|
||||||
{
|
{
|
||||||
"id": "8d91899c-0739-4a1a-acc5-deadbeefbb8a",
|
"id": "8d91899c-0739-4a1a-acc5-deadbeefbb8a",
|
||||||
|
@ -729,6 +732,7 @@ func TestKubernetesClusters_Update(t *testing.T) {
|
||||||
ServiceSubnet: "10.245.0.0/16",
|
ServiceSubnet: "10.245.0.0/16",
|
||||||
Tags: []string{"cluster-tag-1", "cluster-tag-2"},
|
Tags: []string{"cluster-tag-1", "cluster-tag-2"},
|
||||||
VPCUUID: "880b7f98-f062-404d-b33c-458d545696f6",
|
VPCUUID: "880b7f98-f062-404d-b33c-458d545696f6",
|
||||||
|
SurgeUpgrade: true,
|
||||||
NodePools: []*KubernetesNodePool{
|
NodePools: []*KubernetesNodePool{
|
||||||
&KubernetesNodePool{
|
&KubernetesNodePool{
|
||||||
ID: "8d91899c-0739-4a1a-acc5-deadbeefbb8a",
|
ID: "8d91899c-0739-4a1a-acc5-deadbeefbb8a",
|
||||||
|
@ -750,6 +754,7 @@ func TestKubernetesClusters_Update(t *testing.T) {
|
||||||
Name: want.Name,
|
Name: want.Name,
|
||||||
Tags: want.Tags,
|
Tags: want.Tags,
|
||||||
MaintenancePolicy: want.MaintenancePolicy,
|
MaintenancePolicy: want.MaintenancePolicy,
|
||||||
|
SurgeUpgrade: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
jBlob := `
|
jBlob := `
|
||||||
|
@ -766,6 +771,7 @@ func TestKubernetesClusters_Update(t *testing.T) {
|
||||||
"cluster-tag-2"
|
"cluster-tag-2"
|
||||||
],
|
],
|
||||||
"vpc_uuid": "880b7f98-f062-404d-b33c-458d545696f6",
|
"vpc_uuid": "880b7f98-f062-404d-b33c-458d545696f6",
|
||||||
|
"surge_upgrade": true,
|
||||||
"node_pools": [
|
"node_pools": [
|
||||||
{
|
{
|
||||||
"id": "8d91899c-0739-4a1a-acc5-deadbeefbb8a",
|
"id": "8d91899c-0739-4a1a-acc5-deadbeefbb8a",
|
||||||
|
@ -787,7 +793,7 @@ func TestKubernetesClusters_Update(t *testing.T) {
|
||||||
}
|
}
|
||||||
}`
|
}`
|
||||||
|
|
||||||
expectedReqJSON := `{"name":"antoine-test-cluster","tags":["cluster-tag-1","cluster-tag-2"],"maintenance_policy":{"start_time":"00:00","duration":"","day":"monday"}}
|
expectedReqJSON := `{"name":"antoine-test-cluster","tags":["cluster-tag-1","cluster-tag-2"],"maintenance_policy":{"start_time":"00:00","duration":"","day":"monday"},"surge_upgrade":true}
|
||||||
`
|
`
|
||||||
|
|
||||||
mux.HandleFunc("/v2/kubernetes/clusters/8d91899c-0739-4a1a-acc5-deadbeefbb8f", func(w http.ResponseWriter, r *http.Request) {
|
mux.HandleFunc("/v2/kubernetes/clusters/8d91899c-0739-4a1a-acc5-deadbeefbb8f", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
Loading…
Reference in New Issue