blob: 459ed1b8ba80c0a0d28aaecf968c7898aa8d13bb [file] [log] [blame]
Michal Kobusa1c3ca92019-08-21 14:29:23 +02001package nodes
2
3import (
4 "gerrit.mcp.mirantis.net/debian/gophercloud.git"
5 "gerrit.mcp.mirantis.net/debian/gophercloud.git/pagination"
6)
7
8type commonResult struct {
9 gophercloud.Result
10}
11
12func (r commonResult) Extract() (*Node, error) {
13 var n struct {
14 Node *Node `json:"node"`
15 }
16 err := r.ExtractInto(&n)
17 return n.Node, err
18}
19
20type GetResult struct {
21 commonResult
22}
23
24type Link struct {
25 Href string `json:"href"`
26 Rel string `json:"rel"`
27}
28
29type Node struct {
30 UUID string `json:"uuid"`
31 InstanceUUID string `json:"InstanceUUID"`
32 PowerState string `json:"power_state"`
33 ProvisionState string `json:"provision_state"`
34 Maintenance bool `json:"maintenance"`
35 Links []Link `json:"links"`
36}
37
38type NodePage struct {
39 pagination.SinglePageBase
40}
41
42func (r NodePage) NextPageURL() (string, error) {
43 var n struct {
44 Links []gophercloud.Link `json:"nodes_links"`
45 }
46 err := r.ExtractInto(&n)
47 if err != nil {
48 return "", err
49 }
50 return gophercloud.ExtractNextURL(n.Links)
51}
52
53func (r NodePage) IsEmpty() (bool, error) {
54 is, err := ExtractNodes(r)
55 return len(is) == 0, err
56}
57
58func ExtractNodes(r pagination.Page) ([]Node, error) {
59 var n struct {
60 Nodes []Node `json:"nodes"`
61 }
62 err := (r.(NodePage)).ExtractInto(&n)
63 return n.Nodes, err
64}