diff --git a/openstack/dds/v3/flavors/requests.go b/openstack/dds/v3/flavors/requests.go new file mode 100644 index 000000000..ae96f9be1 --- /dev/null +++ b/openstack/dds/v3/flavors/requests.go @@ -0,0 +1,41 @@ +package flavors + +import ( + "github.com/huaweicloud/golangsdk" + "github.com/huaweicloud/golangsdk/pagination" +) + +// ListOptsBuilder allows extensions to add parameters to the List request. +type ListOptsBuilder interface { + ToFlavorListQuery() (string, error) +} + +// ListOpts allows the filtering and sorting of paginated collections through +// the API. Filtering is achieved by passing in struct field values that map to +// the server attributes you want to see returned. Marker and Limit are used +// for pagination. +type ListOpts struct { + Region string `q:"region"` + EngineName string `q:"engine_name"` +} + +// ToFlavorListQuery formats a ListOpts into a query string. +func (opts ListOpts) ToFlavorListQuery() (string, error) { + q, err := golangsdk.BuildQueryString(opts) + return q.String(), err +} + +// List implements a flavor List request. +func List(client *golangsdk.ServiceClient, opts ListOptsBuilder) pagination.Pager { + url := baseURL(client) + if opts != nil { + query, err := opts.ToFlavorListQuery() + if err != nil { + return pagination.Pager{Err: err} + } + url += query + } + return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page { + return FlavorPage{pagination.LinkedPageBase{PageResult: r}} + }) +} diff --git a/openstack/dds/v3/flavors/results.go b/openstack/dds/v3/flavors/results.go new file mode 100644 index 000000000..f3c40bffc --- /dev/null +++ b/openstack/dds/v3/flavors/results.go @@ -0,0 +1,35 @@ +package flavors + +import ( + "github.com/huaweicloud/golangsdk/pagination" +) + +// FlavorPage is a single page of Flavor results. +type FlavorPage struct { + pagination.LinkedPageBase +} + +// IsEmpty returns true if the page contains no results. +func (r FlavorPage) IsEmpty() (bool, error) { + s, err := ExtractFlavors(r) + return len(s) == 0, err +} + +// ExtractFlavors extracts a slice of Flavors from a List result. +func ExtractFlavors(r pagination.Page) ([]Flavor, error) { + var s struct { + Flavors []Flavor `json:"flavors"` + } + err := (r.(FlavorPage)).ExtractInto(&s) + return s.Flavors, err +} + +// Flavor represents a DDS flavor. +type Flavor struct { + EngineName string `json:"engine_name"` + Type string `json:"type"` + Vcpus string `json:"vcpus"` + Ram string `json:"ram"` + SpecCode string `json:"spec_code"` + AvailabilityZone []string `json:"availability_zone"` +} diff --git a/openstack/dds/v3/flavors/urls.go b/openstack/dds/v3/flavors/urls.go new file mode 100644 index 000000000..59d63ed74 --- /dev/null +++ b/openstack/dds/v3/flavors/urls.go @@ -0,0 +1,7 @@ +package flavors + +import "github.com/huaweicloud/golangsdk" + +func baseURL(c *golangsdk.ServiceClient) string { + return c.ServiceURL("flavors") +}