You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ev...@apache.org on 2014/04/04 01:06:55 UTC

git commit: JCLOUDS-317: Add missing states to Nova v2 Server

Repository: jclouds
Updated Branches:
  refs/heads/master e195a5a2b -> 222779bbc


JCLOUDS-317: Add missing states to Nova v2 Server

- Deprecated state: STOPPED
- Add states:   MIGRATING, SHUTOFF, RESCUE, SOFT_DELETED,
                SHELVED, SHELVED_OFFLOADED


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/222779bb
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/222779bb
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/222779bb

Branch: refs/heads/master
Commit: 222779bbc4052c41a6db0e484cee44b58251abdd
Parents: e195a5a
Author: Jacob Mourelos <ja...@gmail.com>
Authored: Tue Mar 25 08:56:21 2014 +0100
Committer: Everett Toews <ev...@rackspace.com>
Committed: Thu Apr 3 18:06:27 2014 -0500

----------------------------------------------------------------------
 .../openstack/nova/v2_0/domain/Server.java      |  10 +-
 .../nova/v2_0/features/ServerApiExpectTest.java |  37 ++
 .../parse/ParseServerDetailsStatesTest.java     | 255 ++++++++++++++
 .../resources/server_list_details_states.json   | 342 +++++++++++++++++++
 4 files changed, 643 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/222779bb/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Server.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Server.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Server.java
index a7b316a..143131c 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Server.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Server.java
@@ -59,7 +59,15 @@ public class Server extends Resource {
     */
    public static enum Status {
 
-      ACTIVE, BUILD, REBUILD, SUSPENDED, PAUSED, RESIZE, VERIFY_RESIZE, REVERT_RESIZE, PASSWORD, REBOOT, HARD_REBOOT, DELETED, UNKNOWN, ERROR, STOPPED, UNRECOGNIZED;
+       ACTIVE, BUILD, REBUILD, SUSPENDED, PAUSED, RESIZE, VERIFY_RESIZE, REVERT_RESIZE, PASSWORD, REBOOT, HARD_REBOOT,
+       DELETED, UNKNOWN, ERROR,
+
+      /**
+       * @deprecated please use {@code Status.SHUTOFF} instead
+       */
+      @Deprecated STOPPED,
+
+      UNRECOGNIZED, MIGRATING, SHUTOFF, RESCUE, SOFT_DELETED, SHELVED, SHELVED_OFFLOADED;
 
       public String value() {
          return name();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/222779bb/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiExpectTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiExpectTest.java
index 070dcf6..3b2b2d8 100644
--- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiExpectTest.java
+++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiExpectTest.java
@@ -30,6 +30,7 @@ import org.jclouds.openstack.nova.v2_0.options.RebuildServerOptions;
 import org.jclouds.openstack.nova.v2_0.parse.ParseCreatedServerTest;
 import org.jclouds.openstack.nova.v2_0.parse.ParseMetadataListTest;
 import org.jclouds.openstack.nova.v2_0.parse.ParseMetadataUpdateTest;
+import org.jclouds.openstack.nova.v2_0.parse.ParseServerDetailsStatesTest;
 import org.jclouds.openstack.nova.v2_0.parse.ParseServerListTest;
 import org.testng.annotations.Test;
 
@@ -82,6 +83,42 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       assertTrue(apiWhenNoServersExist.getServerApiForZone("az-1.region-a.geo-1").list().concat().isEmpty());
    }
 
+   public void testListInDetailServersWhenResponseIs2xx() throws Exception {
+      HttpRequest listServers = HttpRequest
+              .builder()
+              .method("GET")
+              .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/detail")
+              .addHeader("Accept", "application/json")
+              .addHeader("X-Auth-Token", authToken).build();
+
+      HttpResponse listInDetailServersResponse = HttpResponse.builder().statusCode(200)
+              .payload(payloadFromResource("/server_list_details_states.json")).build();
+
+      NovaApi apiWhenServersExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+              responseWithKeystoneAccess, listServers, listInDetailServersResponse);
+
+      assertEquals(apiWhenServersExist.getConfiguredZones(), ImmutableSet.of("az-1.region-a.geo-1", "az-2.region-a.geo-1", "az-3.region-a.geo-1"));
+
+      assertEquals(apiWhenServersExist.getServerApiForZone("az-1.region-a.geo-1").listInDetail().concat().toString(),
+              new ParseServerDetailsStatesTest().expected().toString());
+   }
+
+   public void testListInDetailServersWhenReponseIs404IsEmpty() throws Exception {
+      HttpRequest listServers = HttpRequest
+              .builder()
+              .method("GET")
+              .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/detail")
+              .addHeader("Accept", "application/json")
+              .addHeader("X-Auth-Token", authToken).build();
+
+      HttpResponse listInDetailServersResponse = HttpResponse.builder().statusCode(404).build();
+
+      NovaApi apiWhenNoServersExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+              responseWithKeystoneAccess, listServers, listInDetailServersResponse);
+
+      assertTrue(apiWhenNoServersExist.getServerApiForZone("az-1.region-a.geo-1").listInDetail().concat().isEmpty());
+   }
+
    public void testCreateServerWhenResponseIs202() throws Exception {
       HttpRequest createServer = HttpRequest
             .builder()

http://git-wip-us.apache.org/repos/asf/jclouds/blob/222779bb/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerDetailsStatesTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerDetailsStatesTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerDetailsStatesTest.java
new file mode 100644
index 0000000..5386670
--- /dev/null
+++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerDetailsStatesTest.java
@@ -0,0 +1,255 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.openstack.nova.v2_0.parse;
+
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import java.net.URI;
+import java.util.Set;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+import org.jclouds.date.internal.SimpleDateFormatDateService;
+import org.jclouds.json.BaseSetParserTest;
+import org.jclouds.json.config.GsonModule;
+import org.jclouds.openstack.nova.v2_0.config.NovaParserModule;
+import org.jclouds.openstack.nova.v2_0.domain.Address;
+import org.jclouds.openstack.nova.v2_0.domain.Server;
+import org.jclouds.openstack.nova.v2_0.domain.Server.Status;
+import org.jclouds.openstack.nova.v2_0.domain.ServerExtendedAttributes;
+import org.jclouds.openstack.nova.v2_0.domain.ServerExtendedStatus;
+import org.jclouds.openstack.v2_0.domain.Link;
+import org.jclouds.openstack.v2_0.domain.Link.Relation;
+import org.jclouds.openstack.v2_0.domain.Resource;
+import org.jclouds.rest.annotations.SelectJson;
+import org.testng.annotations.Test;
+
+/**
+ * @author Jacob Mourelos
+ */
+@Test(groups = "unit", testName = "ParseServerDetailsStatesTest")
+public class ParseServerDetailsStatesTest extends BaseSetParserTest<Server> {
+
+   @Override
+   public String resource() {
+      return "/server_list_details_states.json";
+   }
+
+   @Override
+   @SelectJson("servers")
+   @Consumes(MediaType.APPLICATION_JSON)
+   public Set<Server> expected() {
+      return ImmutableSet.<Server>of(
+              Server.builder()
+                      .links(
+                              Link.create(
+                                      Relation.SELF,
+                                      URI.create("http://openstack:8774/v2/4e1900cf21924a098709c23480e157c0/servers/56d51a88-0066-4976-91b6-d1b453be603f")),
+                              Link.create(
+                                      Relation.BOOKMARK,
+                                      URI.create("http://openstack:8774/4e1900cf21924a098709c23480e157c0/servers/56d51a88-0066-4976-91b6-d1b453be603f")))
+                      .image(Resource.builder()
+                              .id("e3f84189-964e-4dc3-8ac6-832c2b7553d4")
+                              .links(Link.create(
+                                      Relation.BOOKMARK,
+                                      URI.create("http://openstack:8774/4e1900cf21924a098709c23480e157c0/images/e3f84189-964e-4dc3-8ac6-832c2b7553d4")))
+                              .build())
+                      .flavor(Resource.builder()
+                              .id("6")
+                              .links(Link.create(
+                                      Relation.BOOKMARK,
+                                      URI.create("http://openstack:8774/4e1900cf21924a098709c23480e157c0/flavors/6")))
+                              .build())
+                      .id("56d51a88-0066-4976-91b6-d1b453be603f")
+                      .userId("08ba127f0d6842279f9db8e8bc6977e9")
+                      .status(Status.BUILD)
+                      .updated(new SimpleDateFormatDateService().iso8601SecondsDateParse("2014-03-19T11:54:59Z"))
+                      .hostId("0bc453b1c10348e9dc398fed7a5b06f996964ae1643fe460a85a23d8")
+                      .name("machine_5")
+                      .created(new SimpleDateFormatDateService().iso8601SecondsDateParse("2014-03-19T11:54:57Z"))
+                      .tenantId("4e1900cf21924a098709c23480e157c0")
+                      .extendedStatus(ServerExtendedStatus.builder().vmState("building").powerState(0).taskState("spawning")
+                              .build())
+                      .diskConfig("MANUAL")
+                      .extendedAttributes(
+                              ServerExtendedAttributes.builder()
+                                      .instanceName("instance-0000000b")
+                                      .hostName("rdohavana.localdomain")
+                                      .hypervisorHostName("rdohavana.localdomain").build()
+                      ).build(),
+              Server.builder()
+                      .links(
+                              Link.create(
+                                      Relation.SELF,
+                                      URI.create("http://openstack:8774/v2/4e1900cf21924a098709c23480e157c0/servers/3bc8ab03-52e7-4d2b-ba88-73f9ecadf003")),
+                              Link.create(
+                                      Relation.BOOKMARK,
+                                      URI.create("http://openstack:8774/4e1900cf21924a098709c23480e157c0/servers/3bc8ab03-52e7-4d2b-ba88-73f9ecadf003")))
+                      .image(Resource.builder()
+                              .id("e3f84189-964e-4dc3-8ac6-832c2b7553d4")
+                              .links(Link.create(
+                                      Relation.BOOKMARK,
+                                      URI.create("http://openstack:8774/4e1900cf21924a098709c23480e157c0/images/e3f84189-964e-4dc3-8ac6-832c2b7553d4")))
+                              .build())
+                      .flavor(Resource.builder()
+                              .id("6")
+                              .links(Link.create(
+                                      Relation.BOOKMARK,
+                                      URI.create("http://openstack:8774/4e1900cf21924a098709c23480e157c0/flavors/6")))
+                              .build())
+                      .id("3bc8ab03-52e7-4d2b-ba88-73f9ecadf003")
+                      .userId("08ba127f0d6842279f9db8e8bc6977e9")
+                      .status(Status.ACTIVE)
+                      .updated(new SimpleDateFormatDateService().iso8601SecondsDateParse("2014-03-19T11:52:21Z"))
+                      .hostId("0bc453b1c10348e9dc398fed7a5b06f996964ae1643fe460a85a23d8")
+                      .name("machine_4")
+                      .created(new SimpleDateFormatDateService().iso8601SecondsDateParse("2014-03-19T11:51:53Z"))
+                      .tenantId("4e1900cf21924a098709c23480e157c0")
+                      .extendedStatus(ServerExtendedStatus.builder().vmState("active").powerState(1).build())
+                      .diskConfig("MANUAL")
+                      .extendedAttributes(
+                              ServerExtendedAttributes.builder()
+                                      .instanceName("instance-00000009")
+                                      .hostName("rdohavana.localdomain")
+                                      .hypervisorHostName("rdohavana.localdomain").build()
+                      )
+                      .addresses(ImmutableMultimap.<String, Address>builder()
+                              .putAll("public", Address.createV4("172.24.4.232")).build()
+                      ).build(),
+              Server.builder()
+                      .links(
+                              Link.create(
+                                      Relation.SELF,
+                                      URI.create("http://openstack:8774/v2/4e1900cf21924a098709c23480e157c0/servers/cad76945-8851-489a-99e1-f1049e02c769")),
+                              Link.create(
+                                      Relation.BOOKMARK,
+                                      URI.create("http://openstack:8774/4e1900cf21924a098709c23480e157c0/servers/cad76945-8851-489a-99e1-f1049e02c769")))
+                      .image(Resource.builder()
+                              .id("e3f84189-964e-4dc3-8ac6-832c2b7553d4")
+                              .links(Link.create(
+                                      Relation.BOOKMARK,
+                                      URI.create("http://openstack:8774/4e1900cf21924a098709c23480e157c0/images/e3f84189-964e-4dc3-8ac6-832c2b7553d4")))
+                              .build())
+                      .flavor(Resource.builder()
+                              .id("6")
+                              .links(Link.create(
+                                      Relation.BOOKMARK,
+                                      URI.create("http://openstack:8774/4e1900cf21924a098709c23480e157c0/flavors/6")))
+                              .build())
+                      .id("cad76945-8851-489a-99e1-f1049e02c769")
+                      .userId("08ba127f0d6842279f9db8e8bc6977e9")
+                      .status(Status.SHELVED_OFFLOADED)
+                      .updated(new SimpleDateFormatDateService().iso8601SecondsDateParse("2014-03-19T11:38:05Z"))
+                      .name("machine_3")
+                      .created(new SimpleDateFormatDateService().iso8601SecondsDateParse("2014-03-19T11:33:27Z"))
+                      .tenantId("4e1900cf21924a098709c23480e157c0")
+                      .extendedStatus(ServerExtendedStatus.builder().vmState("shelved_offloaded").powerState(4).build())
+                      .diskConfig("MANUAL")
+                      .extendedAttributes(
+                              ServerExtendedAttributes.builder()
+                                      .instanceName("instance-00000006").build()
+                      )
+                      .addresses(ImmutableMultimap.<String, Address>builder()
+                              .putAll("public", Address.createV4("172.24.4.229")).build()
+                      ).build(),
+              Server.builder()
+                      .links(
+                              Link.create(
+                                      Relation.SELF,
+                                      URI.create("http://openstack:8774/v2/4e1900cf21924a098709c23480e157c0/servers/89142a4f-f58c-4205-8571-65f4a2be2bc9")),
+                              Link.create(
+                                      Relation.BOOKMARK,
+                                      URI.create("http://openstack:8774/4e1900cf21924a098709c23480e157c0/servers/89142a4f-f58c-4205-8571-65f4a2be2bc9")))
+                      .image(Resource.builder()
+                              .id("e3f84189-964e-4dc3-8ac6-832c2b7553d4")
+                              .links(Link.create(
+                                      Relation.BOOKMARK,
+                                      URI.create("http://openstack:8774/4e1900cf21924a098709c23480e157c0/images/e3f84189-964e-4dc3-8ac6-832c2b7553d4")))
+                              .build())
+                      .flavor(Resource.builder()
+                              .id("6")
+                              .links(Link.create(
+                                      Relation.BOOKMARK,
+                                      URI.create("http://openstack:8774/4e1900cf21924a098709c23480e157c0/flavors/6")))
+                              .build())
+                      .id("89142a4f-f58c-4205-8571-65f4a2be2bc9")
+                      .userId("08ba127f0d6842279f9db8e8bc6977e9")
+                      .status(Status.RESCUE)
+                      .updated(new SimpleDateFormatDateService().iso8601SecondsDateParse("2014-03-19T11:36:05Z"))
+                      .hostId("0bc453b1c10348e9dc398fed7a5b06f996964ae1643fe460a85a23d8")
+                      .name("machine_2")
+                      .created(new SimpleDateFormatDateService().iso8601SecondsDateParse("2014-03-19T11:31:19Z"))
+                      .tenantId("4e1900cf21924a098709c23480e157c0")
+                      .extendedStatus(ServerExtendedStatus.builder().vmState("rescued").powerState(1).build())
+                      .diskConfig("MANUAL")
+                      .extendedAttributes(
+                              ServerExtendedAttributes.builder()
+                                      .instanceName("instance-00000005")
+                                      .hostName("rdohavana.localdomain")
+                                      .hypervisorHostName("rdohavana.localdomain").build()
+                      )
+                      .addresses(ImmutableMultimap.<String, Address>builder()
+                              .putAll("public", Address.createV4("172.24.4.227")).build()
+                      ).build(),
+              Server.builder()
+                      .links(
+                              Link.create(
+                                      Relation.SELF,
+                                      URI.create("http://openstack:8774/v2/4e1900cf21924a098709c23480e157c0/servers/fac50d26-bb38-455f-ad92-eba790187c00")),
+                              Link.create(
+                                      Relation.BOOKMARK,
+                                      URI.create("http://openstack:8774/4e1900cf21924a098709c23480e157c0/servers/fac50d26-bb38-455f-ad92-eba790187c00")))
+                      .image(Resource.builder()
+                              .id("e3f84189-964e-4dc3-8ac6-832c2b7553d4")
+                              .links(Link.create(
+                                      Relation.BOOKMARK,
+                                      URI.create("http://openstack:8774/4e1900cf21924a098709c23480e157c0/images/e3f84189-964e-4dc3-8ac6-832c2b7553d4")))
+                              .build())
+                      .flavor(Resource.builder()
+                              .id("6")
+                              .links(Link.create(
+                                      Relation.BOOKMARK,
+                                      URI.create("http://openstack:8774/4e1900cf21924a098709c23480e157c0/flavors/6")))
+                              .build())
+                      .id("fac50d26-bb38-455f-ad92-eba790187c00")
+                      .userId("08ba127f0d6842279f9db8e8bc6977e9")
+                      .status(Status.SHUTOFF)
+                      .updated(new SimpleDateFormatDateService().iso8601SecondsDateParse("2014-03-19T11:35:26Z"))
+                      .hostId("0bc453b1c10348e9dc398fed7a5b06f996964ae1643fe460a85a23d8")
+                      .name("machine_1")
+                      .created(new SimpleDateFormatDateService().iso8601SecondsDateParse("2014-03-19T11:28:56Z"))
+                      .tenantId("4e1900cf21924a098709c23480e157c0")
+                      .extendedStatus(ServerExtendedStatus.builder().vmState("stopped").powerState(4).build())
+                      .diskConfig("MANUAL")
+                      .extendedAttributes(
+                              ServerExtendedAttributes.builder()
+                                      .instanceName("instance-00000004")
+                                      .hostName("rdohavana.localdomain")
+                                      .hypervisorHostName("rdohavana.localdomain").build()
+                      )
+                      .addresses(ImmutableMultimap.<String, Address>builder()
+                              .putAll("public", Address.createV4("172.24.4.228")).build()
+                      ).build()
+      );
+   }
+
+
+   protected Injector injector() {
+      return Guice.createInjector(new NovaParserModule(), new GsonModule());
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/222779bb/apis/openstack-nova/src/test/resources/server_list_details_states.json
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/resources/server_list_details_states.json b/apis/openstack-nova/src/test/resources/server_list_details_states.json
new file mode 100644
index 0000000..6fb28ed
--- /dev/null
+++ b/apis/openstack-nova/src/test/resources/server_list_details_states.json
@@ -0,0 +1,342 @@
+{
+    "servers": [
+        {
+            "OS-DCF:diskConfig": "MANUAL",
+            "OS-EXT-AZ:availability_zone": "nova",
+            "OS-EXT-SRV-ATTR:host": "rdohavana.localdomain",
+            "OS-EXT-SRV-ATTR:hypervisor_hostname": "rdohavana.localdomain",
+            "OS-EXT-SRV-ATTR:instance_name": "instance-0000000b",
+            "OS-EXT-STS:power_state": 0,
+            "OS-EXT-STS:task_state": "spawning",
+            "OS-EXT-STS:vm_state": "building",
+            "OS-SRV-USG:launched_at": null,
+            "OS-SRV-USG:terminated_at": null,
+            "accessIPv4": "",
+            "accessIPv6": "",
+            "addresses": {},
+            "config_drive": "",
+            "created": "2014-03-19T11:54:57Z",
+            "flavor": {
+                "id": "6",
+                "links": [
+                    {
+                        "href": "http://openstack:8774/4e1900cf21924a098709c23480e157c0/flavors/6",
+                        "rel": "bookmark"
+                    }
+                ]
+            },
+            "hostId": "0bc453b1c10348e9dc398fed7a5b06f996964ae1643fe460a85a23d8",
+            "id": "56d51a88-0066-4976-91b6-d1b453be603f",
+            "image": {
+                "id": "e3f84189-964e-4dc3-8ac6-832c2b7553d4",
+                "links": [
+                    {
+                        "href": "http://openstack:8774/4e1900cf21924a098709c23480e157c0/images/e3f84189-964e-4dc3-8ac6-832c2b7553d4",
+                        "rel": "bookmark"
+                    }
+                ]
+            },
+            "key_name": null,
+            "links": [
+                {
+                    "href": "http://openstack:8774/v2/4e1900cf21924a098709c23480e157c0/servers/56d51a88-0066-4976-91b6-d1b453be603f",
+                    "rel": "self"
+                },
+                {
+                    "href": "http://openstack:8774/4e1900cf21924a098709c23480e157c0/servers/56d51a88-0066-4976-91b6-d1b453be603f",
+                    "rel": "bookmark"
+                }
+            ],
+            "metadata": {},
+            "name": "machine_5",
+            "os-extended-volumes:volumes_attached": [],
+            "progress": 0,
+            "security_groups": [
+                {
+                    "name": "default"
+                }
+            ],
+            "status": "BUILD",
+            "tenant_id": "4e1900cf21924a098709c23480e157c0",
+            "updated": "2014-03-19T11:54:59Z",
+            "user_id": "08ba127f0d6842279f9db8e8bc6977e9"
+        },
+        {
+            "OS-DCF:diskConfig": "MANUAL",
+            "OS-EXT-AZ:availability_zone": "nova",
+            "OS-EXT-SRV-ATTR:host": "rdohavana.localdomain",
+            "OS-EXT-SRV-ATTR:hypervisor_hostname": "rdohavana.localdomain",
+            "OS-EXT-SRV-ATTR:instance_name": "instance-00000009",
+            "OS-EXT-STS:power_state": 1,
+            "OS-EXT-STS:task_state": null,
+            "OS-EXT-STS:vm_state": "active",
+            "OS-SRV-USG:launched_at": "2014-03-19T11:52:21.000000",
+            "OS-SRV-USG:terminated_at": null,
+            "accessIPv4": "",
+            "accessIPv6": "",
+            "addresses": {
+                "public": [
+                    {
+                        "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:df:22:1b",
+                        "OS-EXT-IPS:type": "fixed",
+                        "addr": "172.24.4.232",
+                        "version": 4
+                    }
+                ]
+            },
+            "config_drive": "",
+            "created": "2014-03-19T11:51:53Z",
+            "flavor": {
+                "id": "6",
+                "links": [
+                    {
+                        "href": "http://openstack:8774/4e1900cf21924a098709c23480e157c0/flavors/6",
+                        "rel": "bookmark"
+                    }
+                ]
+            },
+            "hostId": "0bc453b1c10348e9dc398fed7a5b06f996964ae1643fe460a85a23d8",
+            "id": "3bc8ab03-52e7-4d2b-ba88-73f9ecadf003",
+            "image": {
+                "id": "e3f84189-964e-4dc3-8ac6-832c2b7553d4",
+                "links": [
+                    {
+                        "href": "http://openstack:8774/4e1900cf21924a098709c23480e157c0/images/e3f84189-964e-4dc3-8ac6-832c2b7553d4",
+                        "rel": "bookmark"
+                    }
+                ]
+            },
+            "key_name": null,
+            "links": [
+                {
+                    "href": "http://openstack:8774/v2/4e1900cf21924a098709c23480e157c0/servers/3bc8ab03-52e7-4d2b-ba88-73f9ecadf003",
+                    "rel": "self"
+                },
+                {
+                    "href": "http://openstack:8774/4e1900cf21924a098709c23480e157c0/servers/3bc8ab03-52e7-4d2b-ba88-73f9ecadf003",
+                    "rel": "bookmark"
+                }
+            ],
+            "metadata": {},
+            "name": "machine_4",
+            "os-extended-volumes:volumes_attached": [],
+            "progress": 0,
+            "security_groups": [
+                {
+                    "name": "default"
+                }
+            ],
+            "status": "ACTIVE",
+            "tenant_id": "4e1900cf21924a098709c23480e157c0",
+            "updated": "2014-03-19T11:52:21Z",
+            "user_id": "08ba127f0d6842279f9db8e8bc6977e9"
+        },
+        {
+            "OS-DCF:diskConfig": "MANUAL",
+            "OS-EXT-AZ:availability_zone": "nova",
+            "OS-EXT-SRV-ATTR:host": null,
+            "OS-EXT-SRV-ATTR:hypervisor_hostname": null,
+            "OS-EXT-SRV-ATTR:instance_name": "instance-00000006",
+            "OS-EXT-STS:power_state": 4,
+            "OS-EXT-STS:task_state": null,
+            "OS-EXT-STS:vm_state": "shelved_offloaded",
+            "OS-SRV-USG:launched_at": "2014-03-19T11:33:52.000000",
+            "OS-SRV-USG:terminated_at": null,
+            "accessIPv4": "",
+            "accessIPv6": "",
+            "addresses": {
+                "public": [
+                    {
+                        "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:cb:56:d6",
+                        "OS-EXT-IPS:type": "fixed",
+                        "addr": "172.24.4.229",
+                        "version": 4
+                    }
+                ]
+            },
+            "config_drive": "",
+            "created": "2014-03-19T11:33:27Z",
+            "flavor": {
+                "id": "6",
+                "links": [
+                    {
+                        "href": "http://openstack:8774/4e1900cf21924a098709c23480e157c0/flavors/6",
+                        "rel": "bookmark"
+                    }
+                ]
+            },
+            "hostId": "",
+            "id": "cad76945-8851-489a-99e1-f1049e02c769",
+            "image": {
+                "id": "e3f84189-964e-4dc3-8ac6-832c2b7553d4",
+                "links": [
+                    {
+                        "href": "http://openstack:8774/4e1900cf21924a098709c23480e157c0/images/e3f84189-964e-4dc3-8ac6-832c2b7553d4",
+                        "rel": "bookmark"
+                    }
+                ]
+            },
+            "key_name": null,
+            "links": [
+                {
+                    "href": "http://openstack:8774/v2/4e1900cf21924a098709c23480e157c0/servers/cad76945-8851-489a-99e1-f1049e02c769",
+                    "rel": "self"
+                },
+                {
+                    "href": "http://openstack:8774/4e1900cf21924a098709c23480e157c0/servers/cad76945-8851-489a-99e1-f1049e02c769",
+                    "rel": "bookmark"
+                }
+            ],
+            "metadata": {},
+            "name": "machine_3",
+            "os-extended-volumes:volumes_attached": [],
+            "security_groups": [
+                {
+                    "name": "default"
+                }
+            ],
+            "status": "SHELVED_OFFLOADED",
+            "tenant_id": "4e1900cf21924a098709c23480e157c0",
+            "updated": "2014-03-19T11:38:05Z",
+            "user_id": "08ba127f0d6842279f9db8e8bc6977e9"
+        },
+        {
+            "OS-DCF:diskConfig": "MANUAL",
+            "OS-EXT-AZ:availability_zone": "nova",
+            "OS-EXT-SRV-ATTR:host": "rdohavana.localdomain",
+            "OS-EXT-SRV-ATTR:hypervisor_hostname": "rdohavana.localdomain",
+            "OS-EXT-SRV-ATTR:instance_name": "instance-00000005",
+            "OS-EXT-STS:power_state": 1,
+            "OS-EXT-STS:task_state": null,
+            "OS-EXT-STS:vm_state": "rescued",
+            "OS-SRV-USG:launched_at": "2014-03-19T11:36:05.000000",
+            "OS-SRV-USG:terminated_at": null,
+            "accessIPv4": "",
+            "accessIPv6": "",
+            "addresses": {
+                "public": [
+                    {
+                        "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:18:fe:c8",
+                        "OS-EXT-IPS:type": "fixed",
+                        "addr": "172.24.4.227",
+                        "version": 4
+                    }
+                ]
+            },
+            "config_drive": "",
+            "created": "2014-03-19T11:31:19Z",
+            "flavor": {
+                "id": "6",
+                "links": [
+                    {
+                        "href": "http://openstack:8774/4e1900cf21924a098709c23480e157c0/flavors/6",
+                        "rel": "bookmark"
+                    }
+                ]
+            },
+            "hostId": "0bc453b1c10348e9dc398fed7a5b06f996964ae1643fe460a85a23d8",
+            "id": "89142a4f-f58c-4205-8571-65f4a2be2bc9",
+            "image": {
+                "id": "e3f84189-964e-4dc3-8ac6-832c2b7553d4",
+                "links": [
+                    {
+                        "href": "http://openstack:8774/4e1900cf21924a098709c23480e157c0/images/e3f84189-964e-4dc3-8ac6-832c2b7553d4",
+                        "rel": "bookmark"
+                    }
+                ]
+            },
+            "key_name": null,
+            "links": [
+                {
+                    "href": "http://openstack:8774/v2/4e1900cf21924a098709c23480e157c0/servers/89142a4f-f58c-4205-8571-65f4a2be2bc9",
+                    "rel": "self"
+                },
+                {
+                    "href": "http://openstack:8774/4e1900cf21924a098709c23480e157c0/servers/89142a4f-f58c-4205-8571-65f4a2be2bc9",
+                    "rel": "bookmark"
+                }
+            ],
+            "metadata": {},
+            "name": "machine_2",
+            "os-extended-volumes:volumes_attached": [],
+            "security_groups": [
+                {
+                    "name": "default"
+                }
+            ],
+            "status": "RESCUE",
+            "tenant_id": "4e1900cf21924a098709c23480e157c0",
+            "updated": "2014-03-19T11:36:05Z",
+            "user_id": "08ba127f0d6842279f9db8e8bc6977e9"
+        },
+        {
+            "OS-DCF:diskConfig": "MANUAL",
+            "OS-EXT-AZ:availability_zone": "nova",
+            "OS-EXT-SRV-ATTR:host": "rdohavana.localdomain",
+            "OS-EXT-SRV-ATTR:hypervisor_hostname": "rdohavana.localdomain",
+            "OS-EXT-SRV-ATTR:instance_name": "instance-00000004",
+            "OS-EXT-STS:power_state": 4,
+            "OS-EXT-STS:task_state": null,
+            "OS-EXT-STS:vm_state": "stopped",
+            "OS-SRV-USG:launched_at": "2014-03-19T11:30:33.000000",
+            "OS-SRV-USG:terminated_at": null,
+            "accessIPv4": "",
+            "accessIPv6": "",
+            "addresses": {
+                "public": [
+                    {
+                        "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:64:1a:d5",
+                        "OS-EXT-IPS:type": "fixed",
+                        "addr": "172.24.4.228",
+                        "version": 4
+                    }
+                ]
+            },
+            "config_drive": "",
+            "created": "2014-03-19T11:28:56Z",
+            "flavor": {
+                "id": "6",
+                "links": [
+                    {
+                        "href": "http://openstack:8774/4e1900cf21924a098709c23480e157c0/flavors/6",
+                        "rel": "bookmark"
+                    }
+                ]
+            },
+            "hostId": "0bc453b1c10348e9dc398fed7a5b06f996964ae1643fe460a85a23d8",
+            "id": "fac50d26-bb38-455f-ad92-eba790187c00",
+            "image": {
+                "id": "e3f84189-964e-4dc3-8ac6-832c2b7553d4",
+                "links": [
+                    {
+                        "href": "http://openstack:8774/4e1900cf21924a098709c23480e157c0/images/e3f84189-964e-4dc3-8ac6-832c2b7553d4",
+                        "rel": "bookmark"
+                    }
+                ]
+            },
+            "key_name": null,
+            "links": [
+                {
+                    "href": "http://openstack:8774/v2/4e1900cf21924a098709c23480e157c0/servers/fac50d26-bb38-455f-ad92-eba790187c00",
+                    "rel": "self"
+                },
+                {
+                    "href": "http://openstack:8774/4e1900cf21924a098709c23480e157c0/servers/fac50d26-bb38-455f-ad92-eba790187c00",
+                    "rel": "bookmark"
+                }
+            ],
+            "metadata": {},
+            "name": "machine_1",
+            "os-extended-volumes:volumes_attached": [],
+            "security_groups": [
+                {
+                    "name": "default"
+                }
+            ],
+            "status": "SHUTOFF",
+            "tenant_id": "4e1900cf21924a098709c23480e157c0",
+            "updated": "2014-03-19T11:35:26Z",
+            "user_id": "08ba127f0d6842279f9db8e8bc6977e9"
+        }
+    ]
+}