Add baremetal API endpoints
- drivers
- nodes
Change-Id: I7a144f146ce4ee9c028d7450b98aadb12d6a597d
Related-PROD: PROD-32734
diff --git a/openstack/baremetal/v1/drivers/requests.go b/openstack/baremetal/v1/drivers/requests.go
new file mode 100644
index 0000000..8e338e4
--- /dev/null
+++ b/openstack/baremetal/v1/drivers/requests.go
@@ -0,0 +1,12 @@
+package drivers
+
+import (
+ "gerrit.mcp.mirantis.net/debian/gophercloud.git"
+ "gerrit.mcp.mirantis.net/debian/gophercloud.git/pagination"
+)
+
+func List(c *gophercloud.ServiceClient) pagination.Pager {
+ return pagination.NewPager(c, listURL(c), func(r pagination.PageResult) pagination.Page {
+ return DriverPage{pagination.SinglePageBase(r)}
+ })
+}
diff --git a/openstack/baremetal/v1/drivers/results.go b/openstack/baremetal/v1/drivers/results.go
new file mode 100644
index 0000000..b3efacd
--- /dev/null
+++ b/openstack/baremetal/v1/drivers/results.go
@@ -0,0 +1,63 @@
+package drivers
+
+import (
+ "gerrit.mcp.mirantis.net/debian/gophercloud.git"
+ "gerrit.mcp.mirantis.net/debian/gophercloud.git/pagination"
+)
+
+type commonResult struct {
+ gophercloud.Result
+}
+
+func (r commonResult) Extract() (*Driver, error) {
+ var d struct {
+ Driver *Driver `json:"driver"`
+ }
+ err := r.ExtractInto(&d)
+ return d.Driver, err
+}
+
+type GetResult struct {
+ commonResult
+}
+
+type Link struct {
+ Href string `json:"href"`
+ Rel string `json:"rel"`
+}
+
+type Driver struct {
+ Name string `json:"name"`
+ Type string `json:"type"`
+ Hosts []string `json:"hosts"`
+ Links []Link `json:"links"`
+ Properties []Link `json:"properties"`
+}
+
+type DriverPage struct {
+ pagination.SinglePageBase
+}
+
+func (r DriverPage) NextPageURL() (string, error) {
+ var d struct {
+ Links []gophercloud.Link `json:"drivers_links"`
+ }
+ err := r.ExtractInto(&d)
+ if err != nil {
+ return "", err
+ }
+ return gophercloud.ExtractNextURL(d.Links)
+}
+
+func (r DriverPage) IsEmpty() (bool, error) {
+ is, err := ExtractDrivers(r)
+ return len(is) == 0, err
+}
+
+func ExtractDrivers(r pagination.Page) ([]Driver, error) {
+ var d struct {
+ Drivers []Driver `json:"drivers"`
+ }
+ err := (r.(DriverPage)).ExtractInto(&d)
+ return d.Drivers, err
+}
diff --git a/openstack/baremetal/v1/drivers/urls.go b/openstack/baremetal/v1/drivers/urls.go
new file mode 100644
index 0000000..0996543
--- /dev/null
+++ b/openstack/baremetal/v1/drivers/urls.go
@@ -0,0 +1,7 @@
+package drivers
+
+import "gerrit.mcp.mirantis.net/debian/gophercloud.git"
+
+func listURL(c *gophercloud.ServiceClient) string {
+ return c.ServiceURL("drivers")
+}
diff --git a/openstack/baremetal/v1/nodes/requests.go b/openstack/baremetal/v1/nodes/requests.go
new file mode 100644
index 0000000..32264a0
--- /dev/null
+++ b/openstack/baremetal/v1/nodes/requests.go
@@ -0,0 +1,12 @@
+package nodes
+
+import (
+ "gerrit.mcp.mirantis.net/debian/gophercloud.git"
+ "gerrit.mcp.mirantis.net/debian/gophercloud.git/pagination"
+)
+
+func List(c *gophercloud.ServiceClient) pagination.Pager {
+ return pagination.NewPager(c, listURL(c), func(r pagination.PageResult) pagination.Page {
+ return NodePage{pagination.SinglePageBase(r)}
+ })
+}
diff --git a/openstack/baremetal/v1/nodes/results.go b/openstack/baremetal/v1/nodes/results.go
new file mode 100644
index 0000000..459ed1b
--- /dev/null
+++ b/openstack/baremetal/v1/nodes/results.go
@@ -0,0 +1,64 @@
+package nodes
+
+import (
+ "gerrit.mcp.mirantis.net/debian/gophercloud.git"
+ "gerrit.mcp.mirantis.net/debian/gophercloud.git/pagination"
+)
+
+type commonResult struct {
+ gophercloud.Result
+}
+
+func (r commonResult) Extract() (*Node, error) {
+ var n struct {
+ Node *Node `json:"node"`
+ }
+ err := r.ExtractInto(&n)
+ return n.Node, err
+}
+
+type GetResult struct {
+ commonResult
+}
+
+type Link struct {
+ Href string `json:"href"`
+ Rel string `json:"rel"`
+}
+
+type Node struct {
+ UUID string `json:"uuid"`
+ InstanceUUID string `json:"InstanceUUID"`
+ PowerState string `json:"power_state"`
+ ProvisionState string `json:"provision_state"`
+ Maintenance bool `json:"maintenance"`
+ Links []Link `json:"links"`
+}
+
+type NodePage struct {
+ pagination.SinglePageBase
+}
+
+func (r NodePage) NextPageURL() (string, error) {
+ var n struct {
+ Links []gophercloud.Link `json:"nodes_links"`
+ }
+ err := r.ExtractInto(&n)
+ if err != nil {
+ return "", err
+ }
+ return gophercloud.ExtractNextURL(n.Links)
+}
+
+func (r NodePage) IsEmpty() (bool, error) {
+ is, err := ExtractNodes(r)
+ return len(is) == 0, err
+}
+
+func ExtractNodes(r pagination.Page) ([]Node, error) {
+ var n struct {
+ Nodes []Node `json:"nodes"`
+ }
+ err := (r.(NodePage)).ExtractInto(&n)
+ return n.Nodes, err
+}
diff --git a/openstack/baremetal/v1/nodes/urls.go b/openstack/baremetal/v1/nodes/urls.go
new file mode 100644
index 0000000..02aedbf
--- /dev/null
+++ b/openstack/baremetal/v1/nodes/urls.go
@@ -0,0 +1,7 @@
+package nodes
+
+import "gerrit.mcp.mirantis.net/debian/gophercloud.git"
+
+func listURL(c *gophercloud.ServiceClient) string {
+ return c.ServiceURL("nodes")
+}