http://git-wip-us.apache.org/repos/asf/stratos/blob/295c545c/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/compute/strategy/InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/compute/strategy/InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/compute/strategy/InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java deleted file mode 100644 index 73868fb..0000000 --- a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/compute/strategy/InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.java +++ /dev/null @@ -1,497 +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.vcloud.compute.strategy; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Predicates.not; -import static com.google.common.collect.Iterables.find; -import static com.google.common.collect.Iterables.get; -import static org.jclouds.compute.util.ComputeServiceUtils.getCores; -import static org.jclouds.compute.util.ComputeServiceUtils.metadataAndTagsAsCommaDelimitedValue; -import static org.jclouds.util.Predicates2.retry; -import static org.jclouds.vcloud.compute.util.VCloudComputeUtils.getCredentialsFrom; -import static java.util.concurrent.TimeUnit.SECONDS; - -import java.net.URI; -import java.net.URISyntaxException; -import java.util.*; - -import javax.annotation.Resource; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; -import org.jclouds.cim.ResourceAllocationSettingData; -import org.jclouds.compute.ComputeServiceAdapter.NodeAndInitialCredentials; -import org.jclouds.compute.domain.Template; -import org.jclouds.compute.reference.ComputeServiceConstants; -import org.jclouds.javax.annotation.Nullable; -import org.jclouds.logging.Logger; -import org.jclouds.ovf.Network; -import org.jclouds.predicates.validators.DnsNameValidator; -import org.jclouds.rest.annotations.BuildVersion; -import org.jclouds.vcloud.TaskStillRunningException; -import org.jclouds.vcloud.VCloudApi; -import org.jclouds.vcloud.compute.options.VCloudTemplateOptions; -import org.jclouds.vcloud.domain.*; -import org.jclouds.vcloud.domain.NetworkConnectionSection.Builder; -import org.jclouds.vcloud.domain.internal.VmImpl; -import org.jclouds.vcloud.domain.network.IpAddressAllocationMode; -import org.jclouds.vcloud.domain.network.NetworkConfig; -import org.jclouds.vcloud.domain.ovf.VCloudNetworkAdapter; -import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Joiner; -import com.google.common.base.Predicate; -import com.google.common.cache.LoadingCache; -import com.google.common.collect.ImmutableSet; -import org.jclouds.vcloud.predicates.TaskSuccess; - -@Singleton -public class InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn { - @Resource - @Named(ComputeServiceConstants.COMPUTE_LOGGER) - protected Logger logger = Logger.NULL; - - protected final VCloudApi client; - protected final Predicate<URI> successTester; - protected final LoadingCache<URI, VAppTemplate> vAppTemplates; - protected final NetworkConfigurationForNetworkAndOptions networkConfigurationForNetworkAndOptions; - protected final String buildVersion; - - - @Inject - protected InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn(VCloudApi client, - Predicate<URI> successTester, LoadingCache<URI, VAppTemplate> vAppTemplates, NetworkConfigurationForNetworkAndOptions networkConfigurationForNetworkAndOptions, - @BuildVersion String buildVersion) { - this.client = client; - this.successTester = successTester; - this.vAppTemplates = vAppTemplates; - this.networkConfigurationForNetworkAndOptions = networkConfigurationForNetworkAndOptions; - this.buildVersion = buildVersion; - } - - /** - * per john ellis at bluelock, vCloud Director 1.5 is more strict than earlier versions. - * <p/> - * It appears to be 15 characters to match Windows' hostname limitation. Must be alphanumeric, at - * least one non-number character and hyphens and underscores are the only non-alpha character - * allowed. - */ - public static enum ComputerNameValidator { - INSTANCE; - - private DnsNameValidator validator; - - ComputerNameValidator() { - this.validator = new DnsNameValidator(3, 15); - } - - public void validate(@Nullable String t) throws IllegalArgumentException { - this.validator.validate(t); - } - - } - - public NodeAndInitialCredentials<VApp> createNodeWithGroupEncodedIntoName(String group, String name, Template template) { - // no sense waiting until failures occur later - ComputerNameValidator.INSTANCE.validate(name); - VApp vAppResponse = instantiateVAppFromTemplate(name, template); - waitForTask(vAppResponse.getTasks().get(0)); - logger.debug("<< instantiated VApp(%s)", vAppResponse.getName()); - - // vm data is available after instantiate completes - vAppResponse = client.getVAppApi().getVApp(vAppResponse.getHref()); - - // per above check, we know there is only a single VM - Vm vm = get(vAppResponse.getChildren(), 0); - - template.getOptions().userMetadata(ComputeServiceConstants.NODE_GROUP_KEY, group); - VCloudTemplateOptions vOptions = VCloudTemplateOptions.class.cast(template.getOptions()); - - // note we cannot do tasks in parallel or VCD will throw "is busy" errors - - // note we must do this before any other customizations as there is a dependency on - // valid naming conventions before you can perform commands such as updateCPUCount - logger.trace(">> updating customization vm(%s) name->(%s)", vm.getName(), name); - waitForTask(updateVmWithNameAndCustomizationScript(vm, name, vOptions.getCustomizationScript())); - logger.trace("<< updated customization vm(%s)", name); - - ensureVmHasDesiredNetworkConnectionSettings(vAppResponse, vOptions); - - int cpuCount = (int) getCores(template.getHardware()); - logger.trace(">> updating cpuCount(%d) vm(%s)", cpuCount, vm.getName()); - waitForTask(updateCPUCountOfVm(vm, cpuCount)); - logger.trace("<< updated cpuCount vm(%s)", vm.getName()); - int memoryMB = template.getHardware().getRam(); - logger.trace(">> updating memoryMB(%d) vm(%s)", memoryMB, vm.getName()); - waitForTask(updateMemoryMBOfVm(vm, memoryMB)); - logger.trace("<< updated memoryMB vm(%s)", vm.getName()); - logger.trace(">> deploying vApp(%s)", vAppResponse.getName()); - waitForTask(client.getVAppApi().deployVApp(vAppResponse.getHref())); - logger.trace("<< deployed vApp(%s)", vAppResponse.getName()); - - // only after deploy is the password valid - vAppResponse = client.getVAppApi().getVApp(vAppResponse.getHref()); - - logger.trace(">> powering on vApp(%s)", vAppResponse.getName()); - client.getVAppApi().powerOnVApp(vAppResponse.getHref()); - - return new NodeAndInitialCredentials<VApp>(vAppResponse, vAppResponse.getHref().toASCIIString(), - getCredentialsFrom(vAppResponse)); - - } - - @VisibleForTesting - protected VApp instantiateVAppFromTemplate(String name, Template template) { - VCloudTemplateOptions vOptions = VCloudTemplateOptions.class.cast(template.getOptions()); - - URI templateId = URI.create(template.getImage().getId()); - - VAppTemplate vAppTemplate = vAppTemplates.getUnchecked(templateId); - - if (vAppTemplate.getChildren().size() > 1) - throw new UnsupportedOperationException("we currently do not support multiple vms in a vAppTemplate " - + vAppTemplate); - - VmImpl vmTemplate = VmImpl.class.cast(vAppTemplate.getChildren().iterator().next()); - - String description = VCloudTemplateOptions.class.cast(template.getOptions()).getDescription(); - if (description == null) { - Map<String, String> md = metadataAndTagsAsCommaDelimitedValue(template.getOptions()); - description = Joiner.on('\n').withKeyValueSeparator("=").join(md); - } - - InstantiateVAppTemplateOptions options = InstantiateVAppTemplateOptions.Builder.description(description); - - /* - * Match up networks in the vApp template with the ones in the options we got passed in, so that - * the right ones can be wired together. - * Note that in the end the order of the network interfaces is what's important, not the names. The names - * might not match up. In the worst case, maybe someone called their vApp networks A and B, but really wants - * them cross-connected, i.e. wired up to B and A respectively. - * The only potential issue here is that the networks in the vOptions are stored as a Set, which makes little - * sense. While the API is what it is, we need to rely on people higher up using sensible underlying - * datastructures (that conform to the set interface), which preserve their order. - */ - - int vmTemplateNumNetworks = vmTemplate.getNetworkConnectionSection().getConnections().size(); - - /* - * Backwards-compatibility hack: we might get passed in a parent network URI and an empty vOptions.networks list. - * In that case, move the parent network URI into the vOptions.networks list, and remove the parent URI. - */ - if (vOptions.getNetworks().size() == 0 && vmTemplateNumNetworks == 1 && vOptions.getParentNetwork() != null) { - ArrayList<String> netlist = new ArrayList<String>(); - netlist.add(vOptions.getParentNetwork().toASCIIString()); - vOptions.networks(netlist); - vOptions.parentNetwork(null); - } - - URI[] vOptionsNetworkIdList = new URI[vOptions.getNetworks().size()]; - NetworkConnection[] vAppTemplateNetworkList = - new NetworkConnection[vmTemplateNumNetworks]; - - //hopefully this preserves the original order, assuming the original underlying datastructure was ordered. - int i = 0; - for (String network: vOptions.getNetworks()) { - try { - vOptionsNetworkIdList[i] = new URI(network); - } catch (URISyntaxException e) { - logger.error(e, "Failed to convert href '" + network + "' to URI. We expect a href to a network to be " + - "passed in, not a name for example."); - return null; - } - i++; - } - - //iterate over the NetworkConnectionSection, and put them in order of their connection indices - // into the vAppTemplateNetworkList. - for (NetworkConnection netCon: vmTemplate.getNetworkConnectionSection().getConnections()) { - vAppTemplateNetworkList[netCon.getNetworkConnectionIndex()] = netCon; - } - - for (i = 0; i < vOptionsNetworkIdList.length; i++) { - URI parentNetwork = vOptionsNetworkIdList[i]; - NetworkConnection networkConnectionParams = vAppTemplateNetworkList.length > i ? vAppTemplateNetworkList[i] : null; - //hook 'em up. - - //use network name from vAppTemplate if possible - String networkName; - if (networkConnectionParams != null) { - networkName = networkConnectionParams.getNetwork(); - } else { - networkName = "jclouds-net-" + String.valueOf(i); - } - - Network n = new Network(networkName, null); // ignore description, not needed here. - VCloudTemplateOptions networkTemplateOptions = vOptions.clone(); //we'll modify bits here - networkTemplateOptions.parentNetwork(parentNetwork); - - NetworkConfig config = networkConfigurationForNetworkAndOptions.apply(n, networkTemplateOptions); - // note that in VCD 1.5, the network name after instantiation will be the same as the parent - options.addNetworkConfig(config); - logger.debug("Connecting vApp network " + n.getName() + " to org network " + parentNetwork + "."); - } - - // TODO make disk size specifiable - // disk((long) ((template.getHardware().getVolumes().get(0).getSize()) * - // 1024 * 1024l)); - - - - options.deploy(false); - options.powerOn(false); - - URI VDC = URI.create(template.getLocation().getId()); - - logger.debug(">> instantiating vApp vDC(%s) template(%s) name(%s) options(%s) ", VDC, templateId, name, options); - - VApp vAppResponse = client.getVAppTemplateApi().createVAppInVDCByInstantiatingTemplate(name, VDC, templateId, - options); - return vAppResponse; - } - - // TODO: filtering on "none" is a hack until we can filter on - // vAppTemplate.getNetworkConfigSection().getNetworkConfigs() where - // name = getChildren().NetworkConnectionSection.connection where ipallocationmode == none - static Predicate<Network> networkWithNoIpAllocation = new Predicate<Network>() { - - @Override - public boolean apply(Network input) { - return "none".equals(input.getName()); - } - - }; - - public void waitForTask(Task task) { - if (!successTester.apply(task.getHref())) { - throw new TaskStillRunningException(task); - } - } - /** - * Naming constraints modifying a VM on a VApp in vCloud Director (at least v1.5) can be more - * strict than those in a vAppTemplate. For example, while it is possible to instantiate a - * vAppTemplate with a VM named (incorrectly) {@code Ubuntu_10.04}, you must change the name to a - * valid (alphanumeric underscore) name before you can update it. - */ - public Task updateVmWithNameAndCustomizationScript(Vm vm, String name, @Nullable String customizationScript) { - GuestCustomizationSection guestConfiguration = vm.getGuestCustomizationSection(); - guestConfiguration.setComputerName(name); - if (customizationScript != null) { - // In version 1.0.0, the api returns a script that loses newlines, so we cannot append to a - // customization script. - // TODO: parameterize whether to overwrite or append existing customization - if (!buildVersion.startsWith("1.0.0") && !"".endsWith(buildVersion) - && guestConfiguration.getCustomizationScript() != null) - customizationScript = guestConfiguration.getCustomizationScript() + "\n" + customizationScript; - - guestConfiguration.setCustomizationScript(customizationScript); - } - return client.getVmApi().updateGuestCustomizationOfVm(guestConfiguration, vm.getHref()); - } - - public void ensureVmHasDesiredNetworkConnectionSettings(VApp vApp, VCloudTemplateOptions vOptions) { - Network networkToConnect = find(vApp.getNetworkSection().getNetworks(), not(networkWithNoIpAllocation)); - - Vm vm = get(vApp.getChildren(), 0); - - NetworkConnectionSection nets = vm.getNetworkConnectionSection(); - checkArgument(nets.getConnections().size() > 0, "no connections on vm %s", vm); - - /* - * Here we want to build the NetworkConnectionSection. - * This is not required if: - * - the user didn't pass in any vCloud specific NetworkConnection settings, and - * - there exist enough NetworkConnectionSections to cover the networks we need to - * wire up to the VM - * - * In case of modifying the existing network connection, its important that - * those optional parameters whose value is not being changed needs to be returned - * with the existing values or vcloud puts default values for them. When mac address is not - * modified then it needs to be returned else vclouds changes the adapter type of the NIC to E1000. - * - * There are a couple of things that might require changes: - * - different parameters (e.g. ip address allocation mode) - * - insufficient NetworkConnection items (we need to add more to trigger the - * creation of more NICs) - * - if the user didn't pass in any vCloud specific NetworkConnections, we might need to - * create new ones here. - * It's easier to just unconditionally rewrite the network connection section, - * than to write some bug-prone code that checks all of the above conditions. - */ - - /* - * We also need to add NICs. If we don't do this, we'll get new NICs, but they'll all be E1000s. - * We really want to replicate the type of any existing adapters. - * - * We add the NICs only when it is needed. In case of vapp template having vm with multiple NICs - * and if we update only the existing NICs then vcloud throws error that primary NIC not found. - */ - Set<? extends ResourceAllocationSettingData> allVirtualHWItems = vm.getVirtualHardwareSection().getItems(); - Iterable<VCloudNetworkAdapter> existingNics = Iterables.filter(allVirtualHWItems, VCloudNetworkAdapter.class); - // we want to program all existing nics. - ArrayList<VCloudNetworkAdapter> nicsToProgram = Lists.newArrayList(existingNics); - - //the first adapter type will be used as default for newly added ones. - String firstAdapterType = "E1000"; - int nextInstanceID = 1; - if (nicsToProgram.size() >= 1) { - firstAdapterType = nicsToProgram.get(0).getResourceSubType(); - nextInstanceID = 1 + Integer.valueOf(nicsToProgram.get(nicsToProgram.size() - 1).getInstanceID()); - } - - int i = 0; - LinkedHashSet<NetworkConnection> connectionsToProgram = new LinkedHashSet<NetworkConnection>(); - for (String netUuid: vOptions.getNetworks()) { - NetworkConnection desiredNC = vOptions.getNetworkConnections().get(netUuid); - String netName; - String macAddr; - NetworkConnection vappNC = findNetworkConnectionByIndexOrNull(nets, i); - if (vappNC != null && vappNC.getNetwork() != null) { - netName = vappNC.getNetwork(); - } else { - netName = null; - } - - if (vappNC != null && vappNC.getMACAddress() != null) { - macAddr = vappNC.getMACAddress(); - } else { - macAddr = null; - } - - if (desiredNC != null - && desiredNC.getNetworkConnectionIndex() != i) { - logger.error("Data consistency error: the network '" + netUuid + "'s connection index has been specified " - + "in the vCloud specific NetworkConnection settings in VCloudTemplateOptions.networkConnections, but " - + "the connection index does not match the " - + "position of the network in the TemplateOptions.networks object. Ignoring vCloud specific options for this net."); - desiredNC = null; - } - /* - Its not yet clear why the mac address in desiredNC is null. This needs to be explored. - This special handling is needed as the mac address is null and if it is not set, it results in NIC - type as E1000 - */ - if (desiredNC != null && macAddr != null && desiredNC.getMACAddress() == null){ - NetworkConnection.Builder desiredNCBuilder = desiredNC.toBuilder(); - desiredNCBuilder.MACAddress(macAddr); - desiredNC = desiredNCBuilder.build(); - } - if (desiredNC != null && desiredNC.getIpAddressAllocationMode() == null - || desiredNC.getIpAddressAllocationMode() == IpAddressAllocationMode.NONE) { - logger.error("Data consistency error: the network '" + netUuid + "'s IP address allocation mode" - + "has been set to 'none' or null in the vCloud specific NetworkConnection settings in VCloudTemplateOptions.networkConnections. " - + "This is invalid. Ignoring vCloud specific options for this net."); - desiredNC = null; - } - - NetworkConnection ncToAdd = null; - if (desiredNC == null) { - // use default settings - ncToAdd = new NetworkConnection(netName, i, null, null, true, null, - IpAddressAllocationMode.POOL); - } else { - if (netName != null && !netName.equals(desiredNC.getNetwork())) { - //something's probably wrong. - logger.warn("vcloud overridden network name '" + desiredNC.getNetwork() + "' doesn't match the vApp's " - + " network with index " + i + " name '" + netName + "'"); - } - - if (netName == null && desiredNC.getNetwork() == null) { - //ok we need to come up with some network name. - netName = "jclouds-net-" + String.valueOf(i); - NetworkConnection.Builder ncBuilder = desiredNC.toBuilder(); - ncToAdd = ncBuilder.network(netName).connected(desiredNC.isConnected()) - .externalIpAddress(desiredNC.getExternalIpAddress()) - .ipAddress(desiredNC.getIpAddress()).ipAddressAllocationMode(desiredNC.getIpAddressAllocationMode()) - .MACAddress(desiredNC.getMACAddress()).networkConnectionIndex(desiredNC.getNetworkConnectionIndex()).build(); - } else { - ncToAdd = desiredNC; - } - } - connectionsToProgram.add(ncToAdd); - - //OK, we've now setup the network connection. Now we want to check if we need to add a new NIC for it. - if (nicsToProgram.size() < connectionsToProgram.size()) { - VCloudNetworkAdapter.Builder nicBuilder = VCloudNetworkAdapter.builder(); - //interesting values - nicBuilder.addressOnParent(String.valueOf(i)); - nicBuilder.automaticAllocation(true); - nicBuilder.connection(ncToAdd.getNetwork()); - nicBuilder.ipAddressingMode(ncToAdd.getIpAddressAllocationMode().toString()); - nicBuilder.elementName("Network adapter " + String.valueOf(i)); - nicBuilder.instanceID(String.valueOf(nextInstanceID)); - nextInstanceID += 1; - nicBuilder.resourceSubType(firstAdapterType); - nicBuilder.resourceType(ResourceAllocationSettingData.ResourceType.ETHERNET_ADAPTER); - - VCloudNetworkAdapter newNic = nicBuilder.build(); - nicsToProgram.add(newNic); - } - i++; - } - - // Add new nics only if they are needed - if (nicsToProgram.size() < connectionsToProgram.size()) { - logger.debug("Programming NICs: %s", nicsToProgram); - Task t = client.getVmApi().updateNetworkCardsOfVm(nicsToProgram, vm.getHref()); - waitForTask(t); - } - - // update the NetworkConnectionSection. - Builder builder = nets.toBuilder(); - builder.connections(connectionsToProgram); - logger.trace(">> updating networkConnection vm(%s)", vm.getName()); - logger.debug("New NetworkConnectionSection for VM %s: %s", vm.getName(), builder.build().toString()); - waitForTask(client.getVmApi().updateNetworkConnectionOfVm(builder.build(), vm.getHref())); - logger.trace("<< updated networkConnection vm(%s)", vm.getName()); - } - - private NetworkConnection findWithPoolAllocationOrFirst(NetworkConnectionSection net) { - return find(net.getConnections(), new Predicate<NetworkConnection>() { - - @Override - public boolean apply(NetworkConnection input) { - return input.getIpAddressAllocationMode() == IpAddressAllocationMode.POOL; - } - - }, get(net.getConnections(), 0)); - } - - private NetworkConnection findNetworkConnectionByIndexOrNull(NetworkConnectionSection net, final int index) { - return find(net.getConnections(), new Predicate<NetworkConnection>() { - - @Override - public boolean apply(NetworkConnection input) { - return input.getNetworkConnectionIndex() == index; - } - - }, null); - } - - public Task updateCPUCountOfVm(Vm vm, int cpuCount) { - return client.getVmApi().updateCPUCountOfVm(cpuCount, vm.getHref()); - } - - public Task updateMemoryMBOfVm(Vm vm, int memoryInMB) { - return client.getVmApi().updateMemoryMBOfVm(memoryInMB, vm.getHref()); - } -}
http://git-wip-us.apache.org/repos/asf/stratos/blob/295c545c/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/compute/strategy/NetworkConfigurationForNetworkAndOptions.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/compute/strategy/NetworkConfigurationForNetworkAndOptions.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/compute/strategy/NetworkConfigurationForNetworkAndOptions.java deleted file mode 100644 index 28c8a9b..0000000 --- a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/compute/strategy/NetworkConfigurationForNetworkAndOptions.java +++ /dev/null @@ -1,76 +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.vcloud.compute.strategy; - -import java.net.URI; - -import javax.inject.Inject; - -import org.jclouds.ovf.Network; -import org.jclouds.vcloud.compute.options.VCloudTemplateOptions; -import org.jclouds.vcloud.domain.network.FenceMode; -import org.jclouds.vcloud.domain.network.NetworkConfig; - -import com.google.common.annotations.Beta; -import com.google.common.base.Supplier; - -@Beta -public class NetworkConfigurationForNetworkAndOptions { - protected final Supplier<NetworkConfig> defaultNetworkConfig; - protected final FenceMode defaultFenceMode; - - @Inject - protected NetworkConfigurationForNetworkAndOptions(Supplier<NetworkConfig> defaultNetworkConfig, - FenceMode defaultFenceMode) { - this.defaultNetworkConfig = defaultNetworkConfig; - this.defaultFenceMode = defaultFenceMode; - } - - /** - * - * returns a {@link NetworkConfig} used to instantiate a vAppTemplate to - * either the default parent (org) network, or one specified by options. - * - * @param networkToConnect - * network defined in the VAppTemplate you wish to connect to - * @param vOptions - * options to override defaults with - * @return - */ - public NetworkConfig apply(Network networkToConnect, VCloudTemplateOptions vOptions) { - NetworkConfig config; - URI userDefinedParentNetwork = vOptions.getParentNetwork(); - FenceMode fenceMode = vOptions.getFenceMode() != null ? vOptions.getFenceMode() : defaultFenceMode; - if (userDefinedParentNetwork != null) { - config = NetworkConfig.builder().networkName("jclouds").fenceMode(fenceMode) - .parentNetwork(userDefinedParentNetwork).build(); - } else { - config = defaultNetworkConfig.get().toBuilder().fenceMode(fenceMode).build(); - } - - // if we only have a disconnected network, we are adding a new section - // for the upstream - if (InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn.networkWithNoIpAllocation - .apply(networkToConnect)) { - // TODO: remove the disconnected entry - } else { - config = config.toBuilder().networkName(networkToConnect.getName()).build(); - } - return config; - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/295c545c/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudComputeServiceAdapter.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudComputeServiceAdapter.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudComputeServiceAdapter.java deleted file mode 100644 index cd636df..0000000 --- a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/compute/strategy/VCloudComputeServiceAdapter.java +++ /dev/null @@ -1,262 +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.vcloud.compute.strategy; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.collect.Iterables.contains; -import static com.google.common.collect.Iterables.filter; - -import java.net.URI; -import java.util.Map; -import java.util.Set; - -import javax.annotation.Resource; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - -import org.jclouds.compute.ComputeServiceAdapter; -import org.jclouds.compute.domain.Template; -import org.jclouds.compute.reference.ComputeServiceConstants; -import org.jclouds.domain.Location; -import org.jclouds.logging.Logger; -import org.jclouds.ovf.Envelope; -import org.jclouds.util.Throwables2; -import org.jclouds.vcloud.TaskInErrorStateException; -import org.jclouds.vcloud.TaskStillRunningException; -import org.jclouds.vcloud.VCloudApi; -import org.jclouds.vcloud.VCloudMediaType; -import org.jclouds.vcloud.domain.Org; -import org.jclouds.vcloud.domain.ReferenceType; -import org.jclouds.vcloud.domain.Status; -import org.jclouds.vcloud.domain.Task; -import org.jclouds.vcloud.domain.VApp; -import org.jclouds.vcloud.domain.VAppTemplate; -import org.jclouds.vcloud.suppliers.VAppTemplatesSupplier; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Function; -import com.google.common.base.Predicate; -import com.google.common.base.Supplier; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.ImmutableSet.Builder; - -/** - * defines the connection between the {@link org.jclouds.vcloud.VCloudApi} implementation and the jclouds - * {@link ComputeService} - */ -@Singleton -public class VCloudComputeServiceAdapter implements ComputeServiceAdapter<VApp, VAppTemplate, VAppTemplate, Location> { - - @Resource - @Named(ComputeServiceConstants.COMPUTE_LOGGER) - protected Logger logger = Logger.NULL; - - protected final VCloudApi client; - protected final Predicate<URI> successTester; - protected final InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn booter; - protected final Supplier<Map<String, Org>> nameToOrg; - protected final Supplier<Set<VAppTemplate>> templates; - protected final Function<VAppTemplate, Envelope> templateToEnvelope; - - @Inject - protected VCloudComputeServiceAdapter(VCloudApi client, Predicate<URI> successTester, - InstantiateVAppTemplateWithGroupEncodedIntoNameThenCustomizeDeployAndPowerOn booter, - Supplier<Map<String, Org>> nameToOrg, VAppTemplatesSupplier templates, - Function<VAppTemplate, Envelope> templateToEnvelope) { - this.client = checkNotNull(client, "client"); - this.successTester = checkNotNull(successTester, "successTester"); - this.booter = checkNotNull(booter, "booter"); - this.nameToOrg = checkNotNull(nameToOrg, "nameToOrg"); - this.templates = checkNotNull(templates, "templates"); - this.templateToEnvelope = checkNotNull(templateToEnvelope, "templateToEnvelope"); - } - - @Override - public NodeAndInitialCredentials<VApp> createNodeWithGroupEncodedIntoName(String group, String name, - Template template) { - return booter.createNodeWithGroupEncodedIntoName(group, name, template); - } - - @Override - public Iterable<VAppTemplate> listHardwareProfiles() { - return supportedTemplates(); - } - - private Iterable<VAppTemplate> supportedTemplates() { - return filter(templates.get(), new Predicate<VAppTemplate>() { - - @Override - public boolean apply(VAppTemplate from) { - try { - templateToEnvelope.apply(from); - } catch (IllegalArgumentException e) { - logger.warn("Unsupported: " + e.getMessage()); - return false; - } catch (RuntimeException e) { - IllegalArgumentException e2 = Throwables2.getFirstThrowableOfType(e, IllegalArgumentException.class); - if (e2 != null) { - logger.warn("Unsupported: " + e2.getMessage()); - return false; - } else { - throw e; - } - } - return true; - } - - }); - } - - @Override - public Iterable<VAppTemplate> listImages() { - return supportedTemplates(); - } - - @Override - public Iterable<VApp> listNodes() { - // TODO: parallel or cache - Builder<VApp> nodes = ImmutableSet.builder(); - for (Org org : nameToOrg.get().values()) { - for (ReferenceType vdc : org.getVDCs().values()) { - for (ReferenceType resource : client.getVDCApi().getVDC(vdc.getHref()).getResourceEntities().values()) { - if (resource.getType().equals(VCloudMediaType.VAPP_XML)) { - addVAppToSetRetryingIfNotYetPresent(nodes, vdc, resource); - } - } - } - } - return nodes.build(); - } - - @Override - public Iterable<VApp> listNodesByIds(final Iterable<String> ids) { - return filter(listNodes(), new Predicate<VApp>() { - - @Override - public boolean apply(VApp vm) { - return contains(ids, vm.getHref().toASCIIString()); - } - }); - } - - @VisibleForTesting - void addVAppToSetRetryingIfNotYetPresent(Builder<VApp> nodes, ReferenceType vdc, ReferenceType resource) { - VApp node = null; - int i = 0; - while (node == null && i++ < 3) { - try { - node = client.getVAppApi().getVApp(resource.getHref()); - nodes.add(node); - } catch (NullPointerException e) { - logger.warn("vApp %s not yet present in vdc %s", resource.getName(), vdc.getName()); - } - } - } - - @Override - public Iterable<Location> listLocations() { - // Not using the adapter to determine locations - return ImmutableSet.<Location>of(); - } - - @Override - public VApp getNode(String in) { - URI id = URI.create(in); - return client.getVAppApi().getVApp(id); - } - - @Override - public VAppTemplate getImage(String in) { - URI id = URI.create(in); - return client.getVAppTemplateApi().getVAppTemplate(id); - } - - @Override - public void destroyNode(String id) { - URI vappId = URI.create(checkNotNull(id, "node.id")); - VApp vApp = cancelAnyRunningTasks(vappId); - if (vApp.getStatus() != Status.OFF) { - logger.debug(">> powering off VApp vApp(%s), current status: %s", vApp.getName(), vApp.getStatus()); - try { - waitForTask(client.getVAppApi().powerOffVApp(vApp.getHref())); - vApp = client.getVAppApi().getVApp(vApp.getHref()); - logger.debug("<< %s vApp(%s)", vApp.getStatus(), vApp.getName()); - } catch (IllegalStateException e) { - logger.warn(e, "<< %s vApp(%s)", vApp.getStatus(), vApp.getName()); - } - logger.debug(">> undeploying vApp(%s), current status: %s", vApp.getName(), vApp.getStatus()); - try { - waitForTask(client.getVAppApi().undeployVApp(vApp.getHref())); - vApp = client.getVAppApi().getVApp(vApp.getHref()); - logger.debug("<< %s vApp(%s)", vApp.getStatus(), vApp.getName()); - } catch (IllegalStateException e) { - logger.warn(e, "<< %s vApp(%s)", vApp.getStatus(), vApp.getName()); - } - } - logger.debug(">> deleting vApp(%s)", vApp.getHref()); - waitForTask(client.getVAppApi().deleteVApp(vApp.getHref())); - logger.debug("<< deleted vApp(%s)", vApp.getHref()); - } - - VApp waitForPendingTasksToComplete(URI vappId) { - VApp vApp = client.getVAppApi().getVApp(vappId); - if (vApp.getTasks().size() == 0) - return vApp; - for (Task task : vApp.getTasks()) - waitForTask(task); - return client.getVAppApi().getVApp(vappId); - } - - VApp cancelAnyRunningTasks(URI vappId) { - VApp vApp = client.getVAppApi().getVApp(vappId); - if (vApp.getTasks().size() == 0) - return vApp; - for (Task task : vApp.getTasks()) { - try { - client.getTaskApi().cancelTask(task.getHref()); - waitForTask(task); - } catch (TaskInErrorStateException e) { - } - } - return client.getVAppApi().getVApp(vappId); - - } - - public void waitForTask(Task task) { - if (!successTester.apply(task.getHref())) - throw new TaskStillRunningException(task); - } - - @Override - public void rebootNode(String in) { - URI id = URI.create(checkNotNull(in, "node.id")); - waitForTask(client.getVAppApi().resetVApp(id)); - } - - @Override - public void resumeNode(String in) { - URI id = URI.create(checkNotNull(in, "node.id")); - waitForTask(client.getVAppApi().powerOnVApp(id)); - } - - @Override - public void suspendNode(String in) { - URI id = URI.create(checkNotNull(in, "node.id")); - waitForTask(client.getVAppApi().powerOffVApp(id)); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/295c545c/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/compute/util/VCloudComputeUtils.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/compute/util/VCloudComputeUtils.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/compute/util/VCloudComputeUtils.java deleted file mode 100644 index 905565e..0000000 --- a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/compute/util/VCloudComputeUtils.java +++ /dev/null @@ -1,112 +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.vcloud.compute.util; - -import static com.google.common.collect.Iterables.filter; - -import java.util.Set; - -import org.jclouds.cim.CIMPredicates; -import org.jclouds.cim.ResourceAllocationSettingData; -import org.jclouds.cim.ResourceAllocationSettingData.ResourceType; -import org.jclouds.compute.domain.CIMOperatingSystem; -import org.jclouds.compute.domain.OperatingSystem; -import org.jclouds.domain.LoginCredentials; -import org.jclouds.vcloud.domain.NetworkConnection; -import org.jclouds.vcloud.domain.VApp; -import org.jclouds.vcloud.domain.VAppTemplate; -import org.jclouds.vcloud.domain.Vm; -import org.jclouds.vcloud.domain.ovf.VCloudNetworkAdapter; - -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.ImmutableSet.Builder; -import com.google.common.collect.Iterables; - -public class VCloudComputeUtils { - public static OperatingSystem toComputeOs(VApp vApp, OperatingSystem defaultOs) { - CIMOperatingSystem cimOs = toComputeOs(vApp); - return cimOs != null ? cimOs : defaultOs; - } - - public static CIMOperatingSystem toComputeOs(VApp vApp) { - // TODO we need to change the design so that it doesn't assume single-vms - return vApp.getChildren().size() > 0 ? toComputeOs(Iterables.get(vApp.getChildren(), 0)) : null; - } - - public static CIMOperatingSystem toComputeOs(Vm vm) { - return CIMOperatingSystem.toComputeOs(vm.getOperatingSystemSection()); - } - - public static String getVirtualSystemIdentifierOfFirstVMIn(VApp vApp) { - return vApp.getChildren().size() > 0 ? getVirtualSystemIdentifierOf(Iterables.get(vApp.getChildren(), 0)) : null; - } - - public static String getVirtualSystemIdentifierOf(Vm vm) { - if (vm.getVirtualHardwareSection() != null && vm.getVirtualHardwareSection().getSystem() != null) - return vm.getVirtualHardwareSection().getSystem().getVirtualSystemIdentifier(); - return null; - } - - public static LoginCredentials getCredentialsFrom(VApp vApp) { - return vApp.getChildren().size() > 0 ? getCredentialsFrom(Iterables.get(vApp.getChildren(), 0)) : null; - } - - public static LoginCredentials getCredentialsFrom(VAppTemplate vApp) { - return vApp.getChildren().size() > 0 ? getCredentialsFrom(Iterables.get(vApp.getChildren(), 0)) : null; - } - - public static LoginCredentials getCredentialsFrom(Vm vm) { - LoginCredentials.Builder builder = LoginCredentials.builder(); - if (vm.getGuestCustomizationSection() != null) - builder.password(vm.getGuestCustomizationSection().getAdminPassword()); - return builder.build(); - } - - public static Set<String> getIpsFromVApp(VApp vApp) { - // TODO make this work with composite vApps - if (vApp.getChildren().size() == 0) - return ImmutableSet.of(); - Builder<String> ips = ImmutableSet.builder(); - Vm vm = Iterables.get(vApp.getChildren(), 0); - // TODO: figure out how to differentiate public from private ip addresses - // assumption is that we'll do this from the network object, which may - // have - // enough data to tell whether or not it is a public network without - // string - // parsing. At worst, we could have properties set per cloud provider to - // declare the networks which are public, then check against these in - // networkconnection.getNetwork - if (vm.getNetworkConnectionSection() != null) { - for (NetworkConnection connection : vm.getNetworkConnectionSection().getConnections()) { - if (connection.getIpAddress() != null) - ips.add(connection.getIpAddress()); - if (connection.getExternalIpAddress() != null) - ips.add(connection.getExternalIpAddress()); - } - } else { - for (ResourceAllocationSettingData net : filter(vm.getVirtualHardwareSection().getItems(), - CIMPredicates.resourceTypeIn(ResourceType.ETHERNET_ADAPTER))) { - if (net instanceof VCloudNetworkAdapter) { - VCloudNetworkAdapter vNet = VCloudNetworkAdapter.class.cast(net); - if (vNet.getIpAddress() != null) - ips.add(vNet.getIpAddress()); - } - } - } - return ips.build(); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/295c545c/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultCatalogForOrg.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultCatalogForOrg.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultCatalogForOrg.java deleted file mode 100644 index eb700f3..0000000 --- a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultCatalogForOrg.java +++ /dev/null @@ -1,59 +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.vcloud.config; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; -import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_DEFAULT_CATALOG; - -import java.util.Map; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import org.jclouds.config.ValueOfConfigurationKeyOrNull; -import org.jclouds.vcloud.domain.Org; -import org.jclouds.vcloud.domain.ReferenceType; -import org.jclouds.vcloud.endpoints.Catalog; -import org.jclouds.vcloud.suppliers.OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault; - -import com.google.common.base.Function; -import com.google.common.base.Predicate; -import com.google.common.base.Supplier; - -@Singleton -public class DefaultCatalogForOrg implements Function<ReferenceType, ReferenceType> { - private final OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault selector; - private final Supplier<Map<String, Org>> nameToOrg; - - @Inject - public DefaultCatalogForOrg(ValueOfConfigurationKeyOrNull valueOfConfigurationKeyOrNull, - @Catalog Predicate<ReferenceType> defaultSelector, Supplier<Map<String, Org>> nameToOrg) { - this.selector = new OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault(checkNotNull( - valueOfConfigurationKeyOrNull, "valueOfConfigurationKeyOrNull"), PROPERTY_VCLOUD_DEFAULT_CATALOG, - checkNotNull(defaultSelector, "defaultSelector")); - this.nameToOrg = checkNotNull(nameToOrg, "nameToOrg"); - } - - @Override - public ReferenceType apply(ReferenceType defaultOrg) { - Org org = nameToOrg.get().get(defaultOrg.getName()); - checkState(org != null, "could not retrieve Org at %s", defaultOrg); - return selector.apply(org.getCatalogs().values()); - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/295c545c/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultNetworkForVDC.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultNetworkForVDC.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultNetworkForVDC.java deleted file mode 100644 index e336b95..0000000 --- a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultNetworkForVDC.java +++ /dev/null @@ -1,61 +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.vcloud.config; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; -import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_DEFAULT_NETWORK; - -import java.net.URI; -import java.util.Map; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import org.jclouds.config.ValueOfConfigurationKeyOrNull; -import org.jclouds.vcloud.domain.ReferenceType; -import org.jclouds.vcloud.domain.VDC; -import org.jclouds.vcloud.endpoints.Network; -import org.jclouds.vcloud.suppliers.OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault; - -import com.google.common.base.Function; -import com.google.common.base.Predicate; -import com.google.common.base.Supplier; - -@Singleton -public class DefaultNetworkForVDC implements Function<ReferenceType, ReferenceType> { - - private final OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault selector; - private final Supplier<Map<URI, VDC>> uriToVDC; - - @Inject - public DefaultNetworkForVDC(ValueOfConfigurationKeyOrNull valueOfConfigurationKeyOrNull, - @Network Predicate<ReferenceType> defaultSelector, Supplier<Map<URI, VDC>> uriToVDC) { - this.selector = new OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault(checkNotNull( - valueOfConfigurationKeyOrNull, "valueOfConfigurationKeyOrNull"), PROPERTY_VCLOUD_DEFAULT_NETWORK, - checkNotNull(defaultSelector, "defaultSelector")); - this.uriToVDC = checkNotNull(uriToVDC, "uriToVDC"); - } - - @Override - public ReferenceType apply(ReferenceType defaultVDC) { - org.jclouds.vcloud.domain.VDC vDC = uriToVDC.get().get(defaultVDC.getHref()); - checkState(vDC != null, "could not retrieve VDC at %s", defaultVDC); - return selector.apply(vDC.getAvailableNetworks().values()); - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/295c545c/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultOrgForUser.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultOrgForUser.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultOrgForUser.java deleted file mode 100644 index 8ed2eba..0000000 --- a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultOrgForUser.java +++ /dev/null @@ -1,54 +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.vcloud.config; - -import static com.google.common.base.Preconditions.checkNotNull; -import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_DEFAULT_ORG; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import org.jclouds.config.ValueOfConfigurationKeyOrNull; -import org.jclouds.vcloud.domain.ReferenceType; -import org.jclouds.vcloud.domain.VCloudSession; -import org.jclouds.vcloud.endpoints.Org; -import org.jclouds.vcloud.suppliers.OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault; - -import com.google.common.base.Predicate; -import com.google.common.base.Supplier; - -@Singleton -public class DefaultOrgForUser implements Supplier<ReferenceType> { - - private final OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault selector; - private final Supplier<VCloudSession> session; - - @Inject - public DefaultOrgForUser(ValueOfConfigurationKeyOrNull valueOfConfigurationKeyOrNull, - @Org Predicate<ReferenceType> defaultSelector, Supplier<VCloudSession> session) { - this.selector = new OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault(checkNotNull( - valueOfConfigurationKeyOrNull, "valueOfConfigurationKeyOrNull"), PROPERTY_VCLOUD_DEFAULT_ORG, checkNotNull( - defaultSelector, "defaultSelector")); - this.session = checkNotNull(session, "session"); - } - - @Override - public ReferenceType get() { - return selector.apply(session.get().getOrgs().values()); - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/295c545c/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultTasksListForOrg.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultTasksListForOrg.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultTasksListForOrg.java deleted file mode 100644 index c670161..0000000 --- a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultTasksListForOrg.java +++ /dev/null @@ -1,49 +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.vcloud.config; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; - -import java.util.Map; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import org.jclouds.vcloud.domain.Org; -import org.jclouds.vcloud.domain.ReferenceType; - -import com.google.common.base.Function; -import com.google.common.base.Supplier; - -@Singleton -public class DefaultTasksListForOrg implements Function<ReferenceType, ReferenceType> { - private final Supplier<Map<String, Org>> nameToOrg; - - @Inject - public DefaultTasksListForOrg(Supplier<Map<String, Org>> nameToOrg) { - this.nameToOrg = checkNotNull(nameToOrg, "nameToOrg"); - } - - @Override - public ReferenceType apply(ReferenceType defaultOrg) { - org.jclouds.vcloud.domain.Org org = nameToOrg.get().get(defaultOrg.getName()); - checkState(org != null, "could not retrieve Org at %s", defaultOrg); - return org.getTasksList(); - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/295c545c/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultVCloudReferencesModule.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultVCloudReferencesModule.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultVCloudReferencesModule.java deleted file mode 100644 index 5a0ba9d..0000000 --- a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultVCloudReferencesModule.java +++ /dev/null @@ -1,161 +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.vcloud.config; - -import java.net.URI; -import java.util.Map; - -import javax.annotation.Resource; -import javax.inject.Inject; -import javax.inject.Singleton; - -import org.jclouds.logging.Logger; -import org.jclouds.vcloud.domain.Catalog; -import org.jclouds.vcloud.domain.ReferenceType; -import org.jclouds.vcloud.endpoints.Org; - -import com.google.common.base.Function; -import com.google.common.base.Predicate; -import com.google.common.base.Predicates; -import com.google.common.base.Supplier; -import com.google.common.base.Suppliers; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableMap.Builder; -import com.google.inject.AbstractModule; -import com.google.inject.Injector; -import com.google.inject.Provides; -import com.google.inject.TypeLiteral; - -public class DefaultVCloudReferencesModule extends AbstractModule { - - @Override - protected void configure() { - bind(new TypeLiteral<Supplier<ReferenceType>>() { - }).annotatedWith(Org.class).to(DefaultOrgForUser.class); - } - - @Provides - @Singleton - @org.jclouds.vcloud.endpoints.Org - protected Predicate<ReferenceType> provideDefaultOrgSelector(Injector i) { - return Predicates.alwaysTrue(); - } - - @Provides - @org.jclouds.vcloud.endpoints.TasksList - @Singleton - protected Supplier<ReferenceType> provideDefaultTasksList(DefaultTasksListForOrg defaultTasksListURIForOrg, - @org.jclouds.vcloud.endpoints.Org Supplier<ReferenceType> defaultOrg) { - return Suppliers.compose(defaultTasksListURIForOrg, defaultOrg); - } - - @Provides - @org.jclouds.vcloud.endpoints.Catalog - @Singleton - protected Supplier<ReferenceType> provideDefaultCatalog(DefaultCatalogForOrg defaultCatalogURIForOrg, - @org.jclouds.vcloud.endpoints.Org Supplier<ReferenceType> defaultOrg) { - return Suppliers.compose(defaultCatalogURIForOrg, defaultOrg); - } - - @Provides - @Singleton - @org.jclouds.vcloud.endpoints.Catalog - protected Predicate<ReferenceType> provideDefaultCatalogSelector(Injector i) { - return i.getInstance(WriteableCatalog.class); - } - - @Provides - @Singleton - protected Supplier<Map<URI, org.jclouds.vcloud.domain.Catalog>> provideCatalogsById( - Supplier<Map<String, Map<String, org.jclouds.vcloud.domain.Catalog>>> supplier) { - return Suppliers - .compose( - new Function<Map<String, Map<String, org.jclouds.vcloud.domain.Catalog>>, Map<URI, org.jclouds.vcloud.domain.Catalog>>() { - - @Override - public Map<URI, Catalog> apply(Map<String, Map<String, Catalog>> arg0) { - Builder<URI, Catalog> builder = ImmutableMap.builder(); - for (Map<String, Catalog> v1 : arg0.values()) { - for (Catalog v2 : v1.values()) { - builder.put(v2.getHref(), v2); - } - } - return builder.build(); - } - - }, supplier); - } - - @Singleton - public static class WriteableCatalog implements Predicate<ReferenceType> { - - @Resource - protected Logger logger = Logger.NULL; - - private final Supplier<Map<URI, org.jclouds.vcloud.domain.Catalog>> catalogsByIdSupplier; - - @Inject - public WriteableCatalog(Supplier<Map<URI, org.jclouds.vcloud.domain.Catalog>> catalogsByIdSupplier) { - this.catalogsByIdSupplier = catalogsByIdSupplier; - } - - @Override - public boolean apply(ReferenceType arg0) { - // TODO: this is inefficient, calculating the index each time, but - // shouldn't be added to constructor as the supplier is an expensive - // call - Map<URI, Catalog> index = catalogsByIdSupplier.get(); - Catalog catalog = index.get(arg0.getHref()); - if (catalog == null) { - if (logger.isTraceEnabled()) - logger.trace("didn't find catalog %s", arg0); - return false; - } else - return !catalog.isReadOnly(); - } - } - - @Provides - @org.jclouds.vcloud.endpoints.VDC - @Singleton - protected Supplier<ReferenceType> provideDefaultVDC(DefaultVDCForOrg defaultVDCURIForOrg, - @org.jclouds.vcloud.endpoints.Org Supplier<ReferenceType> defaultOrg) { - return Suppliers.compose(defaultVDCURIForOrg, defaultOrg); - } - - @Provides - @Singleton - @org.jclouds.vcloud.endpoints.VDC - protected Predicate<ReferenceType> provideDefaultVDCSelector(Injector i) { - return Predicates.alwaysTrue(); - } - - @Provides - @org.jclouds.vcloud.endpoints.Network - @Singleton - protected Supplier<ReferenceType> provideDefaultNetwork(DefaultNetworkForVDC defaultNetworkURIForVDC, - @org.jclouds.vcloud.endpoints.VDC Supplier<ReferenceType> defaultVDC) { - return Suppliers.compose(defaultNetworkURIForVDC, defaultVDC); - } - - @Provides - @Singleton - @org.jclouds.vcloud.endpoints.Network - protected Predicate<ReferenceType> provideDefaultNetworkSelector(Injector i) { - return Predicates.alwaysTrue(); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/295c545c/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultVDCForOrg.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultVDCForOrg.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultVDCForOrg.java deleted file mode 100644 index 4eefd30..0000000 --- a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/main/java/org/jclouds/vcloud/config/DefaultVDCForOrg.java +++ /dev/null @@ -1,59 +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.vcloud.config; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; -import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_DEFAULT_VDC; - -import java.util.Map; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import org.jclouds.config.ValueOfConfigurationKeyOrNull; -import org.jclouds.vcloud.domain.Org; -import org.jclouds.vcloud.domain.ReferenceType; -import org.jclouds.vcloud.endpoints.VDC; -import org.jclouds.vcloud.suppliers.OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault; - -import com.google.common.base.Function; -import com.google.common.base.Predicate; -import com.google.common.base.Supplier; - -@Singleton -public class DefaultVDCForOrg implements Function<ReferenceType, ReferenceType> { - private final OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault selector; - private final Supplier<Map<String, Org>> nameToOrg; - - @Inject - public DefaultVDCForOrg(ValueOfConfigurationKeyOrNull valueOfConfigurationKeyOrNull, - @VDC Predicate<ReferenceType> defaultSelector, Supplier<Map<String, Org>> nameToOrg) { - this.selector = new OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault(checkNotNull( - valueOfConfigurationKeyOrNull, "valueOfConfigurationKeyOrNull"), PROPERTY_VCLOUD_DEFAULT_VDC, - checkNotNull(defaultSelector, "defaultSelector")); - this.nameToOrg = checkNotNull(nameToOrg, "nameToOrg"); - } - - @Override - public ReferenceType apply(ReferenceType defaultOrg) { - Org org = nameToOrg.get().get(defaultOrg.getName()); - checkState(org != null, "could not retrieve Org at %s", defaultOrg); - return selector.apply(org.getVDCs().values()); - } - -}
