github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/openstack/dws/v1/cluster/RestartCluster.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 RestartClusterOpts struct {
    12  	ClusterId string `json:"-"`
    13  	// Restart flag.
    14  	Restart interface{} `json:"restart" required:"true"`
    15  }
    16  
    17  func RestartCluster(client *golangsdk.ServiceClient, opts RestartClusterOpts) (err error) {
    18  	b, err := build.RequestBody(opts, "")
    19  	if err != nil {
    20  		return
    21  	}
    22  
    23  	// POST /v1.0/{project_id}/clusters/{cluster_id}/restart
    24  	_, err = client.Post(client.ServiceURL("clusters", opts.ClusterId, "restart"), b, nil, &golangsdk.RequestOpts{
    25  		OkCodes: []int{200},
    26  	})
    27  	return
    28  }
    29  
    30  func WaitForRestart(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 != "REBOOTING" {
    38  			return true, nil
    39  		}
    40  
    41  		if current.TaskStatus == "REBOOT_FAILURE" {
    42  			return false, fmt.Errorf("cluster Restart failed: " + current.FailedReasons.ErrorMsg)
    43  		}
    44  
    45  		time.Sleep(10 * time.Second)
    46  
    47  		return false, nil
    48  	})
    49  }