Add baremetal API endpoints

- drivers
- nodes

Change-Id: I7a144f146ce4ee9c028d7450b98aadb12d6a597d
Related-PROD: PROD-32734
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
+}