From 6c4884f7c1f4e69f4660c3c78870fd000c742aa0 Mon Sep 17 00:00:00 2001 From: zhongjun2 Date: Thu, 14 Nov 2019 16:24:56 +0800 Subject: [PATCH] Add rds flavor and datastore resources --- openstack/rds/v3/datastores/requests.go | 18 +++++++++++ openstack/rds/v3/datastores/results.go | 35 +++++++++++++++++++++ openstack/rds/v3/datastores/urls.go | 7 +++++ openstack/rds/v3/flavors/requests.go | 42 +++++++++++++++++++++++++ openstack/rds/v3/flavors/results.go | 34 ++++++++++++++++++++ openstack/rds/v3/flavors/urls.go | 7 +++++ 6 files changed, 143 insertions(+) create mode 100644 openstack/rds/v3/datastores/requests.go create mode 100644 openstack/rds/v3/datastores/results.go create mode 100644 openstack/rds/v3/datastores/urls.go create mode 100644 openstack/rds/v3/flavors/requests.go create mode 100644 openstack/rds/v3/flavors/results.go create mode 100644 openstack/rds/v3/flavors/urls.go diff --git a/openstack/rds/v3/datastores/requests.go b/openstack/rds/v3/datastores/requests.go new file mode 100644 index 000000000..bb6993539 --- /dev/null +++ b/openstack/rds/v3/datastores/requests.go @@ -0,0 +1,18 @@ +package datastores + +import ( + "github.com/huaweicloud/golangsdk" + "github.com/huaweicloud/golangsdk/pagination" +) + +func List(client *golangsdk.ServiceClient, databasesname string) pagination.Pager { + url := listURL(client, databasesname) + + pageRdsList := pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page { + return DataStoresPage{pagination.SinglePageBase(r)} + }) + + rdsheader := map[string]string{"Content-Type": "application/json"} + pageRdsList.Headers = rdsheader + return pageRdsList +} diff --git a/openstack/rds/v3/datastores/results.go b/openstack/rds/v3/datastores/results.go new file mode 100644 index 000000000..1f903dd8b --- /dev/null +++ b/openstack/rds/v3/datastores/results.go @@ -0,0 +1,35 @@ +package datastores + +import ( + "github.com/huaweicloud/golangsdk" + "github.com/huaweicloud/golangsdk/pagination" +) + +type DataStoresResult struct { + golangsdk.Result +} +type DataStores struct { + DataStores []dataStores `json:"dataStores" ` +} +type dataStores struct { + Id string `json:"id" ` + Name string `json:"name"` +} + +type DataStoresPage struct { + pagination.SinglePageBase +} + +func (r DataStoresPage) IsEmpty() (bool, error) { + data, err := ExtractDataStores(r) + if err != nil { + return false, err + } + return len(data.DataStores) == 0, err +} + +func ExtractDataStores(r pagination.Page) (DataStores, error) { + var s DataStores + err := (r.(DataStoresPage)).ExtractInto(&s) + return s, err +} diff --git a/openstack/rds/v3/datastores/urls.go b/openstack/rds/v3/datastores/urls.go new file mode 100644 index 000000000..41691d8f8 --- /dev/null +++ b/openstack/rds/v3/datastores/urls.go @@ -0,0 +1,7 @@ +package datastores + +import "github.com/huaweicloud/golangsdk" + +func listURL(sc *golangsdk.ServiceClient, databasename string) string { + return sc.ServiceURL("datastores", databasename) +} diff --git a/openstack/rds/v3/flavors/requests.go b/openstack/rds/v3/flavors/requests.go new file mode 100644 index 000000000..a8e282e43 --- /dev/null +++ b/openstack/rds/v3/flavors/requests.go @@ -0,0 +1,42 @@ +package flavors + +import ( + "github.com/huaweicloud/golangsdk" + "github.com/huaweicloud/golangsdk/pagination" +) + +type DbFlavorsOpts struct { + Versionname string `q:"version_name"` +} + +type DbFlavorsBuilder interface { + ToDbFlavorsListQuery() (string, error) +} + +func (opts DbFlavorsOpts) ToDbFlavorsListQuery() (string, error) { + q, err := golangsdk.BuildQueryString(opts) + if err != nil { + return "", err + } + return q.String(), err +} + +func List(client *golangsdk.ServiceClient, opts DbFlavorsBuilder, databasename string) pagination.Pager { + url := listURL(client, databasename) + if opts != nil { + query, err := opts.ToDbFlavorsListQuery() + + if err != nil { + return pagination.Pager{Err: err} + } + url += query + } + + pageRdsList := pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page { + return DbFlavorsPage{pagination.SinglePageBase(r)} + }) + + rdsheader := map[string]string{"Content-Type": "application/json"} + pageRdsList.Headers = rdsheader + return pageRdsList +} diff --git a/openstack/rds/v3/flavors/results.go b/openstack/rds/v3/flavors/results.go new file mode 100644 index 000000000..247e04cbc --- /dev/null +++ b/openstack/rds/v3/flavors/results.go @@ -0,0 +1,34 @@ +package flavors + +import ( + "github.com/huaweicloud/golangsdk/pagination" +) + +type DbFlavorsResp struct { + Flavorslist []Flavors `json:"flavors"` +} +type Flavors struct { + Vcpus string `json:"vcpus" ` + Ram int `json:"ram" ` + Speccode string `json:"spec_code" ` + Instancemode string `json:"instance_mode" ` + Azstatus map[string]string `json:"az_status" ` +} + +type DbFlavorsPage struct { + pagination.SinglePageBase +} + +func (r DbFlavorsPage) IsEmpty() (bool, error) { + data, err := ExtractDbFlavors(r) + if err != nil { + return false, err + } + return len(data.Flavorslist) == 0, err +} + +func ExtractDbFlavors(r pagination.Page) (DbFlavorsResp, error) { + var s DbFlavorsResp + err := (r.(DbFlavorsPage)).ExtractInto(&s) + return s, err +} diff --git a/openstack/rds/v3/flavors/urls.go b/openstack/rds/v3/flavors/urls.go new file mode 100644 index 000000000..3b144920b --- /dev/null +++ b/openstack/rds/v3/flavors/urls.go @@ -0,0 +1,7 @@ +package flavors + +import "github.com/huaweicloud/golangsdk" + +func listURL(sc *golangsdk.ServiceClient, databasename string) string { + return sc.ServiceURL("flavors", databasename) +}