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")
+}