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  }