@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 void copyTo(TemplateOptions to) { super.copyTo(to); if (to instanceof NovaTemplateOptions) { NovaTemplateOptions eTo = NovaTemplateOptions.class.cast(to); eTo.autoAssignFloatingIp(shouldAutoAssignFloatingIp()); if (getFloatingIpPoolNames().isPresent()) eTo.floatingIpPoolNames(getFloatingIpPoolNames().get()); if (getSecurityGroupNames().isPresent()) eTo.securityGroupNames(getSecurityGroupNames().get()); eTo.generateKeyPair(shouldGenerateKeyPair()); eTo.keyPairName(getKeyPairName()); if (getUserData() != null) { eTo.userData(getUserData()); } if (getDiskConfig() != null) { eTo.diskConfig(getDiskConfig()); } eTo.configDrive(getConfigDrive()); eTo.novaNetworks(getNovaNetworks()); eTo.availabilityZone(getAvailabilityZone()); } }
Optional<Set<String>> poolNames = input.get().getNovaTemplateOptions().get().getFloatingIpPoolNames();
Optional<Set<String>> poolNames = input.get().getNovaTemplateOptions().get().getFloatingIpPoolNames();
@Override public void copyTo(TemplateOptions to) { super.copyTo(to); if (to instanceof NovaTemplateOptions) { NovaTemplateOptions eTo = NovaTemplateOptions.class.cast(to); eTo.autoAssignFloatingIp(shouldAutoAssignFloatingIp()); if (getFloatingIpPoolNames().isPresent()) eTo.floatingIpPoolNames(getFloatingIpPoolNames().get()); eTo.generateKeyPair(shouldGenerateKeyPair()); eTo.keyPairName(getKeyPairName()); if (getUserData() != null) { eTo.userData(getUserData()); } if (getDiskConfig() != null) { eTo.diskConfig(getDiskConfig()); } eTo.configDrive(getConfigDrive()); eTo.novaNetworks(getNovaNetworks()); eTo.availabilityZone(getAvailabilityZone()); eTo.blockDeviceMappings(getBlockDeviceMappings()); } }
@Override public void copyTo(TemplateOptions to) { super.copyTo(to); if (to instanceof NovaTemplateOptions) { NovaTemplateOptions eTo = NovaTemplateOptions.class.cast(to); eTo.autoAssignFloatingIp(shouldAutoAssignFloatingIp()); if (getFloatingIpPoolNames().isPresent()) eTo.floatingIpPoolNames(getFloatingIpPoolNames().get()); eTo.generateKeyPair(shouldGenerateKeyPair()); eTo.keyPairName(getKeyPairName()); if (getUserData() != null) { eTo.userData(getUserData()); } if (getDiskConfig() != null) { eTo.diskConfig(getDiskConfig()); } eTo.configDrive(getConfigDrive()); eTo.novaNetworks(getNovaNetworks()); eTo.availabilityZone(getAvailabilityZone()); eTo.blockDeviceMappings(getBlockDeviceMappings()); } }