use of com.woorea.openstack.nova.model.FloatingIps in project AJSC by att.
the class OpenStackNetworkService method reserveFreeFloatingIPAddress.
/**
* This method is used o determine which IP addresses in the floating ip address pool specified are free, and to
* reserve the first one
*
* @param pool
* The name of the pool to be searched, or null if we are searching all pools available to the tenant
* @return The reserved IP address (or null if there are none available in the pool)
* @throws OpenStackResponseException
* @throws OpenStackConnectException
*/
@SuppressWarnings("nls")
private String reserveFreeFloatingIPAddress(String pool) throws OpenStackConnectException, OpenStackResponseException {
Nova client = novaConnector.getClient();
HashSet<String> available = new HashSet<>();
Context context = getContext();
FloatingIps ips = client.floatingIps().list().execute();
for (FloatingIp ip : ips.getList()) {
if (pool == null || pool.equalsIgnoreCase(ip.getPool())) {
available.add(ip.getIp());
}
}
Servers servers = client.servers().list(true).execute();
for (com.woorea.openstack.nova.model.Server server : servers.getList()) {
Addresses allocatedAddresses = server.getAddresses();
Map<String, List<Address>> addressMap = allocatedAddresses.getAddresses();
for (Map.Entry<String, List<Address>> entry : addressMap.entrySet()) {
List<Address> addressList = entry.getValue();
for (Address address : addressList) {
if (address.getType().equalsIgnoreCase("floating")) {
available.remove(address.getAddr());
}
}
}
}
if (!available.isEmpty()) {
Iterator<String> it = available.iterator();
while (it.hasNext()) {
String ip = it.next();
if (((OpenStackContext) context).allocateFloatingIP(ip)) {
return ip;
}
}
}
return null;
}
use of com.woorea.openstack.nova.model.FloatingIps in project AJSC by att.
the class OpenStackNetworkService method getAvailableAddresses.
/**
* This method allows the caller to obtain a list of the available IP addresses from the Floating IP address (DNS)
* pool.
*
* @return The list of available IP Addresses that can be used to assign a floating IP address to a server.
* @throws ZoneException
* If the service is not available or the pool cannot be obtained
* @see com.att.cdp.zones.NetworkService#getAvailableAddresses(java.lang.String)
*/
@SuppressWarnings("nls")
@Override
public List<String> getAvailableAddresses(String pool) throws ZoneException {
checkArg(pool, "pool");
connect();
Context context = getContext();
trackRequest();
RequestState.put(RequestState.POOL, pool);
RequestState.put(RequestState.SERVICE, "Compute");
RequestState.put(RequestState.SERVICE_URL, novaConnector.getEndpoint());
ArrayList<String> addresses = new ArrayList<>();
FloatingIpsExtension extension = novaConnector.getClient().floatingIps();
if (extension == null) {
throw new NotSupportedException(EELFResourceManager.format(OSMsg.PAL_OS_UNSUPPORTED_OPERATION, "getAvailableAddresses", context.getProvider().getName()));
}
try {
FloatingIps ips = extension.list().execute();
for (FloatingIp ip : ips) {
if (ip.getPool().equalsIgnoreCase(pool)) {
String ipAddress = ip.getIp();
addresses.add(ipAddress);
}
}
} catch (OpenStackBaseException ex) {
ExceptionMapper.mapException(ex);
}
return addresses;
}
Aggregations