First monitoring API endpoint implemented
diff --git a/acceptance/openstack/identity/02-rbac-monitoring.go b/acceptance/openstack/identity/02-rbac-monitoring.go
new file mode 100644
index 0000000..707177e
--- /dev/null
+++ b/acceptance/openstack/identity/02-rbac-monitoring.go
@@ -0,0 +1,64 @@
+package main
+
+import (
+ "fmt"
+ "github.com/rackspace/gophercloud/openstack/identity"
+ "github.com/rackspace/gophercloud/openstack/utils"
+ "github.com/rackspace/gophercloud/rackspace/monitoring"
+ "github.com/rackspace/gophercloud/rackspace/monitoring/notificationPlans"
+)
+
+func main() {
+ ao, err := utils.AuthOptions()
+ if err != nil {
+ panic(err)
+ }
+
+ ao.AllowReauth = true
+ r, err := identity.Authenticate(ao)
+ if err != nil {
+ panic(err)
+ }
+
+ // Find the cloud monitoring API
+
+ sc, err := identity.ServiceCatalog(r)
+ if err != nil {
+ panic(err)
+ }
+
+ ces, err := sc.CatalogEntries()
+ if err != nil {
+ panic(err)
+ }
+
+ monUrl, err := findMonitoringEndpoint(ces)
+ if err != nil {
+ panic(err)
+ }
+
+ // Build ourselves an interface to cloud monitoring!
+
+ np := notificationPlans.NewClient(monitoring.Options{
+ Endpoint: monUrl,
+ AuthOptions: ao,
+ Authentication: r,
+ })
+
+ // Try to delete a bogus notification plan
+
+ dr, err := np.Delete("ajkhdlkajhdflkajshdf")
+ if err != nil {
+ panic(err)
+ }
+ fmt.Printf("%#v\n", dr)
+}
+
+func findMonitoringEndpoint(ces []identity.CatalogEntry) (string, error) {
+ for _, ce := range ces {
+ if ce.Type == "rax:monitor" {
+ return ce.Endpoints[0].PublicURL, nil
+ }
+ }
+ return "", fmt.Errorf("No monitoring API in the service catalog")
+}
diff --git a/openstack/identity/service_catalog.go b/openstack/identity/service_catalog.go
index fc2717a..af6bbdb 100644
--- a/openstack/identity/service_catalog.go
+++ b/openstack/identity/service_catalog.go
@@ -7,17 +7,17 @@
}
type CatalogEntry struct {
- Name string
- Type string
+ Name string
+ Type string
Endpoints []Endpoint
}
type Endpoint struct {
- TenantId string
- PublicURL string
+ TenantId string
+ PublicURL string
InternalURL string
- Region string
- VersionId string
+ Region string
+ VersionId string
VersionInfo string
VersionList string
}
@@ -45,8 +45,8 @@
return ces, err
}
ces[i] = CatalogEntry{
- Name: d["name"].(string),
- Type: d["type"].(string),
+ Name: d["name"].(string),
+ Type: d["type"].(string),
Endpoints: eps,
}
}
diff --git a/openstack/identity/service_catalog_test.go b/openstack/identity/service_catalog_test.go
index 4411b9f..82e4d9a 100644
--- a/openstack/identity/service_catalog_test.go
+++ b/openstack/identity/service_catalog_test.go
@@ -1,8 +1,8 @@
package identity
import (
- "testing"
"encoding/json"
+ "testing"
)
func TestServiceCatalog(t *testing.T) {
@@ -88,4 +88,4 @@
return true
}
return false
-}
\ No newline at end of file
+}
diff --git a/rackspace/monitoring/common.go b/rackspace/monitoring/common.go
new file mode 100644
index 0000000..d68a349
--- /dev/null
+++ b/rackspace/monitoring/common.go
@@ -0,0 +1,11 @@
+package monitoring
+
+import (
+ "github.com/rackspace/gophercloud/openstack/identity"
+)
+
+type Options struct {
+ Endpoint string
+ AuthOptions identity.AuthOptions
+ Authentication identity.AuthResults
+}
diff --git a/rackspace/monitoring/notificationPlans/requests.go b/rackspace/monitoring/notificationPlans/requests.go
new file mode 100644
index 0000000..b77cefd
--- /dev/null
+++ b/rackspace/monitoring/notificationPlans/requests.go
@@ -0,0 +1,32 @@
+package notificationPlans
+
+import (
+ "fmt"
+ "github.com/rackspace/gophercloud/rackspace/monitoring"
+ "github.com/racker/perigee"
+)
+
+var ErrNotImplemented = fmt.Errorf("notificationPlans feature not yet implemented")
+
+type Client struct {
+ options monitoring.Options
+}
+
+type DeleteResults map[string]interface{}
+
+func NewClient(mo monitoring.Options) *Client {
+ return &Client{
+ options: mo,
+ }
+}
+
+func (c *Client) Delete(id string) (DeleteResults, error) {
+ var dr DeleteResults
+
+ url := fmt.Sprintf("%s/notification_plans/%s", c.options.Endpoint, id)
+ err := perigee.Delete(url, perigee.Options{
+ Results: &dr,
+ OkCodes: []int{204},
+ })
+ return dr, err
+}