kubernetes - add support for surge upgrades (#355)

This commit is contained in:
Varsha Varadarajan 2020-07-16 15:28:55 -07:00 committed by GitHub
parent c46bc28841
commit d36624db38
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 13 deletions

View File

@ -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 {

View File

@ -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)

View File

@ -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"`

View File

@ -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) {