From ae346033cfa950e84ac84e691452be585329265c Mon Sep 17 00:00:00 2001 From: Zhenguo Niu Date: Fri, 6 Sep 2019 15:46:29 +0800 Subject: [PATCH 1/2] RDS v3 backup policy support --- openstack/rds/v3/backups/requests.go | 43 ++++++++++++++++++++++++++++ openstack/rds/v3/backups/results.go | 10 +++++++ openstack/rds/v3/backups/urls.go | 7 +++++ 3 files changed, 60 insertions(+) create mode 100644 openstack/rds/v3/backups/requests.go create mode 100644 openstack/rds/v3/backups/results.go create mode 100644 openstack/rds/v3/backups/urls.go diff --git a/openstack/rds/v3/backups/requests.go b/openstack/rds/v3/backups/requests.go new file mode 100644 index 000000000..4883fc486 --- /dev/null +++ b/openstack/rds/v3/backups/requests.go @@ -0,0 +1,43 @@ +package backups + +import ( + "github.com/huaweicloud/golangsdk" +) + +var RequestOpts golangsdk.RequestOpts = golangsdk.RequestOpts{ + MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, +} + +// UpdateOptsBuilder allows extensions to add additional parameters to the +// Update request. +type UpdateOptsBuilder interface { + ToBackupUpdateMap() (map[string]interface{}, error) +} + +// UpdateOpts contains all the values needed to update a Backup. +type UpdateOpts struct { + //Keep Days + KeepDays int `json:"keep_days" required:"true"` + //Start Time + StartTime string `json:"start_time,omitempty"` + //Period + Period string `json:"period,omitempty"` +} + +// ToBackupUpdateMap builds a update request body from UpdateOpts. +func (opts UpdateOpts) ToBackupUpdateMap() (map[string]interface{}, error) { + return golangsdk.BuildRequestBody(opts, "backup_policy") +} + +// Update accepts a UpdateOpts struct and uses the values to update a Backup.The response code from api is 200 +func Update(c *golangsdk.ServiceClient, id string, opts UpdateOptsBuilder) (r UpdateResult) { + b, err := opts.ToBackupUpdateMap() + if err != nil { + r.Err = err + return + } + reqOpt := &golangsdk.RequestOpts{OkCodes: []int{200}, + MoreHeaders: RequestOpts.MoreHeaders} + _, r.Err = c.Put(resourceURL(c, id), b, nil, reqOpt) + return +} diff --git a/openstack/rds/v3/backups/results.go b/openstack/rds/v3/backups/results.go new file mode 100644 index 000000000..1e9382f8a --- /dev/null +++ b/openstack/rds/v3/backups/results.go @@ -0,0 +1,10 @@ +package backups + +import ( + "github.com/huaweicloud/golangsdk" +) + +// UpdateResult represents the result of a update operation. +type UpdateResult struct { + golangsdk.ErrResult +} diff --git a/openstack/rds/v3/backups/urls.go b/openstack/rds/v3/backups/urls.go new file mode 100644 index 000000000..bed6f5912 --- /dev/null +++ b/openstack/rds/v3/backups/urls.go @@ -0,0 +1,7 @@ +package backups + +import "github.com/huaweicloud/golangsdk" + +func resourceURL(c *golangsdk.ServiceClient, id string) string { + return c.ServiceURL("instances", id, "backups/policy") +} From 79435e1dfc08b4e2e7a1d4472bf1ea32e7e49800 Mon Sep 17 00:00:00 2001 From: Zhenguo Niu Date: Fri, 6 Sep 2019 17:33:30 +0800 Subject: [PATCH 2/2] Update requests.go --- openstack/rds/v3/backups/requests.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openstack/rds/v3/backups/requests.go b/openstack/rds/v3/backups/requests.go index 4883fc486..bf37ea7b0 100644 --- a/openstack/rds/v3/backups/requests.go +++ b/openstack/rds/v3/backups/requests.go @@ -17,7 +17,7 @@ type UpdateOptsBuilder interface { // UpdateOpts contains all the values needed to update a Backup. type UpdateOpts struct { //Keep Days - KeepDays int `json:"keep_days" required:"true"` + KeepDays *int `json:"keep_days" required:"true"` //Start Time StartTime string `json:"start_time,omitempty"` //Period