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 }