github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/openstack/css/v1/clusters/util.go (about) 1 package clusters 2 3 import ( 4 "fmt" 5 "log" 6 "time" 7 8 golangsdk "github.com/opentelekomcloud/gophertelekomcloud" 9 ) 10 11 func WaitForClusterOperationSucces(client *golangsdk.ServiceClient, id string, timeout int) error { 12 return golangsdk.WaitFor(timeout, func() (bool, error) { 13 cluster, err := Get(client, id) 14 if err != nil { 15 if _, ok := err.(golangsdk.BaseError); ok { 16 return true, err 17 } 18 log.Printf("Error waiting for CSS cluster: %s", err) // ignore connection-related errors 19 return false, nil 20 } 21 22 switch s := cluster.Status; s { 23 case "100": 24 time.Sleep(30 * time.Second) // make a bigger wait if it's not ready 25 return false, nil 26 case "200": 27 return true, nil 28 case "303": 29 return true, fmt.Errorf("cluster operartion failed: %+v", cluster.FailedReasons) 30 default: 31 return true, fmt.Errorf("invalid status: %s", s) 32 } 33 }) 34 } 35 36 func WaitForClusterToExtend(client *golangsdk.ServiceClient, id string, timeout int) error { 37 return golangsdk.WaitFor(timeout, func() (bool, error) { 38 cluster, err := Get(client, id) 39 if err != nil { 40 if _, ok := err.(golangsdk.BaseError); ok { 41 return true, err 42 } 43 log.Printf("Error waiting for CSS cluster to extend: %s", err) // ignore connection-related errors 44 return false, nil 45 } 46 // No active action 47 if len(cluster.Actions) == 0 { 48 return true, nil 49 } 50 if cluster.Actions[0] == "GROWING" || cluster.Actions[0] == "RESIZING_VOLUME" { 51 time.Sleep(30 * time.Second) // make a bigger wait if it's not ready 52 return false, nil 53 } 54 return false, fmt.Errorf("unexpected cluster actions: %v; progress: %v", cluster.Actions, cluster.ActionProgress) 55 }) 56 }