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 }