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  }