JCLOUDS-317: Add missing states to Nova v2 Server

- Deprecated state: STOPPED
- Add states:   MIGRATING, SHUTOFF, RESCUE, SOFT_DELETED,
                SHELVED, SHELVED_OFFLOADED
This commit is contained in:
Jacob Mourelos 2014-03-25 08:56:21 +01:00 committed by Everett Toews
parent 2a8ec6be9b
commit f4aaf702fa
4 changed files with 643 additions and 1 deletions

View File

@ -59,7 +59,15 @@ public class Server extends Resource {
*/ */
public static enum Status { 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() { public String value() {
return name(); return name();

View File

@ -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.ParseCreatedServerTest;
import org.jclouds.openstack.nova.v2_0.parse.ParseMetadataListTest; 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.ParseMetadataUpdateTest;
import org.jclouds.openstack.nova.v2_0.parse.ParseServerDetailsStatesTest;
import org.jclouds.openstack.nova.v2_0.parse.ParseServerListTest; import org.jclouds.openstack.nova.v2_0.parse.ParseServerListTest;
import org.testng.annotations.Test; 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()); 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 { public void testCreateServerWhenResponseIs202() throws Exception {
HttpRequest createServer = HttpRequest HttpRequest createServer = HttpRequest
.builder() .builder()

View File

@ -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());
}
}

View File

@ -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"
}
]
}