diff --git a/openstack/rds/v3/instances/requests.go b/openstack/rds/v3/instances/requests.go index ca6cc025..5bed94a3 100644 --- a/openstack/rds/v3/instances/requests.go +++ b/openstack/rds/v3/instances/requests.go @@ -423,3 +423,35 @@ func ListSlowLog(client *golangsdk.ServiceClient, opts DbSlowLogBuilder, instanc pageRdsList.Headers = rdsheader return pageRdsList } + +type RDSJobOpts struct { + JobID string `q:"id"` +} + +type RDSJobBuilder interface { + ToRDSJobQuery() (string, error) +} + +func (opts RDSJobOpts) ToRDSJobQuery() (string, error) { + q, err := golangsdk.BuildQueryString(opts) + if err != nil { + return "", err + } + return q.String(), err +} + +func GetRDSJob(client *golangsdk.ServiceClient, opts RDSJobBuilder) (r RDSJobResult) { + url := jobURL(client) + if opts != nil { + query, err := opts.ToRDSJobQuery() + if err != nil { + r.Err = err + return + } + url += query + } + _, r.Err = client.Get(url, &r.Body, &golangsdk.RequestOpts{ + MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, + }) + return +} diff --git a/openstack/rds/v3/instances/results.go b/openstack/rds/v3/instances/results.go index 1159dda1..447da887 100644 --- a/openstack/rds/v3/instances/results.go +++ b/openstack/rds/v3/instances/results.go @@ -262,3 +262,27 @@ func ExtractSlowLog(r pagination.Page) (SlowLogResp, error) { err := (r.(SlowLogPage)).ExtractInto(&s) return s, err } + +type RDSJobResult struct { + commonResult +} + +type ListJob struct { + Job Job `json:"job"` +} + +type Job struct { + ID string `json:"id"` + Name string `json:"name"` + Status string `json:"status"` + Created string `json:"created"` + Ended string `json:"ended"` + Process string `json:"process"` + FailReason string `json:"fail_reason"` +} + +func (r RDSJobResult) Extract() (ListJob, error) { + var s ListJob + err := r.ExtractInto(&s) + return s, err +} diff --git a/openstack/rds/v3/instances/urls.go b/openstack/rds/v3/instances/urls.go index f929d913..d4143019 100644 --- a/openstack/rds/v3/instances/urls.go +++ b/openstack/rds/v3/instances/urls.go @@ -17,3 +17,7 @@ func listURL(c *golangsdk.ServiceClient) string { func updateURL(c *golangsdk.ServiceClient, instancesId string, updata string) string { return c.ServiceURL("instances", instancesId, updata) } + +func jobURL(c *golangsdk.ServiceClient) string { + return c.ServiceURL("jobs") +}