1package resourceproviders
2
3import (
4	"github.com/gophercloud/gophercloud"
5	"github.com/gophercloud/gophercloud/pagination"
6)
7
8type ResourceProviderLinks struct {
9	Href string `json:"href"`
10	Rel  string `json:"rel"`
11}
12
13// ResourceProvider are entities which provider consumable inventory of one or more classes of resource
14type ResourceProvider struct {
15	// Generation is a consistent view marker that assists with the management of concurrent resource provider updates.
16	Generation int `json:"generation"`
17
18	// UUID of a resource provider.
19	UUID string `json:"uuid"`
20
21	// Links is a list of links associated with one resource provider.
22	Links []ResourceProviderLinks `json:"links"`
23
24	// Name of one resource provider.
25	Name string `json:"name"`
26
27	// The ParentProviderUUID contains the UUID of the immediate parent of the resource provider.
28	// Requires microversion 1.14 or above
29	ParentProviderUUID string `json:"parent_provider_uuid"`
30
31	// The RootProviderUUID contains the read-only UUID of the top-most provider in this provider tree.
32	// Requires microversion 1.14 or above
33	RootProviderUUID string `json:"root_provider_uuid"`
34}
35
36type ResourceProviderUsage struct {
37	ResourceProviderGeneration int            `json:"resource_provider_generation"`
38	Usages                     map[string]int `json:"usages"`
39}
40
41type Inventory struct {
42	AllocationRatio float32 `json:"allocation_ratio"`
43	MaxUnit         int     `json:"max_unit"`
44	MinUnit         int     `json:"min_unit"`
45	Reserved        int     `json:"reserved"`
46	StepSize        int     `json:"step_size"`
47	Total           int     `json:"total"`
48}
49
50type ResourceProviderInventories struct {
51	ResourceProviderGeneration int                  `json:"resource_provider_generation"`
52	Inventories                map[string]Inventory `json:"inventories"`
53}
54
55type ResourceProviderTraits struct {
56	ResourceProviderGeneration int      `json:"resource_provider_generation"`
57	Traits                     []string `json:"traits"`
58}
59
60// resourceProviderResult is the response of a base ResourceProvider result.
61type resourceProviderResult struct {
62	gophercloud.Result
63}
64
65// Extract interpets any resourceProviderResult-base result as a ResourceProvider.
66func (r resourceProviderResult) Extract() (*ResourceProvider, error) {
67	var s ResourceProvider
68	err := r.ExtractInto(&s)
69
70	return &s, err
71}
72
73// CreateResult is the result of a Create operation. Call its Extract
74// method to interpret it as a ResourceProvider.
75type CreateResult struct {
76	resourceProviderResult
77}
78
79// ResourceProvidersPage contains a single page of all resource providers from a List call.
80type ResourceProvidersPage struct {
81	pagination.SinglePageBase
82}
83
84// IsEmpty determines if a ResourceProvidersPage contains any results.
85func (page ResourceProvidersPage) IsEmpty() (bool, error) {
86	resourceProviders, err := ExtractResourceProviders(page)
87	return len(resourceProviders) == 0, err
88}
89
90// ExtractResourceProviders returns a slice of ResourceProvider from a List operation.
91func ExtractResourceProviders(r pagination.Page) ([]ResourceProvider, error) {
92	var s struct {
93		ResourceProviders []ResourceProvider `json:"resource_providers"`
94	}
95	err := (r.(ResourceProvidersPage)).ExtractInto(&s)
96	return s.ResourceProviders, err
97}
98
99// GetUsagesResult is the response of a Get usage operations. Call its Extract method
100// to interpret it as a ResourceProviderUsage.
101type GetUsagesResult struct {
102	gophercloud.Result
103}
104
105// Extract interprets a GetUsagesResult as a ResourceProviderUsage.
106func (r GetUsagesResult) Extract() (*ResourceProviderUsage, error) {
107	var s ResourceProviderUsage
108	err := r.ExtractInto(&s)
109	return &s, err
110}
111
112// GetInventoriesResult is the response of a Get inventories operations. Call its Extract method
113// to interpret it as a ResourceProviderInventories.
114type GetInventoriesResult struct {
115	gophercloud.Result
116}
117
118// Extract interprets a GetInventoriesResult as a ResourceProviderInventories.
119func (r GetInventoriesResult) Extract() (*ResourceProviderInventories, error) {
120	var s ResourceProviderInventories
121	err := r.ExtractInto(&s)
122	return &s, err
123}
124
125// GetTraitsResult is the response of a Get traits operations. Call its Extract method
126// to interpret it as a ResourceProviderTraits.
127type GetTraitsResult struct {
128	gophercloud.Result
129}
130
131// Extract interprets a GetTraitsResult as a ResourceProviderTraits.
132func (r GetTraitsResult) Extract() (*ResourceProviderTraits, error) {
133	var s ResourceProviderTraits
134	err := r.ExtractInto(&s)
135	return &s, err
136}
137