diff --git a/openstack/rds/v3/instances/requests.go b/openstack/rds/v3/instances/requests.go index 5bed94a3..49ecce5a 100644 --- a/openstack/rds/v3/instances/requests.go +++ b/openstack/rds/v3/instances/requests.go @@ -1,13 +1,11 @@ package instances import ( - "fmt" - "github.com/huaweicloud/golangsdk" "github.com/huaweicloud/golangsdk/pagination" ) -type CreateRdsOpts struct { +type CreateOpts struct { Name string `json:"name" required:"true"` Datastore *Datastore `json:"datastore" required:"true"` Ha *Ha `json:"ha,omitempty"` @@ -73,7 +71,7 @@ type CreateRdsBuilder interface { ToInstancesCreateMap() (map[string]interface{}, error) } -func (opts CreateRdsOpts) ToInstancesCreateMap() (map[string]interface{}, error) { +func (opts CreateOpts) ToInstancesCreateMap() (map[string]interface{}, error) { b, err := golangsdk.BuildRequestBody(opts, "") if err != nil { return nil, err @@ -89,16 +87,12 @@ func Create(client *golangsdk.ServiceClient, opts CreateRdsBuilder) (r CreateRes } _, r.Err = client.Post(createURL(client), b, &r.Body, &golangsdk.RequestOpts{ - OkCodes: []int{202}, + OkCodes: []int{200, 202}, }) return } -type CreateReplicaBuilder interface { - ToCreateReplicaMap() (map[string]interface{}, error) -} - -func (opts CreateReplicaOpts) ToCreateReplicaMap() (map[string]interface{}, error) { +func (opts CreateReplicaOpts) ToInstancesCreateMap() (map[string]interface{}, error) { b, err := golangsdk.BuildRequestBody(opts, "") if err != nil { return nil, err @@ -106,8 +100,8 @@ func (opts CreateReplicaOpts) ToCreateReplicaMap() (map[string]interface{}, erro return b, nil } -func CreateReplica(client *golangsdk.ServiceClient, opts CreateReplicaBuilder) (r CreateResult) { - b, err := opts.ToCreateReplicaMap() +func CreateReplica(client *golangsdk.ServiceClient, opts CreateRdsBuilder) (r CreateResult) { + b, err := opts.ToInstancesCreateMap() if err != nil { r.Err = err return @@ -120,7 +114,7 @@ func CreateReplica(client *golangsdk.ServiceClient, opts CreateReplicaBuilder) ( return } -type DeleteInstance struct { +type DeleteOpts struct { InstanceId string `json:"instance_id" required:"true"` } @@ -128,7 +122,7 @@ type DeleteInstanceBuilder interface { ToInstancesDeleteMap() (map[string]interface{}, error) } -func (opts DeleteInstance) ToInstancesDeleteMap() (map[string]interface{}, error) { +func (opts DeleteOpts) ToInstancesDeleteMap() (map[string]interface{}, error) { b, err := golangsdk.BuildRequestBody(&opts, "") if err != nil { return nil, err @@ -136,72 +130,18 @@ func (opts DeleteInstance) ToInstancesDeleteMap() (map[string]interface{}, error return b, nil } -func Delete(client *golangsdk.ServiceClient, instanceId string) (r DeleteInstanceRdsResult) { +func Delete(client *golangsdk.ServiceClient, instanceId string) (r DeleteResult) { url := deleteURL(client, instanceId) - _, r.Err = client.Delete(url, &golangsdk.RequestOpts{JSONResponse: &r.Body, MoreHeaders: map[string]string{"Content-Type": "application/json"}}) - return -} - -type RestartRdsInstanceOpts struct { - Restart string `json:"restart" required:"true"` -} - -type RestartRdsInstanceBuilder interface { - ToRestartRdsInstanceMap() (map[string]interface{}, error) -} - -func (opts RestartRdsInstanceOpts) ToRestartRdsInstanceMap() (map[string]interface{}, error) { - b, err := golangsdk.BuildRequestBody(&opts, "") - if err != nil { - return nil, err - } - return b, nil -} - -func Restart(client *golangsdk.ServiceClient, opts RestartRdsInstanceBuilder, instanceId string) (r RestartRdsInstanceResult) { - b, err := opts.ToRestartRdsInstanceMap() - if err != nil { - r.Err = err - return - } - fmt.Println("restart Rds instance body = ", b) - _, r.Err = client.Post(updateURL(client, instanceId, "action"), b, &r.Body, &golangsdk.RequestOpts{ - OkCodes: []int{202}, + _, r.Err = client.Delete(url, &golangsdk.RequestOpts{ + JSONResponse: &r.Body, + MoreHeaders: map[string]string{"Content-Type": "application/json"}, }) return } -type RenameRdsInstanceOpts struct { - Name string `json:"name" required:"true"` -} - -type RenameRdsInstanceBuilder interface { - ToRenameRdsInstanceMap() (map[string]interface{}, error) -} - -func (opts RenameRdsInstanceOpts) ToRenameRdsInstanceMap() (map[string]interface{}, error) { - b, err := golangsdk.BuildRequestBody(&opts, "") - if err != nil { - return nil, err - } - return b, nil -} - -func Rename(client *golangsdk.ServiceClient, opts RenameRdsInstanceBuilder, instanceId string) (r RenameResult) { - b, err := opts.ToRenameRdsInstanceMap() - if err != nil { - r.Err = err - return - } - _, r.Err = client.Put(updateURL(client, instanceId, "name"), b, nil, &golangsdk.RequestOpts{ - OkCodes: []int{200, 202}, - }) - return -} - -type ListRdsInstanceOpts struct { +type ListOpts struct { Id string `q:"id"` Name string `q:"name"` Type string `q:"type"` @@ -216,7 +156,7 @@ type ListRdsBuilder interface { ToRdsListDetailQuery() (string, error) } -func (opts ListRdsInstanceOpts) ToRdsListDetailQuery() (string, error) { +func (opts ListOpts) ToRdsListDetailQuery() (string, error) { q, err := golangsdk.BuildQueryString(opts) if err != nil { return "", err @@ -244,6 +184,59 @@ func List(client *golangsdk.ServiceClient, opts ListRdsBuilder) pagination.Pager return pageRdsList } +type ActionInstanceBuilder interface { + ToActionInstanceMap() (map[string]interface{}, error) +} + +func toActionInstanceMap(opts ActionInstanceBuilder) (map[string]interface{}, error) { + b, err := golangsdk.BuildRequestBody(opts, "") + if err != nil { + return nil, err + } + return b, nil +} + +type RestartInstanceOpts struct { + Restart string `json:"restart" required:"true"` +} + +func (opts RestartInstanceOpts) ToActionInstanceMap() (map[string]interface{}, error) { + return toActionInstanceMap(opts) +} + +func Restart(client *golangsdk.ServiceClient, opts ActionInstanceBuilder, instanceId string) (r RestartResult) { + b, err := opts.ToActionInstanceMap() + if err != nil { + r.Err = err + return + } + + _, r.Err = client.Post(updateURL(client, instanceId, "action"), b, &r.Body, &golangsdk.RequestOpts{ + OkCodes: []int{202}, + }) + return +} + +type RenameInstanceOpts struct { + Name string `json:"name" required:"true"` +} + +func (opts RenameInstanceOpts) ToActionInstanceMap() (map[string]interface{}, error) { + return toActionInstanceMap(opts) +} + +func Rename(client *golangsdk.ServiceClient, opts ActionInstanceBuilder, instanceId string) (r RenameResult) { + b, err := opts.ToActionInstanceMap() + if err != nil { + r.Err = err + return + } + _, r.Err = client.Put(updateURL(client, instanceId, "name"), b, nil, &golangsdk.RequestOpts{ + OkCodes: []int{200, 202}, + }) + return +} + type SingleToHaRdsOpts struct { SingleToHa *SingleToHaRds `json:"single_to_ha" required:"true"` } @@ -253,20 +246,12 @@ type SingleToHaRds struct { Password string `json:"password,omitempty"` } -type SingleToRdsHaBuilder interface { - ToSingleToRdsHaMap() (map[string]interface{}, error) -} - -func (opts SingleToHaRdsOpts) ToSingleToRdsHaMap() (map[string]interface{}, error) { - b, err := golangsdk.BuildRequestBody(&opts, "") - if err != nil { - return nil, err - } - return b, nil +func (opts SingleToHaRdsOpts) ToActionInstanceMap() (map[string]interface{}, error) { + return toActionInstanceMap(opts) } -func SingleToHa(client *golangsdk.ServiceClient, opts SingleToRdsHaBuilder, instanceId string) (r SingleToHaRdsInstanceResult) { - b, err := opts.ToSingleToRdsHaMap() +func SingleToHa(client *golangsdk.ServiceClient, opts ActionInstanceBuilder, instanceId string) (r SingleToHaResult) { + b, err := opts.ToActionInstanceMap() if err != nil { r.Err = err return @@ -286,20 +271,12 @@ type ResizeFlavorOpts struct { ResizeFlavor *SpecCode `json:"resize_flavor" required:"true"` } -type ResizeFlavorBuilder interface { - ResizeFlavorMap() (map[string]interface{}, error) +func (opts ResizeFlavorOpts) ToActionInstanceMap() (map[string]interface{}, error) { + return toActionInstanceMap(opts) } -func (opts ResizeFlavorOpts) ResizeFlavorMap() (map[string]interface{}, error) { - b, err := golangsdk.BuildRequestBody(&opts, "") - if err != nil { - return nil, err - } - return b, nil -} - -func Resize(client *golangsdk.ServiceClient, opts ResizeFlavorBuilder, instanceId string) (r ResizeFlavorResult) { - b, err := opts.ResizeFlavorMap() +func Resize(client *golangsdk.ServiceClient, opts ActionInstanceBuilder, instanceId string) (r ResizeFlavorResult) { + b, err := opts.ToActionInstanceMap() if err != nil { r.Err = err return @@ -311,7 +288,7 @@ func Resize(client *golangsdk.ServiceClient, opts ResizeFlavorBuilder, instanceI return } -type EnlargeVolumeRdsOpts struct { +type EnlargeVolumeOpts struct { EnlargeVolume *EnlargeVolumeSize `json:"enlarge_volume" required:"true"` } @@ -319,20 +296,12 @@ type EnlargeVolumeSize struct { Size int `json:"size" required:"true"` } -type EnlargeVolumeBuilder interface { - ToEnlargeVolumeMap() (map[string]interface{}, error) -} - -func (opts EnlargeVolumeRdsOpts) ToEnlargeVolumeMap() (map[string]interface{}, error) { - b, err := golangsdk.BuildRequestBody(&opts, "") - if err != nil { - return nil, err - } - return b, nil +func (opts EnlargeVolumeOpts) ToActionInstanceMap() (map[string]interface{}, error) { + return toActionInstanceMap(opts) } -func EnlargeVolume(client *golangsdk.ServiceClient, opts EnlargeVolumeBuilder, instanceId string) (r EnlargeVolumeResult) { - b, err := opts.ToEnlargeVolumeMap() +func EnlargeVolume(client *golangsdk.ServiceClient, opts ActionInstanceBuilder, instanceId string) (r EnlargeVolumeResult) { + b, err := opts.ToActionInstanceMap() if err != nil { r.Err = err return diff --git a/openstack/rds/v3/instances/results.go b/openstack/rds/v3/instances/results.go index 447da887..6251201a 100644 --- a/openstack/rds/v3/instances/results.go +++ b/openstack/rds/v3/instances/results.go @@ -14,11 +14,19 @@ type CreateResult struct { commonResult } -type RestartRdsInstanceResult struct { +type DeleteResult struct { commonResult } -type SingleToHaRdsInstanceResult struct { +type RestartResult struct { + commonResult +} + +type RenameResult struct { + commonResult +} + +type SingleToHaResult struct { commonResult } @@ -26,7 +34,7 @@ type ResizeFlavorResult struct { commonResult } -type RenameResult struct { +type EnlargeVolumeResult struct { commonResult } @@ -51,38 +59,34 @@ type Instance struct { ChargeInfo ChargeInfo `json:"charge_info"` } -type CreateRds struct { +type CreateResponse struct { Instance Instance `json:"instance"` JobId string `json:"job_id"` OrderId string `json:"order_id"` } -func (r CreateResult) Extract() (*CreateRds, error) { - var response CreateRds +func (r CreateResult) Extract() (*CreateResponse, error) { + var response CreateResponse err := r.ExtractInto(&response) return &response, err } -type DeleteInstanceRdsResult struct { - commonResult -} - -type DeleteInstanceRdsResponse struct { +type DeleteResponse struct { JobId string `json:"job_id"` } -func (r DeleteInstanceRdsResult) Extract() (*DeleteInstanceRdsResponse, error) { - var response DeleteInstanceRdsResponse +func (r DeleteResult) Extract() (*DeleteResponse, error) { + var response DeleteResponse err := r.ExtractInto(&response) return &response, err } -type RestartRdsResponse struct { +type RestartResponse struct { JobId string `json:"job_id"` } -func (r RestartRdsInstanceResult) Extract() (*RestartRdsResponse, error) { - var response RestartRdsResponse +func (r RestartResult) Extract() (*RestartResponse, error) { + var response RestartResponse err := r.ExtractInto(&response) return &response, err } @@ -91,7 +95,7 @@ type SingleToHaResponse struct { JobId string `json:"job_id"` } -func (r SingleToHaRdsInstanceResult) Extract() (*SingleToHaResponse, error) { +func (r SingleToHaResult) Extract() (*SingleToHaResponse, error) { var response SingleToHaResponse err := r.ExtractInto(&response) return &response, err @@ -107,10 +111,6 @@ func (r ResizeFlavorResult) Extract() (*ResizeFlavor, error) { return &response, err } -type EnlargeVolumeResult struct { - commonResult -} - type EnlargeVolumeResp struct { JobId string `json:"job_id"` } @@ -185,7 +185,7 @@ func (r RdsPage) IsEmpty() (bool, error) { return len(data.Instances) == 0, err } -// ExtractCloudServers is a function that takes a ListResult and returns the services' information. +// ExtractRdsInstances is a function that takes a ListResult and returns the instances' information. func ExtractRdsInstances(r pagination.Page) (ListRdsResponse, error) { var s ListRdsResponse err := (r.(RdsPage)).ExtractInto(&s)