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 a7b316aeba..143131c0c4 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(); 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 070dcf6d19..3b2b2d804f 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() 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 0000000000..53866709ea --- /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 { + + @Override + public String resource() { + return "/server_list_details_states.json"; + } + + @Override + @SelectJson("servers") + @Consumes(MediaType.APPLICATION_JSON) + public Set expected() { + return ImmutableSet.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.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.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.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.builder() + .putAll("public", Address.createV4("172.24.4.228")).build() + ).build() + ); + } + + + protected Injector injector() { + return Guice.createInjector(new NovaParserModule(), new GsonModule()); + } +} 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 0000000000..6fb28ed232 --- /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" + } + ] +}