Repository: jclouds Updated Branches: refs/heads/master 0bc935dd5 -> aa11765be
http://git-wip-us.apache.org/repos/asf/jclouds/blob/aa11765b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/loaders/CreateUniqueKeyPairTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/loaders/CreateUniqueKeyPairTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/loaders/CreateUniqueKeyPairTest.java deleted file mode 100644 index 5667ab8..0000000 --- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/loaders/CreateUniqueKeyPairTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * 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.compute.loaders; - -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; -import static org.testng.Assert.assertEquals; - -import java.net.UnknownHostException; - -import org.jclouds.openstack.nova.v2_0.NovaApi; -import org.jclouds.openstack.nova.v2_0.domain.KeyPair; -import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionAndName; -import org.jclouds.openstack.nova.v2_0.extensions.KeyPairApi; -import org.testng.annotations.Test; - -import com.google.common.base.Optional; -import com.google.common.base.Supplier; -import com.google.common.base.Suppliers; -import com.google.inject.AbstractModule; -import com.google.inject.Guice; -import com.google.inject.TypeLiteral; - -@Test(groups = "unit", testName = "CreateUniqueKeyPairTest") -public class CreateUniqueKeyPairTest { - - @Test - public void testApply() throws UnknownHostException { - final NovaApi api = createMock(NovaApi.class); - KeyPairApi keyApi = createMock(KeyPairApi.class); - - KeyPair pair = createMock(KeyPair.class); - - Optional optKeyApi = Optional.of(keyApi); - - expect(api.getKeyPairApi("region")).andReturn(optKeyApi).atLeastOnce(); - - expect(keyApi.create("group-1")).andReturn(pair); - - replay(api, keyApi); - - CreateUniqueKeyPair parser = Guice.createInjector(new AbstractModule() { - - @Override - protected void configure() { - bind(new TypeLiteral<Supplier<String>>() { - }).toInstance(Suppliers.ofInstance("1")); - bind(NovaApi.class).toInstance(api); - } - - }).getInstance(CreateUniqueKeyPair.class); - - assertEquals(parser.load(RegionAndName.fromRegionAndName("region", "group")), pair); - - verify(api, keyApi); - } - - @Test - public void testApplyWithIllegalStateException() throws UnknownHostException { - final NovaApi api = createMock(NovaApi.class); - KeyPairApi keyApi = createMock(KeyPairApi.class); - @SuppressWarnings("unchecked") - final Supplier<String> uniqueIdSupplier = createMock(Supplier.class); - - KeyPair pair = createMock(KeyPair.class); - - expect(api.getKeyPairApi("region")).andReturn((Optional) Optional.of(keyApi)).atLeastOnce(); - - expect(uniqueIdSupplier.get()).andReturn("1"); - expect(keyApi.create("group-1")).andThrow(new IllegalStateException()); - expect(uniqueIdSupplier.get()).andReturn("2"); - expect(keyApi.create("group-2")).andReturn(pair); - - replay(api, keyApi, uniqueIdSupplier); - - CreateUniqueKeyPair parser = Guice.createInjector(new AbstractModule() { - - @Override - protected void configure() { - bind(new TypeLiteral<Supplier<String>>() { - }).toInstance(uniqueIdSupplier); - bind(NovaApi.class).toInstance(api); - } - - }).getInstance(CreateUniqueKeyPair.class); - - assertEquals(parser.load(RegionAndName.fromRegionAndName("region", "group")), pair); - - verify(api, keyApi, uniqueIdSupplier); - } - -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/aa11765b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/options/NovaTemplateOptionsTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/options/NovaTemplateOptionsTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/options/NovaTemplateOptionsTest.java index 3801865..c6a14f8 100644 --- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/options/NovaTemplateOptionsTest.java +++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/options/NovaTemplateOptionsTest.java @@ -22,7 +22,6 @@ import static org.jclouds.openstack.nova.v2_0.compute.options.NovaTemplateOption import static org.jclouds.openstack.nova.v2_0.compute.options.NovaTemplateOptions.Builder.generateKeyPair; import static org.jclouds.openstack.nova.v2_0.compute.options.NovaTemplateOptions.Builder.inboundPorts; import static org.jclouds.openstack.nova.v2_0.compute.options.NovaTemplateOptions.Builder.installPrivateKey; -import static org.jclouds.openstack.nova.v2_0.compute.options.NovaTemplateOptions.Builder.securityGroupNames; import static org.testng.Assert.assertEquals; import java.io.IOException; @@ -31,9 +30,6 @@ import org.jclouds.compute.options.TemplateOptions; import org.jclouds.openstack.nova.v2_0.domain.Server; import org.testng.annotations.Test; -import com.google.common.base.Optional; -import com.google.common.collect.ImmutableSet; - /** * Tests possible uses of NovaTemplateOptions and NovaTemplateOptions.Builder.* */ @@ -45,52 +41,6 @@ public class NovaTemplateOptionsTest { assertEquals(options.as(NovaTemplateOptions.class), options); } - @Test(expectedExceptions = NullPointerException.class, expectedExceptionsMessageRegExp = "all security groups must be non-empty") - public void testsecurityGroupNamesIterableBadFormat() { - NovaTemplateOptions options = new NovaTemplateOptions(); - options.securityGroupNames(ImmutableSet.of("group1", "")); - } - - @Test - public void testsecurityGroupNamesIterable() { - NovaTemplateOptions options = new NovaTemplateOptions(); - options.securityGroupNames(ImmutableSet.of("group1", "group2")); - assertEquals(options.getSecurityGroupNames(), Optional.of(ImmutableSet.of("group1", "group2"))); - - } - - @Test - public void testsecurityGroupNamesIterableStatic() { - NovaTemplateOptions options = securityGroupNames(ImmutableSet.of("group1", "group2")); - assertEquals(options.getSecurityGroupNames(), Optional.of(ImmutableSet.of("group1", "group2"))); - } - - @Test(expectedExceptions = NullPointerException.class, expectedExceptionsMessageRegExp = "all security groups must be non-empty") - public void testsecurityGroupNamesVarArgsBadFormat() { - NovaTemplateOptions options = new NovaTemplateOptions(); - options.securityGroupNames("mygroup", ""); - } - - @Test - public void testsecurityGroupNamesVarArgs() { - NovaTemplateOptions options = new NovaTemplateOptions(); - options.securityGroupNames("group1", "group2"); - assertEquals(options.getSecurityGroupNames(), Optional.of(ImmutableSet.of("group1", "group2"))); - - } - - @Test - public void testDefaultGroupsVarArgsEmpty() { - NovaTemplateOptions options = new NovaTemplateOptions(); - assertEquals(options.getSecurityGroupNames(), Optional.absent()); - } - - @Test - public void testsecurityGroupNamesVarArgsStatic() { - NovaTemplateOptions options = securityGroupNames("group1", "group2"); - assertEquals(options.getSecurityGroupNames(), Optional.of(ImmutableSet.of("group1", "group2"))); - } - @Test public void testautoAssignFloatingIpDefault() { NovaTemplateOptions options = new NovaTemplateOptions(); http://git-wip-us.apache.org/repos/asf/jclouds/blob/aa11765b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiLiveTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiLiveTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiLiveTest.java index f2fe5c4..638ad3d 100755 --- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiLiveTest.java +++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiLiveTest.java @@ -16,9 +16,11 @@ */ package org.jclouds.openstack.nova.v2_0.features; -import com.google.common.base.Optional; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; +import static org.jclouds.openstack.nova.v2_0.domain.Server.Status.ACTIVE; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; + import org.jclouds.http.HttpResponseException; import org.jclouds.openstack.nova.v2_0.domain.BlockDeviceMapping; import org.jclouds.openstack.nova.v2_0.domain.Network; @@ -34,11 +36,9 @@ import org.jclouds.openstack.v2_0.features.ExtensionApi; import org.jclouds.openstack.v2_0.predicates.LinkPredicates; import org.testng.annotations.Test; -import static org.jclouds.openstack.nova.v2_0.domain.Server.Status.ACTIVE; -import static org.jclouds.openstack.nova.v2_0.predicates.ServerPredicates.awaitActive; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.assertTrue; +import com.google.common.base.Optional; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; /** * Tests behavior of {@link ServerApi} @@ -120,8 +120,6 @@ public class ServerApiLiveTest extends BaseNovaApiLiveTest { ServerCreated server = serverApi.create(hostName, imageId(regionId), "1", options); serverId = server.getId(); - awaitActive(serverApi).apply(server.getId()); - Server serverCheck = serverApi.get(serverId); assertEquals(serverCheck.getStatus(), ACTIVE); } finally { @@ -162,9 +160,6 @@ public class ServerApiLiveTest extends BaseNovaApiLiveTest { ServerCreated server = serverApi.create(hostName, "", flavorRef, options); serverId = server.getId(); - - awaitActive(serverApi).apply(server.getId()); - Server serverCheck = serverApi.get(serverId); assertEquals(serverCheck.getStatus(), ACTIVE); } finally { @@ -241,8 +236,6 @@ public class ServerApiLiveTest extends BaseNovaApiLiveTest { ServerCreated server = serverApi.create(hostName, imageId(regionId), flavorId(regionId), options); - awaitActive(serverApi).apply(server.getId()); - return serverApi.get(server.getId()); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/aa11765b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerTest.java index 0a14a5a..34932f3 100755 --- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerTest.java +++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerTest.java @@ -16,10 +16,14 @@ */ package org.jclouds.openstack.nova.v2_0.parse; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableMultimap; -import com.google.inject.Guice; -import com.google.inject.Injector; +import static org.jclouds.openstack.nova.v2_0.domain.Address.createV4; +import static org.jclouds.openstack.nova.v2_0.domain.Address.createV6; + +import java.net.URI; + +import javax.ws.rs.Consumes; +import javax.ws.rs.core.MediaType; + import org.jclouds.date.internal.SimpleDateFormatDateService; import org.jclouds.json.BaseItemParserTest; import org.jclouds.json.config.GsonModule; @@ -33,12 +37,10 @@ import org.jclouds.openstack.v2_0.domain.Resource; import org.jclouds.rest.annotations.SelectJson; import org.testng.annotations.Test; -import javax.ws.rs.Consumes; -import javax.ws.rs.core.MediaType; -import java.net.URI; - -import static org.jclouds.openstack.nova.v2_0.domain.Address.createV4; -import static org.jclouds.openstack.nova.v2_0.domain.Address.createV6; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMultimap; +import com.google.inject.Guice; +import com.google.inject.Injector; @Test(groups = "unit", testName = "ParseServerTest") public class ParseServerTest extends BaseItemParserTest<Server> { @@ -63,7 +65,7 @@ public class ParseServerTest extends BaseItemParserTest<Server> { .hostId("e4d909c290d0fb1ca068ffaddf22cbd0") .accessIPv4("67.23.10.132") .accessIPv6("::babe:67.23.10.132") - .status(Status.BUILD) + .status(Status.ACTIVE) .diskConfig(Server.DISK_CONFIG_AUTO) .availabilityZone("nova") .image( http://git-wip-us.apache.org/repos/asf/jclouds/blob/aa11765b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/predicates/ServerPredicatesMockTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/predicates/ServerPredicatesMockTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/predicates/ServerPredicatesMockTest.java deleted file mode 100644 index 47eed14..0000000 --- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/predicates/ServerPredicatesMockTest.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * 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.predicates; - -import com.squareup.okhttp.mockwebserver.MockResponse; -import com.squareup.okhttp.mockwebserver.MockWebServer; -import org.jclouds.openstack.nova.v2_0.NovaApi; -import org.jclouds.openstack.nova.v2_0.features.ServerApi; -import org.jclouds.openstack.v2_0.internal.BaseOpenStackMockTest; -import org.testng.annotations.Test; - -import static org.jclouds.openstack.nova.v2_0.domain.Server.Status.ACTIVE; -import static org.jclouds.openstack.nova.v2_0.domain.Server.Status.SHUTOFF; -import static org.jclouds.openstack.nova.v2_0.predicates.ServerPredicates.awaitActive; -import static org.jclouds.openstack.nova.v2_0.predicates.ServerPredicates.awaitShutoff; -import static org.jclouds.openstack.nova.v2_0.predicates.ServerPredicates.awaitStatus; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertTrue; - -@Test(groups = "unit", testName = "ServerPredicatesMockTest") -public class ServerPredicatesMockTest extends BaseOpenStackMockTest<NovaApi> { - public void testAwaitActive() throws Exception { - MockWebServer server = mockOpenStackServer(); - server.enqueue(new MockResponse().setBody(stringFromResource("/access.json"))); - server.enqueue(new MockResponse().setBody(stringFromResource("/server_details.json"))); - server.enqueue(new MockResponse().setBody(stringFromResource("/server_details.json"))); - server.enqueue(new MockResponse().setBody(stringFromResource("/server_details.json"))); - String serverDetailsActive = stringFromResource("/server_details.json").replace("BUILD(scheduling)", ACTIVE.value()); - server.enqueue(new MockResponse().setBody(serverDetailsActive)); - - try { - NovaApi novaApi = api(server.getUrl("/").toString(), "openstack-nova"); - ServerApi serverApi = novaApi.getServerApi("RegionOne"); - - boolean result = awaitActive(serverApi).apply("71752"); - - assertTrue(result); - assertEquals(server.getRequestCount(), 5); - assertAuthentication(server); - } finally { - server.shutdown(); - } - } - - public void testAwaitShutoff() throws Exception { - MockWebServer server = mockOpenStackServer(); - server.enqueue(new MockResponse().setBody(stringFromResource("/access.json"))); - server.enqueue(new MockResponse().setBody(stringFromResource("/server_details.json"))); - server.enqueue(new MockResponse().setBody(stringFromResource("/server_details.json"))); - server.enqueue(new MockResponse().setBody(stringFromResource("/server_details.json"))); - server.enqueue(new MockResponse().setBody(stringFromResource("/server_details.json"))); - server.enqueue(new MockResponse().setBody(stringFromResource("/server_details.json"))); - String serverDetailsShutoff = stringFromResource("/server_details.json").replace("BUILD(scheduling)", SHUTOFF.value()); - server.enqueue(new MockResponse().setBody(serverDetailsShutoff)); - - try { - NovaApi novaApi = api(server.getUrl("/").toString(), "openstack-nova"); - ServerApi serverApi = novaApi.getServerApi("RegionOne"); - - boolean result = awaitShutoff(serverApi).apply("71752"); - - assertTrue(result); - assertEquals(server.getRequestCount(), 7); - assertAuthentication(server); - } finally { - server.shutdown(); - } - } - - public void testAwaitTimeout() throws Exception { - MockWebServer server = mockOpenStackServer(); - server.enqueue(new MockResponse().setBody(stringFromResource("/access.json"))); - - for (int i = 0; i < 20; i++) { - server.enqueue(new MockResponse().setBody(stringFromResource("/server_details.json"))); - } - - try { - NovaApi novaApi = api(server.getUrl("/").toString(), "openstack-nova"); - ServerApi serverApi = novaApi.getServerApi("RegionOne"); - - boolean result = awaitStatus(serverApi, ACTIVE, 3, 1).apply("71752"); - - assertFalse(result); - assertAuthentication(server); - } finally { - server.shutdown(); - } - } -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/aa11765b/apis/openstack-nova/src/test/resources/logback-test.xml ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/test/resources/logback-test.xml b/apis/openstack-nova/src/test/resources/logback-test.xml new file mode 100644 index 0000000..4cac342 --- /dev/null +++ b/apis/openstack-nova/src/test/resources/logback-test.xml @@ -0,0 +1,42 @@ +<?xml version="1.0"?> +<configuration scan="false"> + <appender name="FILE" class="ch.qos.logback.core.FileAppender"> + <file>target/test-data/jclouds.log</file> + <encoder> + <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> + </encoder> + </appender> + <appender name="WIREFILE" class="ch.qos.logback.core.FileAppender"> + <file>target/test-data/jclouds-wire.log</file> + <encoder> + <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> + </encoder> + </appender> + <appender name="COMPUTEFILE" class="ch.qos.logback.core.FileAppender"> + <file>target/jclouds-compute.log</file> + <encoder> + <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> + </encoder> + </appender> + + <logger name="org.jclouds"> + <level value="DEBUG" /> + <appender-ref ref="FILE" /> + </logger> + <logger name="jclouds.compute"> + <level value="DEBUG" /> + <appender-ref ref="COMPUTEFILE" /> + </logger> + <logger name="jclouds.wire"> + <level value="DEBUG" /> + <appender-ref ref="WIREFILE" /> + </logger> + <logger name="jclouds.headers"> + <level value="DEBUG" /> + <appender-ref ref="WIREFILE" /> + </logger> + + <root> + <level value="INFO" /> + </root> +</configuration> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds/blob/aa11765b/apis/openstack-nova/src/test/resources/server_details.json ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/test/resources/server_details.json b/apis/openstack-nova/src/test/resources/server_details.json index 846354e..897586e 100755 --- a/apis/openstack-nova/src/test/resources/server_details.json +++ b/apis/openstack-nova/src/test/resources/server_details.json @@ -9,7 +9,7 @@ "hostId": "e4d909c290d0fb1ca068ffaddf22cbd0", "accessIPv4": "67.23.10.132", "accessIPv6": "::babe:67.23.10.132", - "status": "BUILD(scheduling)", + "status": "ACTIVE", "progress": 60, "OS-DCF:diskConfig": "AUTO", "OS-EXT-AZ:availability_zone": "nova", http://git-wip-us.apache.org/repos/asf/jclouds/blob/aa11765b/apis/openstack-nova/src/test/resources/server_details_suspended.json ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/test/resources/server_details_suspended.json b/apis/openstack-nova/src/test/resources/server_details_suspended.json new file mode 100755 index 0000000..bf5ce6a --- /dev/null +++ b/apis/openstack-nova/src/test/resources/server_details_suspended.json @@ -0,0 +1,87 @@ +{ + "server": { + "id": "71752", + "tenant_id": "1234", + "user_id": "5678", + "name": "sample-f352", + "updated": "2010-10-10T12:00:00Z", + "created": "2010-08-10T12:00:00Z", + "hostId": "e4d909c290d0fb1ca068ffaddf22cbd0", + "accessIPv4": "67.23.10.132", + "accessIPv6": "::babe:67.23.10.132", + "status": "SUSPENDED", + "progress": 60, + "OS-DCF:diskConfig": "AUTO", + "OS-EXT-AZ:availability_zone": "nova", + "image": { + "id": "52415800-8b69-11e0-9b19-734f6f006e54", + "links": [ + { + "rel": "self", + "href": "http://servers.api.openstack.org/v2/1234/images/52415800-8b69-11e0-9b19-734f6f006e54" + }, + { + "rel": "bookmark", + "href": "http://servers.api.openstack.org/1234/images/52415800-8b69-11e0-9b19-734f6f006e54" + } + ] + }, + "flavor": { + "id": "52415800-8b69-11e0-9b19-734f216543fd", + "links": [ + { + "rel": "self", + "href": "http://servers.api.openstack.org/v2/1234/flavors/52415800-8b69-11e0-9b19-734f216543fd" + }, + { + "rel": "bookmark", + "href": "http://servers.api.openstack.org/1234/flavors/52415800-8b69-11e0-9b19-734f216543fd" + } + ] + }, + "addresses": { + "public": [ + { + "version": 4, + "addr": "67.23.10.132" + }, + { + "version": 6, + "addr": "::babe:67.23.10.132" + }, + { + "version": 4, + "addr": "67.23.10.131" + }, + { + "version": 6, + "addr": "::babe:4317:0A83" + } + ], + "private": [ + { + "version": 4, + "addr": "10.176.42.16" + }, + { + "version": 6, + "addr": "::babe:10.176.42.16" + } + ] + }, + "metadata": { + "Server Label": "Web Head 1", + "Image Version": "2.1" + }, + "links": [ + { + "rel": "self", + "href": "http://servers.api.openstack.org/v2/1234/servers/71752" + }, + { + "rel": "bookmark", + "href": "http://servers.api.openstack.org/1234/servers/71752" + } + ] + } +}
