Support delete server.
diff --git a/acceptance/07-delete-server.go b/acceptance/07-delete-server.go
new file mode 100644
index 0000000..8d05e8e
--- /dev/null
+++ b/acceptance/07-delete-server.go
@@ -0,0 +1,56 @@
+package main
+
+import (
+ "fmt"
+ "flag"
+ "github.com/rackspace/gophercloud"
+)
+
+var quiet = flag.Bool("quiet", false, "Quiet operation for acceptance tests. $? non-zero if problem.")
+var region = flag.String("r", "DFW", "Datacenter region")
+
+func main() {
+ provider, username, password := getCredentials()
+ flag.Parse()
+
+ auth, err := gophercloud.Authenticate(provider, gophercloud.AuthOptions{
+ Username: username,
+ Password: password,
+ })
+ if err != nil {
+ panic(err)
+ }
+
+ servers, err := gophercloud.ServersApi(auth, gophercloud.ApiCriteria{
+ Name: "cloudServersOpenStack",
+ Region: *region,
+ VersionId: "2",
+ UrlChoice: gophercloud.PublicURL,
+ })
+ if err != nil {
+ panic(err)
+ }
+
+ ss, err := servers.ListServers()
+ if err != nil {
+ panic(err)
+ }
+
+ n := 0
+ for _, s := range ss {
+ if len(s.Name) < 10 {
+ continue
+ }
+ if s.Name[0:10] == "ACPTTEST--" {
+ err := servers.DeleteServerById(s.Id)
+ if err != nil {
+ panic(err)
+ }
+ n++
+ }
+ }
+
+ if !*quiet {
+ fmt.Printf("%d servers removed.\n", n)
+ }
+}
diff --git a/interfaces.go b/interfaces.go
index b50fdf3..6d9b3c7 100644
--- a/interfaces.go
+++ b/interfaces.go
@@ -23,6 +23,7 @@
ListServers() ([]Server, error)
ServerById(id string) (*Server, error)
CreateServer(ns NewServer) (*NewServer, error)
+ DeleteServerById(id string) error
// Images
diff --git a/servers.go b/servers.go
index 29a1fc5..30aa959 100644
--- a/servers.go
+++ b/servers.go
@@ -69,6 +69,18 @@
return s, err
}
+// See the CloudServersProvider interface for details.
+func (gsp *genericServersProvider) DeleteServerById(id string) error {
+ url := gsp.endpoint + "/servers/" + id
+ err := perigee.Delete(url, perigee.Options{
+ MoreHeaders: map[string]string{
+ "X-Auth-Token": gsp.access.AuthToken(),
+ },
+ OkCodes: []int{204},
+ })
+ return err
+}
+
// RaxBandwidth provides measurement of server bandwidth consumed over a given audit interval.
type RaxBandwidth struct {
AuditPeriodEnd string `json:"audit_period_end"`