mirror of https://github.com/apache/jclouds.git
Issue 112: added getIpAddressesForNetwork
git-svn-id: http://jclouds.googlecode.com/svn/trunk@2492 3d8758e0-26b5-11de-8745-db77d3ebf521
This commit is contained in:
parent
bdb38fdf23
commit
29e92bfe60
|
@ -23,6 +23,7 @@
|
||||||
*/
|
*/
|
||||||
package org.jclouds.vcloud.terremark;
|
package org.jclouds.vcloud.terremark;
|
||||||
|
|
||||||
|
import static javax.ws.rs.core.MediaType.APPLICATION_XML;
|
||||||
import static org.jclouds.vcloud.VCloudMediaType.VAPP_XML;
|
import static org.jclouds.vcloud.VCloudMediaType.VAPP_XML;
|
||||||
import static org.jclouds.vcloud.VCloudMediaType.VDC_XML;
|
import static org.jclouds.vcloud.VCloudMediaType.VDC_XML;
|
||||||
|
|
||||||
|
@ -37,7 +38,6 @@ import javax.ws.rs.POST;
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
import javax.ws.rs.PathParam;
|
import javax.ws.rs.PathParam;
|
||||||
import javax.ws.rs.Produces;
|
import javax.ws.rs.Produces;
|
||||||
import javax.ws.rs.core.MediaType;
|
|
||||||
|
|
||||||
import org.jclouds.rest.annotations.Endpoint;
|
import org.jclouds.rest.annotations.Endpoint;
|
||||||
import org.jclouds.rest.annotations.ExceptionParser;
|
import org.jclouds.rest.annotations.ExceptionParser;
|
||||||
|
@ -56,6 +56,7 @@ import org.jclouds.vcloud.terremark.binders.TerremarkBindInstantiateVAppTemplate
|
||||||
import org.jclouds.vcloud.terremark.domain.ComputeOptions;
|
import org.jclouds.vcloud.terremark.domain.ComputeOptions;
|
||||||
import org.jclouds.vcloud.terremark.domain.CustomizationParameters;
|
import org.jclouds.vcloud.terremark.domain.CustomizationParameters;
|
||||||
import org.jclouds.vcloud.terremark.domain.InternetService;
|
import org.jclouds.vcloud.terremark.domain.InternetService;
|
||||||
|
import org.jclouds.vcloud.terremark.domain.IpAddress;
|
||||||
import org.jclouds.vcloud.terremark.domain.Node;
|
import org.jclouds.vcloud.terremark.domain.Node;
|
||||||
import org.jclouds.vcloud.terremark.domain.Protocol;
|
import org.jclouds.vcloud.terremark.domain.Protocol;
|
||||||
import org.jclouds.vcloud.terremark.domain.PublicIpAddress;
|
import org.jclouds.vcloud.terremark.domain.PublicIpAddress;
|
||||||
|
@ -67,6 +68,7 @@ import org.jclouds.vcloud.terremark.xml.ComputeOptionsHandler;
|
||||||
import org.jclouds.vcloud.terremark.xml.CustomizationParametersHandler;
|
import org.jclouds.vcloud.terremark.xml.CustomizationParametersHandler;
|
||||||
import org.jclouds.vcloud.terremark.xml.InternetServiceHandler;
|
import org.jclouds.vcloud.terremark.xml.InternetServiceHandler;
|
||||||
import org.jclouds.vcloud.terremark.xml.InternetServicesHandler;
|
import org.jclouds.vcloud.terremark.xml.InternetServicesHandler;
|
||||||
|
import org.jclouds.vcloud.terremark.xml.IpAddressesHandler;
|
||||||
import org.jclouds.vcloud.terremark.xml.NodeHandler;
|
import org.jclouds.vcloud.terremark.xml.NodeHandler;
|
||||||
import org.jclouds.vcloud.terremark.xml.NodesHandler;
|
import org.jclouds.vcloud.terremark.xml.NodesHandler;
|
||||||
import org.jclouds.vcloud.terremark.xml.PublicIpAddressesHandler;
|
import org.jclouds.vcloud.terremark.xml.PublicIpAddressesHandler;
|
||||||
|
@ -104,7 +106,7 @@ public interface TerremarkVCloudAsyncClient extends VCloudAsyncClient {
|
||||||
Future<? extends VDC> getVDC(@PathParam("vDCId") String vDCId);
|
Future<? extends VDC> getVDC(@PathParam("vDCId") String vDCId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see TerremarkVCloudClient#instantiateVAppTemplate
|
* @see TerremarkVCloudClient#instantiateVAppTemplateInVDC
|
||||||
*/
|
*/
|
||||||
@POST
|
@POST
|
||||||
@Endpoint(org.jclouds.vcloud.endpoints.VCloudApi.class)
|
@Endpoint(org.jclouds.vcloud.endpoints.VCloudApi.class)
|
||||||
|
@ -124,7 +126,7 @@ public interface TerremarkVCloudAsyncClient extends VCloudAsyncClient {
|
||||||
@POST
|
@POST
|
||||||
@Endpoint(org.jclouds.vcloud.endpoints.VCloudApi.class)
|
@Endpoint(org.jclouds.vcloud.endpoints.VCloudApi.class)
|
||||||
@Path("/vdc/{vDCId}/internetServices")
|
@Path("/vdc/{vDCId}/internetServices")
|
||||||
@Produces(MediaType.APPLICATION_XML)
|
@Produces(APPLICATION_XML)
|
||||||
@XMLResponseParser(InternetServiceHandler.class)
|
@XMLResponseParser(InternetServiceHandler.class)
|
||||||
@MapBinder(AddInternetServiceOptions.class)
|
@MapBinder(AddInternetServiceOptions.class)
|
||||||
Future<? extends InternetService> addInternetServiceToVDC(@PathParam("vDCId") String vDCId,
|
Future<? extends InternetService> addInternetServiceToVDC(@PathParam("vDCId") String vDCId,
|
||||||
|
@ -148,7 +150,7 @@ public interface TerremarkVCloudAsyncClient extends VCloudAsyncClient {
|
||||||
@POST
|
@POST
|
||||||
@Endpoint(org.jclouds.vcloud.endpoints.VCloudApi.class)
|
@Endpoint(org.jclouds.vcloud.endpoints.VCloudApi.class)
|
||||||
@Path("/publicIps/{ipId}/InternetServices")
|
@Path("/publicIps/{ipId}/InternetServices")
|
||||||
@Produces(MediaType.APPLICATION_XML)
|
@Produces(APPLICATION_XML)
|
||||||
@XMLResponseParser(InternetServiceHandler.class)
|
@XMLResponseParser(InternetServiceHandler.class)
|
||||||
@MapBinder(AddInternetServiceOptions.class)
|
@MapBinder(AddInternetServiceOptions.class)
|
||||||
Future<? extends InternetService> addInternetServiceToExistingIp(
|
Future<? extends InternetService> addInternetServiceToExistingIp(
|
||||||
|
@ -218,7 +220,7 @@ public interface TerremarkVCloudAsyncClient extends VCloudAsyncClient {
|
||||||
@POST
|
@POST
|
||||||
@Endpoint(org.jclouds.vcloud.endpoints.VCloudApi.class)
|
@Endpoint(org.jclouds.vcloud.endpoints.VCloudApi.class)
|
||||||
@Path("/internetServices/{internetServiceId}/nodes")
|
@Path("/internetServices/{internetServiceId}/nodes")
|
||||||
@Produces(MediaType.APPLICATION_XML)
|
@Produces(APPLICATION_XML)
|
||||||
@XMLResponseParser(NodeHandler.class)
|
@XMLResponseParser(NodeHandler.class)
|
||||||
@MapBinder(AddNodeOptions.class)
|
@MapBinder(AddNodeOptions.class)
|
||||||
Future<? extends Node> addNode(
|
Future<? extends Node> addNode(
|
||||||
|
@ -303,4 +305,15 @@ public interface TerremarkVCloudAsyncClient extends VCloudAsyncClient {
|
||||||
@XMLResponseParser(CustomizationParametersHandler.class)
|
@XMLResponseParser(CustomizationParametersHandler.class)
|
||||||
Future<? extends CustomizationParameters> getCustomizationOptionsOfCatalogItem(
|
Future<? extends CustomizationParameters> getCustomizationOptionsOfCatalogItem(
|
||||||
@PathParam("catalogItemId") String catalogItemId);
|
@PathParam("catalogItemId") String catalogItemId);
|
||||||
|
/**
|
||||||
|
* @see TerremarkVCloudClient#getIpAddressesForNetwork
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Endpoint(org.jclouds.vcloud.endpoints.VCloudApi.class)
|
||||||
|
@Path("/network/{networkId}/ipAddresses")
|
||||||
|
@Consumes(APPLICATION_XML)
|
||||||
|
@XMLResponseParser(IpAddressesHandler.class)
|
||||||
|
Future<? extends SortedSet<IpAddress>> getIpAddressesForNetwork(
|
||||||
|
@PathParam("networkId") String networkId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@ import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
|
||||||
import org.jclouds.vcloud.terremark.domain.ComputeOptions;
|
import org.jclouds.vcloud.terremark.domain.ComputeOptions;
|
||||||
import org.jclouds.vcloud.terremark.domain.CustomizationParameters;
|
import org.jclouds.vcloud.terremark.domain.CustomizationParameters;
|
||||||
import org.jclouds.vcloud.terremark.domain.InternetService;
|
import org.jclouds.vcloud.terremark.domain.InternetService;
|
||||||
|
import org.jclouds.vcloud.terremark.domain.IpAddress;
|
||||||
import org.jclouds.vcloud.terremark.domain.Node;
|
import org.jclouds.vcloud.terremark.domain.Node;
|
||||||
import org.jclouds.vcloud.terremark.domain.Protocol;
|
import org.jclouds.vcloud.terremark.domain.Protocol;
|
||||||
import org.jclouds.vcloud.terremark.domain.PublicIpAddress;
|
import org.jclouds.vcloud.terremark.domain.PublicIpAddress;
|
||||||
|
@ -134,4 +135,6 @@ public interface TerremarkVCloudClient extends VCloudClient {
|
||||||
|
|
||||||
SortedSet<Node> getNodes(int internetServiceId);
|
SortedSet<Node> getNodes(int internetServiceId);
|
||||||
|
|
||||||
|
SortedSet<IpAddress> getIpAddressesForNetwork(String networkId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,128 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.vcloud.terremark.domain;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
|
import java.net.InetAddress;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.google.common.base.CaseFormat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
public class IpAddress implements Comparable<IpAddress> {
|
||||||
|
|
||||||
|
public static enum Status {
|
||||||
|
AVAILABLE, ASSIGNED;
|
||||||
|
public String value() {
|
||||||
|
return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, name());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return value();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Status fromValue(String status) {
|
||||||
|
return valueOf(CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, checkNotNull(status,
|
||||||
|
"status")));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private final InetAddress address;
|
||||||
|
private final Status status;
|
||||||
|
@Nullable
|
||||||
|
private final String server;
|
||||||
|
|
||||||
|
public IpAddress(InetAddress address, Status status, String server) {
|
||||||
|
this.address = address;
|
||||||
|
this.status = status;
|
||||||
|
this.server = server;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InetAddress getAddress() {
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Status getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getServer() {
|
||||||
|
return server;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "IpAddress [address=" + address + ", server=" + server + ", status=" + status + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(IpAddress o) {
|
||||||
|
return (this == o) ? 0 : getAddress().getHostAddress().compareTo(
|
||||||
|
o.getAddress().getHostAddress());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + ((address == null) ? 0 : address.hashCode());
|
||||||
|
result = prime * result + ((server == null) ? 0 : server.hashCode());
|
||||||
|
result = prime * result + ((status == null) ? 0 : status.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
IpAddress other = (IpAddress) obj;
|
||||||
|
if (address == null) {
|
||||||
|
if (other.address != null)
|
||||||
|
return false;
|
||||||
|
} else if (!address.equals(other.address))
|
||||||
|
return false;
|
||||||
|
if (server == null) {
|
||||||
|
if (other.server != null)
|
||||||
|
return false;
|
||||||
|
} else if (!server.equals(other.server))
|
||||||
|
return false;
|
||||||
|
if (status == null) {
|
||||||
|
if (other.status != null)
|
||||||
|
return false;
|
||||||
|
} else if (!status.equals(other.status))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,112 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.vcloud.terremark.xml;
|
||||||
|
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.util.SortedSet;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import org.jclouds.http.functions.ParseSax;
|
||||||
|
import org.jclouds.logging.Logger;
|
||||||
|
import org.jclouds.vcloud.terremark.domain.IpAddress;
|
||||||
|
import org.jclouds.vcloud.terremark.domain.IpAddress.Status;
|
||||||
|
import org.xml.sax.Attributes;
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
public class IpAddressesHandler extends ParseSax.HandlerWithResult<SortedSet<IpAddress>> {
|
||||||
|
protected StringBuilder currentText = new StringBuilder();
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
protected Logger logger = Logger.NULL;
|
||||||
|
|
||||||
|
private SortedSet<IpAddress> addresses = Sets.newTreeSet();
|
||||||
|
private InetAddress address;
|
||||||
|
private Status status;
|
||||||
|
@Nullable
|
||||||
|
private String server;
|
||||||
|
private boolean skip;
|
||||||
|
|
||||||
|
public SortedSet<IpAddress> getResult() {
|
||||||
|
return addresses;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void startElement(String uri, String localName, String qName, Attributes attributes)
|
||||||
|
throws SAXException {
|
||||||
|
if (attributes.getIndex("xsi:nil") != -1) {
|
||||||
|
skip = true;
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
skip = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void endElement(String uri, String localName, String qName) throws SAXException {
|
||||||
|
if (qName.equals("Name")) {
|
||||||
|
address = parseInetAddress(currentOrNull());
|
||||||
|
} else if (qName.equals("Status")) {
|
||||||
|
status = IpAddress.Status.fromValue(currentOrNull());
|
||||||
|
} else if (!skip && qName.equals("Server")) {
|
||||||
|
server = currentOrNull();
|
||||||
|
} else if (qName.equals("IpAddress")) {
|
||||||
|
addresses.add(new IpAddress(address, status, server));
|
||||||
|
address = null;
|
||||||
|
status = null;
|
||||||
|
server = null;
|
||||||
|
}
|
||||||
|
currentText = new StringBuilder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void characters(char ch[], int start, int length) {
|
||||||
|
currentText.append(ch, start, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String currentOrNull() {
|
||||||
|
String returnVal = currentText.toString().trim();
|
||||||
|
return returnVal.equals("") ? null : returnVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
private InetAddress parseInetAddress(String string) {
|
||||||
|
String[] byteStrings = string.split("\\.");
|
||||||
|
byte[] bytes = new byte[4];
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
bytes[i] = (byte) Integer.parseInt(byteStrings[i]);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return InetAddress.getByAddress(bytes);
|
||||||
|
} catch (UnknownHostException e) {
|
||||||
|
logger.warn(e, "error parsing ipAddress", currentText);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -24,9 +24,7 @@
|
||||||
package org.jclouds.vcloud.terremark.xml;
|
package org.jclouds.vcloud.terremark.xml;
|
||||||
|
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.URI;
|
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.SortedSet;
|
import java.util.SortedSet;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
@ -38,8 +36,6 @@ import org.jclouds.vcloud.VCloudMediaType;
|
||||||
import org.jclouds.vcloud.domain.NamedResource;
|
import org.jclouds.vcloud.domain.NamedResource;
|
||||||
import org.jclouds.vcloud.domain.ResourceAllocation;
|
import org.jclouds.vcloud.domain.ResourceAllocation;
|
||||||
import org.jclouds.vcloud.domain.VAppStatus;
|
import org.jclouds.vcloud.domain.VAppStatus;
|
||||||
import org.jclouds.vcloud.domain.internal.NamedResourceImpl;
|
|
||||||
import org.jclouds.vcloud.endpoints.internal.VAppRoot;
|
|
||||||
import org.jclouds.vcloud.terremark.domain.TerremarkVApp;
|
import org.jclouds.vcloud.terremark.domain.TerremarkVApp;
|
||||||
import org.jclouds.vcloud.terremark.domain.TerremarkVirtualSystem;
|
import org.jclouds.vcloud.terremark.domain.TerremarkVirtualSystem;
|
||||||
import org.jclouds.vcloud.terremark.domain.internal.TerremarkVAppImpl;
|
import org.jclouds.vcloud.terremark.domain.internal.TerremarkVAppImpl;
|
||||||
|
@ -82,14 +78,11 @@ public class TerremarkVAppHandler extends ParseSax.HandlerWithResult<TerremarkVA
|
||||||
private String operatingSystemDescription;
|
private String operatingSystemDescription;
|
||||||
private boolean inOs;
|
private boolean inOs;
|
||||||
private String networkName;
|
private String networkName;
|
||||||
@Inject
|
|
||||||
@VAppRoot
|
|
||||||
private String vAppRoot;
|
|
||||||
|
|
||||||
public TerremarkVApp getResult() {
|
public TerremarkVApp getResult() {
|
||||||
return new TerremarkVAppImpl(vApp.getId(), vApp.getName(), vApp.getType(), vApp.getLocation(), status,
|
return new TerremarkVAppImpl(vApp.getId(), vApp.getName(), vApp.getType(),
|
||||||
size, vDC, computeOptions, customizationOptions, networkToAddresses,
|
vApp.getLocation(), status, size, vDC, computeOptions, customizationOptions,
|
||||||
operatingSystemDescription, system, allocations);
|
networkToAddresses, operatingSystemDescription, system, allocations);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startElement(String uri, String localName, String qName, Attributes attributes)
|
public void startElement(String uri, String localName, String qName, Attributes attributes)
|
||||||
|
@ -110,7 +103,7 @@ public class TerremarkVAppHandler extends ParseSax.HandlerWithResult<TerremarkVA
|
||||||
this.customizationOptions = Utils.newNamedResource(attributes);
|
this.customizationOptions = Utils.newNamedResource(attributes);
|
||||||
}
|
}
|
||||||
} else if (qName.equals("VApp")) {
|
} else if (qName.equals("VApp")) {
|
||||||
vApp = newNamedResource(attributes);
|
vApp = Utils.newNamedResource(attributes);
|
||||||
status = VAppStatus.fromValue(attributes.getValue(attributes.getIndex("status")));
|
status = VAppStatus.fromValue(attributes.getValue(attributes.getIndex("status")));
|
||||||
size = Integer.parseInt(attributes.getValue(attributes.getIndex("size")));
|
size = Integer.parseInt(attributes.getValue(attributes.getIndex("size")));
|
||||||
} else if (qName.equals("OperatingSystemSection")) {
|
} else if (qName.equals("OperatingSystemSection")) {
|
||||||
|
@ -166,14 +159,4 @@ public class TerremarkVAppHandler extends ParseSax.HandlerWithResult<TerremarkVA
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public NamedResource newNamedResource(Attributes attributes) {
|
|
||||||
return new NamedResourceImpl(attributes.getValue(attributes.getIndex("href")).replace(
|
|
||||||
vAppRoot + "/", ""), attributes.getValue(attributes.getIndex("name")), attributes
|
|
||||||
.getValue(attributes.getIndex("type")), URI.create(attributes.getValue(attributes
|
|
||||||
.getIndex("href"))));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void putNamedResource(Map<String, NamedResource> map, Attributes attributes) {
|
|
||||||
map.put(attributes.getValue(attributes.getIndex("name")), newNamedResource(attributes));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,7 @@ import org.jclouds.vcloud.terremark.xml.ComputeOptionsHandler;
|
||||||
import org.jclouds.vcloud.terremark.xml.CustomizationParametersHandler;
|
import org.jclouds.vcloud.terremark.xml.CustomizationParametersHandler;
|
||||||
import org.jclouds.vcloud.terremark.xml.InternetServiceHandler;
|
import org.jclouds.vcloud.terremark.xml.InternetServiceHandler;
|
||||||
import org.jclouds.vcloud.terremark.xml.InternetServicesHandler;
|
import org.jclouds.vcloud.terremark.xml.InternetServicesHandler;
|
||||||
|
import org.jclouds.vcloud.terremark.xml.IpAddressesHandler;
|
||||||
import org.jclouds.vcloud.terremark.xml.NodeHandler;
|
import org.jclouds.vcloud.terremark.xml.NodeHandler;
|
||||||
import org.jclouds.vcloud.terremark.xml.NodesHandler;
|
import org.jclouds.vcloud.terremark.xml.NodesHandler;
|
||||||
import org.jclouds.vcloud.terremark.xml.TerremarkVAppHandler;
|
import org.jclouds.vcloud.terremark.xml.TerremarkVAppHandler;
|
||||||
|
@ -81,7 +82,24 @@ import com.google.inject.TypeLiteral;
|
||||||
*/
|
*/
|
||||||
@Test(groups = "unit", sequential = true, testName = "vcloud.TerremarkVCloudAsyncClientTest")
|
@Test(groups = "unit", sequential = true, testName = "vcloud.TerremarkVCloudAsyncClientTest")
|
||||||
public class TerremarkVCloudAsyncClientTest extends RestClientTest<TerremarkVCloudAsyncClient> {
|
public class TerremarkVCloudAsyncClientTest extends RestClientTest<TerremarkVCloudAsyncClient> {
|
||||||
|
|
||||||
|
|
||||||
|
public void testGetIpAddressesForNetwork() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = TerremarkVCloudAsyncClient.class.getMethod("getIpAddressesForNetwork", String.class);
|
||||||
|
GeneratedHttpRequest<TerremarkVCloudAsyncClient> httpMethod = processor.createRequest(method, "2");
|
||||||
|
|
||||||
|
assertRequestLineEquals(httpMethod, "GET http://vcloud/network/2/ipAddresses HTTP/1.1");
|
||||||
|
assertHeadersEqual(httpMethod, "Accept: application/xml\n");
|
||||||
|
assertPayloadEquals(httpMethod, null);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, httpMethod, ParseSax.class);
|
||||||
|
assertSaxResponseParserClassEquals(method, IpAddressesHandler.class);
|
||||||
|
assertExceptionParserClassEquals(method, null);
|
||||||
|
|
||||||
|
checkFilters(httpMethod);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void testGetDefaultVDC() throws SecurityException, NoSuchMethodException, IOException {
|
public void testGetDefaultVDC() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
Method method = TerremarkVCloudAsyncClient.class.getMethod("getDefaultVDC");
|
Method method = TerremarkVCloudAsyncClient.class.getMethod("getDefaultVDC");
|
||||||
GeneratedHttpRequest<TerremarkVCloudAsyncClient> httpMethod = processor.createRequest(method);
|
GeneratedHttpRequest<TerremarkVCloudAsyncClient> httpMethod = processor.createRequest(method);
|
||||||
|
|
|
@ -54,11 +54,13 @@ import org.jclouds.vcloud.domain.NamedResource;
|
||||||
import org.jclouds.vcloud.domain.ResourceType;
|
import org.jclouds.vcloud.domain.ResourceType;
|
||||||
import org.jclouds.vcloud.domain.Task;
|
import org.jclouds.vcloud.domain.Task;
|
||||||
import org.jclouds.vcloud.domain.VAppStatus;
|
import org.jclouds.vcloud.domain.VAppStatus;
|
||||||
|
import org.jclouds.vcloud.domain.VDC;
|
||||||
import org.jclouds.vcloud.options.CloneVAppOptions;
|
import org.jclouds.vcloud.options.CloneVAppOptions;
|
||||||
import org.jclouds.vcloud.predicates.TaskSuccess;
|
import org.jclouds.vcloud.predicates.TaskSuccess;
|
||||||
import org.jclouds.vcloud.terremark.domain.ComputeOptions;
|
import org.jclouds.vcloud.terremark.domain.ComputeOptions;
|
||||||
import org.jclouds.vcloud.terremark.domain.CustomizationParameters;
|
import org.jclouds.vcloud.terremark.domain.CustomizationParameters;
|
||||||
import org.jclouds.vcloud.terremark.domain.InternetService;
|
import org.jclouds.vcloud.terremark.domain.InternetService;
|
||||||
|
import org.jclouds.vcloud.terremark.domain.IpAddress;
|
||||||
import org.jclouds.vcloud.terremark.domain.Node;
|
import org.jclouds.vcloud.terremark.domain.Node;
|
||||||
import org.jclouds.vcloud.terremark.domain.Protocol;
|
import org.jclouds.vcloud.terremark.domain.Protocol;
|
||||||
import org.jclouds.vcloud.terremark.domain.PublicIpAddress;
|
import org.jclouds.vcloud.terremark.domain.PublicIpAddress;
|
||||||
|
@ -96,6 +98,17 @@ public class TerremarkVCloudClientLiveTest extends VCloudClientLiveTest {
|
||||||
|
|
||||||
public static final String PREFIX = System.getProperty("user.name") + "-terremark";
|
public static final String PREFIX = System.getProperty("user.name") + "-terremark";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetIpAddressesForNetwork() throws Exception {
|
||||||
|
VDC response = tmClient.getDefaultVDC();
|
||||||
|
for (NamedResource resource : response.getAvailableNetworks().values()) {
|
||||||
|
if (resource.getType().equals(VCloudMediaType.NETWORK_XML)) {
|
||||||
|
SortedSet<IpAddress> addresses = tmClient.getIpAddressesForNetwork(resource.getId());
|
||||||
|
assertNotNull(addresses);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetAllInternetServices() throws Exception {
|
public void testGetAllInternetServices() throws Exception {
|
||||||
for (InternetService service : tmClient.getAllInternetServicesInVDC(tmClient.getDefaultVDC()
|
for (InternetService service : tmClient.getAllInternetServicesInVDC(tmClient.getDefaultVDC()
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.vcloud.terremark.xml;
|
||||||
|
|
||||||
|
import static org.testng.Assert.assertEquals;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.util.SortedSet;
|
||||||
|
|
||||||
|
import org.jclouds.http.functions.BaseHandlerTest;
|
||||||
|
import org.jclouds.vcloud.terremark.domain.IpAddress;
|
||||||
|
import org.jclouds.vcloud.terremark.domain.IpAddress.Status;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableSortedSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests behavior of {@code IpAddressesHandler}
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@Test(groups = "unit", testName = "vcloud.IpAddressesHandlerTest")
|
||||||
|
public class IpAddressesHandlerTest extends BaseHandlerTest {
|
||||||
|
|
||||||
|
public void test1() throws UnknownHostException {
|
||||||
|
InputStream is = getClass().getResourceAsStream("/terremark/ipAddresses.xml");
|
||||||
|
|
||||||
|
SortedSet<IpAddress> result = factory.create(injector.getInstance(IpAddressesHandler.class))
|
||||||
|
.parse(is);
|
||||||
|
assertEquals(result, ImmutableSortedSet.of(new IpAddress(InetAddress
|
||||||
|
.getByName("10.114.34.131"), Status.ASSIGNED, "testforjcloud2"), new IpAddress(
|
||||||
|
InetAddress.getByName("10.114.34.132"), Status.AVAILABLE, null)));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
<IpAddresses xmlns="urn:tmrk:vCloudExpress-1.0"
|
||||||
|
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<IpAddress>
|
||||||
|
<Name>10.114.34.131</Name>
|
||||||
|
<Status>Assigned</Status>
|
||||||
|
<Server>testforjcloud2</Server>
|
||||||
|
</IpAddress>
|
||||||
|
<IpAddress>
|
||||||
|
<Name>10.114.34.132</Name>
|
||||||
|
<Status>Available</Status>
|
||||||
|
<Server i:nil="true" />
|
||||||
|
</IpAddress>
|
||||||
|
</IpAddresses>
|
Loading…
Reference in New Issue