github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/openstack/dws/v1/cluster/ResizeCluster.go (about) 1 package cluster 2 3 import ( 4 "fmt" 5 "time" 6 7 golangsdk "github.com/opentelekomcloud/gophertelekomcloud" 8 "github.com/opentelekomcloud/gophertelekomcloud/internal/build" 9 ) 10 11 type ResizeClusterOpts struct { 12 ClusterId string `json:"-"` 13 // Number of nodes to be added 14 Count int `json:"count" required:"true"` 15 } 16 17 func ResizeCluster(client *golangsdk.ServiceClient, opts ResizeClusterOpts) (err error) { 18 b, err := build.RequestBody(opts, "scale_out") 19 if err != nil { 20 return 21 } 22 23 // POST /v1.0/{project_id}/clusters/{cluster_id}/resize 24 _, err = client.Post(client.ServiceURL("clusters", opts.ClusterId, "resize"), b, nil, &golangsdk.RequestOpts{ 25 OkCodes: []int{200}, 26 }) 27 return 28 } 29 30 func WaitForResize(c *golangsdk.ServiceClient, id string, secs int) error { 31 return golangsdk.WaitFor(secs, func() (bool, error) { 32 current, err := ListClusterDetails(c, id) 33 if err != nil { 34 return false, err 35 } 36 37 if current.Status == "AVAILABLE" && current.TaskStatus != "GROWING" { 38 return true, nil 39 } 40 41 if current.TaskStatus == "RESIZE_FAILURE" { 42 return false, fmt.Errorf("cluster RESIZE failed: " + current.FailedReasons.ErrorMsg) 43 } 44 45 time.Sleep(10 * time.Second) 46 47 return false, nil 48 }) 49 }