github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/openstack/rds/v3/instances/job.go (about)

     1  package instances
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  
     7  	"github.com/opentelekomcloud/gophertelekomcloud"
     8  )
     9  
    10  type JobId struct {
    11  	JobId string `json:"job_id"`
    12  }
    13  
    14  func WaitForJobCompleted(client *golangsdk.ServiceClient, secs int, jobID string) error {
    15  	jobClient := *client
    16  	jobClient.ResourceBase = jobClient.Endpoint
    17  
    18  	return golangsdk.WaitFor(secs, func() (bool, error) {
    19  		job := new(golangsdk.RDSJobStatus)
    20  
    21  		requestOpts := &golangsdk.RequestOpts{MoreHeaders: map[string]string{"Content-Type": "application/json"}}
    22  		_, err := jobClient.Get(fmt.Sprintf("%sjobs?id=%s", jobClient.ResourceBase, jobID), job, requestOpts)
    23  		if err != nil {
    24  			return false, err
    25  		}
    26  
    27  		if job.Job.Status == "Completed" {
    28  			return true, nil
    29  		}
    30  		if job.Job.Status == "Failed" {
    31  			err = fmt.Errorf("Job failed %s.\n", job.Job.Status)
    32  			return false, err
    33  		}
    34  
    35  		time.Sleep(10 * time.Second)
    36  		return false, nil
    37  	})
    38  }
    39  
    40  func WaitForStateAvailable(client *golangsdk.ServiceClient, secs int, instanceID string) error {
    41  	jobClient := *client
    42  	jobClient.ResourceBase = jobClient.Endpoint
    43  
    44  	return golangsdk.WaitFor(secs, func() (bool, error) {
    45  		job := new(golangsdk.JsonRDSInstanceStatus)
    46  
    47  		requestOpts := &golangsdk.RequestOpts{MoreHeaders: map[string]string{"Content-Type": "application/json"}}
    48  		_, err := jobClient.Get(fmt.Sprintf("%sinstances?id=%s", jobClient.ResourceBase, instanceID), job, requestOpts)
    49  		if err != nil {
    50  			return false, err
    51  		}
    52  
    53  		if job.Instances[0].Status == "ACTIVE" {
    54  			return true, nil
    55  		}
    56  		if job.Instances[0].Status == "FAILED" {
    57  			err = fmt.Errorf("Job failed %s.\n", job.Instances[0].Status)
    58  			return false, err
    59  		}
    60  
    61  		return false, nil
    62  	})
    63  }