@Override public AtomicReference<NodeMetadata> apply(AtomicReference<NodeAndNovaTemplateOptions> input) { checkState(nodeRunning.apply(input.get().getNodeMetadata()), "node never achieved state running %s", input.get().getNodeMetadata()); NodeMetadata node = input.get().getNodeMetadata().get(); // node's location is a host String regionId = node.getLocation().getParent().getId(); FloatingIPApi floatingIpApi = novaApi.getFloatingIPApi(regionId).get(); Optional<Set<String>> poolNames = input.get().getNovaTemplateOptions().get().getFloatingIpPoolNames(); Optional<FloatingIP> ip = allocateFloatingIPForNode(floatingIpApi, poolNames, node.getId()); if (!ip.isPresent()) { cleanupServer.apply(node.getId()); throw new InsufficientResourcesException("Failed to allocate a FloatingIP for node(" + node.getId() + ")"); } logger.debug(">> adding floatingIp(%s) to node(%s)", ip.get().getIp(), node.getId()); floatingIpApi.addToServer(ip.get().getIp(), node.getProviderId()); input.get().getNodeMetadata().set(NodeMetadataBuilder.fromNodeMetadata(node).publicAddresses(ImmutableSet.of(ip.get().getIp())).build()); floatingIpCache.asMap().putIfAbsent(RegionAndId.fromSlashEncoded(node.getId()), ImmutableList.of(ip.get())); return input.get().getNodeMetadata(); }
@Override public ZoneAndId apply(ZoneAndId id) { FloatingIPApi floatingIpApi = novaApi.getFloatingIPExtensionForZone(id.getZone()).get(); for (FloatingIP ip : floatingIpCache.getUnchecked(id)) { logger.debug(">> removing floatingIp(%s) from node(%s)", ip, id); floatingIpApi.removeFromServer(ip.getIp(), id.getId()); logger.debug(">> deallocating floatingIp(%s)", ip); floatingIpApi.delete(ip.getId()); } floatingIpCache.invalidate(id); return id; }
@Override public ZoneAndId apply(ZoneAndId id) { FloatingIPApi floatingIpApi = novaApi.getFloatingIPExtensionForZone(id.getZone()).get(); for (FloatingIP ip : floatingIpCache.getUnchecked(id)) { logger.debug(">> removing floatingIp(%s) from node(%s)", ip, id); floatingIpApi.removeFromServer(ip.getIp(), id.getId()); logger.debug(">> deallocating floatingIp(%s)", ip); floatingIpApi.delete(ip.getId()); } floatingIpCache.invalidate(id); return id; }
@Override public ZoneAndId apply(ZoneAndId id) { FloatingIPApi floatingIpApi = novaApi.getFloatingIPExtensionForZone(id.getZone()).get(); for (FloatingIP ip : floatingIpCache.getUnchecked(id)) { logger.debug(">> removing floatingIp(%s) from node(%s)", ip, id); floatingIpApi.removeFromServer(ip.getIp(), id.getId()); logger.debug(">> deallocating floatingIp(%s)", ip); floatingIpApi.delete(ip.getId()); } floatingIpCache.invalidate(id); return id; }
@Override public RegionAndId apply(RegionAndId id) { FloatingIPApi floatingIpApi = novaApi.getFloatingIPApi(id.getRegion()).get(); for (FloatingIP ip : floatingIpCache.getUnchecked(id)) { logger.debug(">> removing floatingIp(%s) from node(%s)", ip, id); floatingIpApi.removeFromServer(ip.getIp(), id.getId()); logger.debug(">> deallocating floatingIp(%s)", ip); floatingIpApi.delete(ip.getId()); } floatingIpCache.invalidate(id); return id; }
ip = Iterables.getLast(unassignedIps); logger.debug(">> adding floatingIp(%s) to node(%s)", ip.getIp(), node.getId()); floatingIpApi.addToServer(ip.getIp(), node.getProviderId()); input.set(NodeMetadataBuilder.fromNodeMetadata(node).publicAddresses(ImmutableSet.of(ip.getIp())).build()); floatingIpCache.invalidate(ZoneAndId.fromSlashEncoded(node.getId())); return input;
ip = Iterables.getLast(unassignedIps); logger.debug(">> adding floatingIp(%s) to node(%s)", ip.getIp(), node.getId()); floatingIpApi.addToServer(ip.getIp(), node.getProviderId()); input.set(NodeMetadataBuilder.fromNodeMetadata(node).publicAddresses(ImmutableSet.of(ip.getIp())).build()); floatingIpCache.invalidate(ZoneAndId.fromSlashEncoded(node.getId())); return input;
ip = Iterables.getLast(unassignedIps); logger.debug(">> adding floatingIp(%s) to node(%s)", ip.getIp(), node.getId()); floatingIpApi.addToServer(ip.getIp(), node.getProviderId()); input.set(NodeMetadataBuilder.fromNodeMetadata(node).publicAddresses(ImmutableSet.of(ip.getIp())).build()); floatingIpCache.invalidate(ZoneAndId.fromSlashEncoded(node.getId())); return input;
public org.jclouds.openstack.nova.v2_0.domain.FloatingIP associateFloationgIpToServer(String serverId, String poolName) { org.jclouds.openstack.nova.v2_0.domain.FloatingIP floatingIp = novaFloatingIPApi.allocateFromPool(poolName); novaFloatingIPApi.addToServer(floatingIp.getIp(), serverId); return floatingIp; }
public T fromFloatingIP(FloatingIP in) { return this .id(in.getId()) .ip(in.getIp()) .fixedIp(in.getFixedIp()) .instanceId(in.getInstanceId()); } }
@Test public void testListFloatingIPs() throws Exception { for (String zoneId : api.getConfiguredZones()) { Optional<? extends FloatingIPApi> apiOption = api.getFloatingIPExtensionForZone(zoneId); if (!apiOption.isPresent()) continue; FloatingIPApi api = apiOption.get(); Set<? extends FloatingIP> response = api.list().toSet(); assert null != response; assertTrue(response.size() >= 0); for (FloatingIP ip : response) { FloatingIP newDetails = api.get(ip.getId()); assertEquals(newDetails.getId(), ip.getId()); assertEquals(newDetails.getIp(), ip.getIp()); assertEquals(newDetails.getFixedIp(), ip.getFixedIp()); assertEquals(newDetails.getInstanceId(), ip.getInstanceId()); } } }
throw new InsufficientResourcesException("Failed to allocate a FloatingIP for node(" + node.getId() + ")"); logger.debug(">> adding floatingIp(%s) to node(%s)", ip.get().getIp(), node.getId()); floatingIpApi.addToServer(ip.get().getIp(), node.getProviderId()); input.get().getNodeMetadata().set(NodeMetadataBuilder.fromNodeMetadata(node).publicAddresses(ImmutableSet.of(ip.get().getIp())).build()); floatingIpCache.asMap().put(RegionAndId.fromSlashEncoded(node.getId()), ImmutableList.of(FloatingIpForServer.create(RegionAndId.fromSlashEncoded(node.getId()), ip.get().getId(), ip.get().getIp())));
public T fromFloatingIP(FloatingIP in) { return this .id(in.getId()) .ip(in.getIp()) .fixedIp(in.getFixedIp()) .instanceId(in.getInstanceId()); } }
public T fromFloatingIP(FloatingIP in) { return this .id(in.getId()) .ip(in.getIp()) .fixedIp(in.getFixedIp()) .instanceId(in.getInstanceId()); } }
@Test public void testListFloatingIPs() throws Exception { for (String regionId : api.getConfiguredRegions()) { Optional<? extends FloatingIPApi> apiOption = api.getFloatingIPApi(regionId); if (!apiOption.isPresent()) continue; FloatingIPApi api = apiOption.get(); Set<? extends FloatingIP> response = api.list().toSet(); assert null != response; assertTrue(response.size() > 0); for (FloatingIP ip : response) { FloatingIP newDetails = api.get(ip.getId()); assertEquals(newDetails.getId(), ip.getId()); assertEquals(newDetails.getIp(), ip.getIp()); assertEquals(newDetails.getFixedIp(), ip.getFixedIp()); assertEquals(newDetails.getInstanceId(), ip.getInstanceId()); assertEquals(newDetails.getPool(), ip.getPool()); } } }
@Test public void testAddAndRemoveFloatingIp() throws Exception { for (String zoneId : api.getConfiguredZones()) { Optional<? extends FloatingIPApi> apiOption = api.getFloatingIPExtensionForZone(zoneId); if (!apiOption.isPresent()) continue; FloatingIPApi api = apiOption.get(); ServerApi serverApi = this.api.getServerApiForZone(zoneId); Server server = createServerInZone(zoneId); FloatingIP floatingIP = api.create(); assertNotNull(floatingIP); try { api.addToServer(floatingIP.getIp(), server.getId()); assertEventually(new ServerHasFloatingIP(serverApi, server.getId(), floatingIP.getIp())); } finally { api.removeFromServer(floatingIP.getIp(), server.getId()); serverApi.delete(server.getId()); } } }
public T fromFloatingIP(FloatingIP in) { return this .id(in.getId()) .ip(in.getIp()) .fixedIp(in.getFixedIp()) .instanceId(in.getInstanceId()) .pool(in.getPool()); } }
public T fromFloatingIP(FloatingIP in) { return this .id(in.getId()) .ip(in.getIp()) .fixedIp(in.getFixedIp()) .instanceId(in.getInstanceId()) .pool(in.getPool()); } }
public T fromFloatingIP(FloatingIP in) { return this .id(in.getId()) .ip(in.getIp()) .fixedIp(in.getFixedIp()) .instanceId(in.getInstanceId()) .pool(in.getPool()); } }
@Test public void testAddAndRemoveFloatingIp() throws Exception { for (String regionId : api.getConfiguredRegions()) { Optional<? extends FloatingIPApi> apiOption = api.getFloatingIPApi(regionId); if (!apiOption.isPresent()) continue; FloatingIPApi api = apiOption.get(); ServerApi serverApi = this.api.getServerApi(regionId); Server server = createServerInRegion(regionId); FloatingIP floatingIP = api.create(); assertNotNull(floatingIP); try { api.addToServer(floatingIP.getIp(), server.getId()); assertEventually(new ServerHasFloatingIP(serverApi, server.getId(), floatingIP.getIp())); } finally { api.removeFromServer(floatingIP.getIp(), server.getId()); serverApi.delete(server.getId()); } } }