http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/EC2ComputeService.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/EC2ComputeService.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/EC2ComputeService.java deleted file mode 100644 index 9a81a94..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/EC2ComputeService.java +++ /dev/null @@ -1,331 +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.ec2.compute; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Strings.emptyToNull; -import static com.google.common.collect.Iterables.concat; -import static com.google.common.collect.Iterables.transform; -import static java.util.concurrent.TimeUnit.MILLISECONDS; -import static java.util.concurrent.TimeUnit.SECONDS; -import static org.jclouds.compute.config.ComputeServiceProperties.RESOURCENAME_DELIMITER; -import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING; -import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED; -import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED; -import static org.jclouds.compute.util.ComputeServiceUtils.addMetadataAndParseTagsFromValuesOfEmptyString; -import static org.jclouds.compute.util.ComputeServiceUtils.metadataAndTagsAsValuesOfEmptyString; -import static org.jclouds.ec2.reference.EC2Constants.PROPERTY_EC2_GENERATE_INSTANCE_NAMES; -import static org.jclouds.ec2.util.Tags.resourceToTagsAsMap; -import static org.jclouds.util.Predicates2.retry; - -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.atomic.AtomicReference; - -import javax.inject.Named; -import javax.inject.Provider; -import javax.inject.Singleton; - -import org.jclouds.Constants; -import org.jclouds.aws.util.AWSUtils; -import org.jclouds.collect.Memoized; -import org.jclouds.compute.ComputeServiceContext; -import org.jclouds.compute.RunNodesException; -import org.jclouds.compute.callables.RunScriptOnNode; -import org.jclouds.compute.domain.Hardware; -import org.jclouds.compute.domain.Image; -import org.jclouds.compute.domain.NodeMetadata; -import org.jclouds.compute.domain.NodeMetadataBuilder; -import org.jclouds.compute.domain.Template; -import org.jclouds.compute.domain.TemplateBuilder; -import org.jclouds.compute.extensions.ImageExtension; -import org.jclouds.compute.extensions.SecurityGroupExtension; -import org.jclouds.compute.functions.GroupNamingConvention; -import org.jclouds.compute.functions.GroupNamingConvention.Factory; -import org.jclouds.compute.internal.BaseComputeService; -import org.jclouds.compute.internal.PersistNodeCredentials; -import org.jclouds.compute.options.TemplateOptions; -import org.jclouds.compute.reference.ComputeServiceConstants.Timeouts; -import org.jclouds.compute.strategy.CreateNodesInGroupThenAddToSet; -import org.jclouds.compute.strategy.DestroyNodeStrategy; -import org.jclouds.compute.strategy.GetImageStrategy; -import org.jclouds.compute.strategy.GetNodeMetadataStrategy; -import org.jclouds.compute.strategy.InitializeRunScriptOnNodeOrPlaceInBadMap; -import org.jclouds.compute.strategy.ListNodesStrategy; -import org.jclouds.compute.strategy.RebootNodeStrategy; -import org.jclouds.compute.strategy.ResumeNodeStrategy; -import org.jclouds.compute.strategy.SuspendNodeStrategy; -import org.jclouds.domain.Credentials; -import org.jclouds.domain.Location; -import org.jclouds.ec2.EC2Api; -import org.jclouds.ec2.compute.domain.RegionAndName; -import org.jclouds.ec2.compute.domain.RegionNameAndIngressRules; -import org.jclouds.ec2.compute.options.EC2TemplateOptions; -import org.jclouds.ec2.domain.InstanceState; -import org.jclouds.ec2.domain.KeyPair; -import org.jclouds.ec2.domain.RunningInstance; -import org.jclouds.ec2.domain.Tag; -import org.jclouds.ec2.util.TagFilterBuilder; -import org.jclouds.scriptbuilder.functions.InitAdminAccess; -import org.jclouds.util.Strings2; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Function; -import com.google.common.base.Optional; -import com.google.common.base.Predicate; -import com.google.common.base.Supplier; -import com.google.common.cache.LoadingCache; -import com.google.common.collect.FluentIterable; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.ImmutableMultimap.Builder; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.common.collect.Maps; -import com.google.common.collect.Multimap; -import com.google.common.util.concurrent.ListeningExecutorService; -import com.google.inject.Inject; - -/** - * @author Adrian Cole - */ -@Singleton -public class EC2ComputeService extends BaseComputeService { - private final EC2Api client; - private final ConcurrentMap<RegionAndName, KeyPair> credentialsMap; - private final LoadingCache<RegionAndName, String> securityGroupMap; - private final Factory namingConvention; - private final boolean generateInstanceNames; - - @Inject - protected EC2ComputeService(ComputeServiceContext context, Map<String, Credentials> credentialStore, - @Memoized Supplier<Set<? extends Image>> images, @Memoized Supplier<Set<? extends Hardware>> sizes, - @Memoized Supplier<Set<? extends Location>> locations, ListNodesStrategy listNodesStrategy, - GetImageStrategy getImageStrategy, GetNodeMetadataStrategy getNodeMetadataStrategy, - CreateNodesInGroupThenAddToSet runNodesAndAddToSetStrategy, RebootNodeStrategy rebootNodeStrategy, - DestroyNodeStrategy destroyNodeStrategy, ResumeNodeStrategy startNodeStrategy, - SuspendNodeStrategy stopNodeStrategy, Provider<TemplateBuilder> templateBuilderProvider, - @Named("DEFAULT") Provider<TemplateOptions> templateOptionsProvider, - @Named(TIMEOUT_NODE_RUNNING) Predicate<AtomicReference<NodeMetadata>> nodeRunning, - @Named(TIMEOUT_NODE_TERMINATED) Predicate<AtomicReference<NodeMetadata>> nodeTerminated, - @Named(TIMEOUT_NODE_SUSPENDED) Predicate<AtomicReference<NodeMetadata>> nodeSuspended, - InitializeRunScriptOnNodeOrPlaceInBadMap.Factory initScriptRunnerFactory, - RunScriptOnNode.Factory runScriptOnNodeFactory, InitAdminAccess initAdminAccess, - PersistNodeCredentials persistNodeCredentials, Timeouts timeouts, - @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor, EC2Api client, - ConcurrentMap<RegionAndName, KeyPair> credentialsMap, - @Named("SECURITY") LoadingCache<RegionAndName, String> securityGroupMap, - Optional<ImageExtension> imageExtension, GroupNamingConvention.Factory namingConvention, - @Named(PROPERTY_EC2_GENERATE_INSTANCE_NAMES) boolean generateInstanceNames, - Optional<SecurityGroupExtension> securityGroupExtension) { - super(context, credentialStore, images, sizes, locations, listNodesStrategy, getImageStrategy, - getNodeMetadataStrategy, runNodesAndAddToSetStrategy, rebootNodeStrategy, destroyNodeStrategy, - startNodeStrategy, stopNodeStrategy, templateBuilderProvider, templateOptionsProvider, nodeRunning, - nodeTerminated, nodeSuspended, initScriptRunnerFactory, initAdminAccess, runScriptOnNodeFactory, - persistNodeCredentials, timeouts, userExecutor, imageExtension, securityGroupExtension); - this.client = client; - this.credentialsMap = credentialsMap; - this.securityGroupMap = securityGroupMap; - this.namingConvention = namingConvention; - this.generateInstanceNames = generateInstanceNames; - } - - @Override - public Set<? extends NodeMetadata> createNodesInGroup(String group, int count, final Template template) - throws RunNodesException { - Set<? extends NodeMetadata> nodes = super.createNodesInGroup(group, count, template); - String region = AWSUtils.getRegionFromLocationOrNull(template.getLocation()); - - if (client.getTagApiForRegion(region).isPresent()) { - Map<String, String> common = metadataAndTagsAsValuesOfEmptyString(template.getOptions()); - if (generateInstanceNames || !common.isEmpty() || !template.getOptions().getNodeNames().isEmpty()) { - return addTagsAndNamesToInstancesInRegion(common, template.getOptions().getNodeNames(), - nodes, region, group); - } - } - return nodes; - } - - private static final Function<NodeMetadata, String> instanceId = new Function<NodeMetadata, String>() { - @Override - public String apply(NodeMetadata in) { - return in.getProviderId(); - } - }; - - private Set<NodeMetadata> addTagsAndNamesToInstancesInRegion(Map<String, String> common, Set<String> nodeNames, - Set<? extends NodeMetadata> input, String region, - String group) { - Map<String, ? extends NodeMetadata> instancesById = Maps.uniqueIndex(input, instanceId); - ImmutableSet.Builder<NodeMetadata> builder = ImmutableSet.<NodeMetadata> builder(); - - if (generateInstanceNames && !common.containsKey("Name")) { - for (Map.Entry<String, ? extends NodeMetadata> entry : instancesById.entrySet()) { - String id = entry.getKey(); - String name; - if (!nodeNames.isEmpty()) { - name = Iterables.get(nodeNames, 0); - } else { - name = id.replaceAll(".*-", group + "-"); - } - Map<String, String> tags = ImmutableMap.<String, String> builder().putAll(common) - .put("Name", name).build(); - logger.debug(">> applying tags %s to instance %s in region %s", tags, id, region); - client.getTagApiForRegion(region).get().applyToResources(tags, ImmutableSet.of(id)); - builder.add(addTagsForInstance(tags, instancesById.get(id))); - } - } else { - Iterable<String> ids = instancesById.keySet(); - logger.debug(">> applying tags %s to instances %s in region %s", common, ids, region); - client.getTagApiForRegion(region).get().applyToResources(common, ids); - for (NodeMetadata in : input) - builder.add(addTagsForInstance(common, in)); - } - if (logger.isDebugEnabled()) { - Multimap<String, String> filter = new TagFilterBuilder().resourceIds(instancesById.keySet()).build(); - FluentIterable<Tag> tags = client.getTagApiForRegion(region).get().filter(filter); - logger.debug("<< applied tags in region %s: %s", region, resourceToTagsAsMap(tags)); - } - return builder.build(); - } - - private static NodeMetadata addTagsForInstance(Map<String, String> tags, NodeMetadata input) { - NodeMetadataBuilder builder = NodeMetadataBuilder.fromNodeMetadata(input).name(tags.get("Name")); - return addMetadataAndParseTagsFromValuesOfEmptyString(builder, tags).build(); - } - - @Inject(optional = true) - @Named(RESOURCENAME_DELIMITER) - char delimiter = '#'; - - /** - * @throws IllegalStateException If the security group was in use - */ - @VisibleForTesting - void deleteSecurityGroup(String region, String group) { - checkNotNull(emptyToNull(region), "region must be defined"); - checkNotNull(emptyToNull(group), "group must be defined"); - String groupName = namingConvention.create().sharedNameForGroup(group); - - if (client.getSecurityGroupApi().get().describeSecurityGroupsInRegion(region, groupName).size() > 0) { - logger.debug(">> deleting securityGroup(%s)", groupName); - client.getSecurityGroupApi().get().deleteSecurityGroupInRegion(region, groupName); - // TODO: test this clear happens - securityGroupMap.invalidate(new RegionNameAndIngressRules(region, groupName, null, false)); - logger.debug("<< deleted securityGroup(%s)", groupName); - } - } - - @VisibleForTesting - void deleteKeyPair(String region, String group) { - for (KeyPair keyPair : client.getKeyPairApi().get().describeKeyPairsInRegionWithFilter(region, - ImmutableMultimap.<String, String>builder() - .put("key-name", Strings2.urlEncode( - String.format("jclouds#%s#%s*", group, region).replace('#', delimiter))) - .build())) { - String keyName = keyPair.getKeyName(); - Predicate<String> keyNameMatcher = namingConvention.create().containsGroup(group); - String oldKeyNameRegex = String.format("jclouds#%s#%s#%s", group, region, "[0-9a-f]+").replace('#', delimiter); - // old keypair pattern too verbose as it has an unnecessary region qualifier - - if (keyNameMatcher.apply(keyName) || keyName.matches(oldKeyNameRegex)) { - Set<String> instancesUsingKeyPair = extractIdsFromInstances(concat(client.getInstanceApi().get() - .describeInstancesInRegionWithFilter(region, ImmutableMultimap.<String, String>builder() - .put("instance-state-name", InstanceState.TERMINATED.toString()) - .put("instance-state-name", InstanceState.SHUTTING_DOWN.toString()) - .put("key-name", keyPair.getKeyName()).build()))); - - if (instancesUsingKeyPair.size() > 0) { - logger.debug("<< inUse keyPair(%s), by (%s)", keyPair.getKeyName(), instancesUsingKeyPair); - } else { - logger.debug(">> deleting keyPair(%s)", keyPair.getKeyName()); - client.getKeyPairApi().get().deleteKeyPairInRegion(region, keyPair.getKeyName()); - // TODO: test this clear happens - credentialsMap.remove(new RegionAndName(region, keyPair.getKeyName())); - credentialsMap.remove(new RegionAndName(region, group)); - logger.debug("<< deleted keyPair(%s)", keyPair.getKeyName()); - } - } - } - } - - protected ImmutableSet<String> extractIdsFromInstances(Iterable<? extends RunningInstance> deadOnes) { - return ImmutableSet.copyOf(transform(deadOnes, new Function<RunningInstance, String>() { - - @Override - public String apply(RunningInstance input) { - return input.getId(); - } - - })); - } - - /** - * Cleans implicit keypairs and security groups. - */ - @Override - protected void cleanUpIncidentalResourcesOfDeadNodes(Set<? extends NodeMetadata> deadNodes) { - Builder<String, String> regionGroups = ImmutableMultimap.builder(); - for (NodeMetadata nodeMetadata : deadNodes) { - if (nodeMetadata.getGroup() != null) - regionGroups.put(AWSUtils.parseHandle(nodeMetadata.getId())[0], nodeMetadata.getGroup()); - } - for (Entry<String, String> regionGroup : regionGroups.build().entries()) { - cleanUpIncidentalResources(regionGroup.getKey(), regionGroup.getValue()); - } - } - - protected void cleanUpIncidentalResources(final String region, final String group) { - // For issue #445, tries to delete security groups first: ec2 throws exception if in use, but - // deleting a key pair does not. - // This is "belt-and-braces" because deleteKeyPair also does extractIdsFromInstances & usingKeyPairAndNotDead - // for us to check if any instances are using the key-pair before we delete it. - // There is (probably?) still a race if someone is creating instances at the same time as deleting them: - // we may delete the key-pair just when the node-being-created was about to rely on the incidental - // resources existing. - - // Also in #445, in aws-ec2 the deleteSecurityGroup sometimes fails after terminating the final VM using a - // given security group, if called very soon after the VM's state reports terminated. Empirically, it seems that - // waiting a small time (e.g. enabling logging or debugging!) then the tests pass. We therefore retry. - // TODO: this could be moved to a config module, also the narrative above made more concise - retry(new Predicate<RegionAndName>() { - public boolean apply(RegionAndName input) { - try { - logger.debug(">> deleting incidentalResources(%s)", input); - deleteSecurityGroup(input.getRegion(), input.getName()); - deleteKeyPair(input.getRegion(), input.getName()); // not executed if securityGroup was in use - logger.debug("<< deleted incidentalResources(%s)", input); - return true; - } catch (IllegalStateException e) { - logger.debug("<< inUse incidentalResources(%s)", input); - return false; - } - } - }, SECONDS.toMillis(3), 50, 1000, MILLISECONDS).apply(new RegionAndName(region, group)); - } - - /** - * returns template options, except of type {@link EC2TemplateOptions}. - */ - @Override - public EC2TemplateOptions templateOptions() { - return EC2TemplateOptions.class.cast(super.templateOptions()); - } - -}
http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/EC2ComputeServiceContext.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/EC2ComputeServiceContext.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/EC2ComputeServiceContext.java deleted file mode 100644 index 76473c6..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/EC2ComputeServiceContext.java +++ /dev/null @@ -1,32 +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.ec2.compute; - -import org.jclouds.compute.ComputeServiceContext; -import org.jclouds.ec2.compute.internal.EC2ComputeServiceContextImpl; - -import com.google.inject.ImplementedBy; - -/** - * @author Adrian Cole - */ -@ImplementedBy(EC2ComputeServiceContextImpl.class) -public interface EC2ComputeServiceContext extends ComputeServiceContext { - - @Override - EC2ComputeService getComputeService(); -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2BindComputeStrategiesByClass.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2BindComputeStrategiesByClass.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2BindComputeStrategiesByClass.java deleted file mode 100644 index 6fd1ca5..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2BindComputeStrategiesByClass.java +++ /dev/null @@ -1,97 +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.ec2.compute.config; - -import org.jclouds.compute.config.BindComputeStrategiesByClass; -import org.jclouds.compute.strategy.CreateNodeWithGroupEncodedIntoName; -import org.jclouds.compute.strategy.CreateNodesInGroupThenAddToSet; -import org.jclouds.compute.strategy.DestroyNodeStrategy; -import org.jclouds.compute.strategy.GetImageStrategy; -import org.jclouds.compute.strategy.GetNodeMetadataStrategy; -import org.jclouds.compute.strategy.ListNodesStrategy; -import org.jclouds.compute.strategy.RebootNodeStrategy; -import org.jclouds.compute.strategy.ResumeNodeStrategy; -import org.jclouds.compute.strategy.SuspendNodeStrategy; -import org.jclouds.ec2.compute.strategy.EC2CreateNodesInGroupThenAddToSet; -import org.jclouds.ec2.compute.strategy.EC2DestroyNodeStrategy; -import org.jclouds.ec2.compute.strategy.EC2GetImageStrategy; -import org.jclouds.ec2.compute.strategy.EC2GetNodeMetadataStrategy; -import org.jclouds.ec2.compute.strategy.EC2ListNodesStrategy; -import org.jclouds.ec2.compute.strategy.EC2RebootNodeStrategy; -import org.jclouds.ec2.compute.strategy.EC2ResumeNodeStrategy; -import org.jclouds.ec2.compute.strategy.EC2SuspendNodeStrategy; - -/** - * @author Adrian Cole - */ -public class EC2BindComputeStrategiesByClass extends BindComputeStrategiesByClass { - @Override - protected Class<? extends CreateNodesInGroupThenAddToSet> defineRunNodesAndAddToSetStrategy() { - return EC2CreateNodesInGroupThenAddToSet.class; - } - - /** - * not needed, as {@link EC2CreateNodesInGroupThenAddToSet} is used and is already set-based. - */ - @Override - protected Class<? extends CreateNodeWithGroupEncodedIntoName> defineAddNodeWithTagStrategy() { - return null; - } - - /** - * not needed, as {@link EC2CreateNodesInGroupThenAddToSet} is used and is already set-based. - */ - @Override - protected void bindAddNodeWithTagStrategy(Class<? extends CreateNodeWithGroupEncodedIntoName> clazz) { - } - - @Override - protected Class<? extends DestroyNodeStrategy> defineDestroyNodeStrategy() { - return EC2DestroyNodeStrategy.class; - } - - @Override - protected Class<? extends GetNodeMetadataStrategy> defineGetNodeMetadataStrategy() { - return EC2GetNodeMetadataStrategy.class; - } - - @Override - protected Class<? extends GetImageStrategy> defineGetImageStrategy() { - return EC2GetImageStrategy.class; - } - - @Override - protected Class<? extends ListNodesStrategy> defineListNodesStrategy() { - return EC2ListNodesStrategy.class; - } - - @Override - protected Class<? extends RebootNodeStrategy> defineRebootNodeStrategy() { - return EC2RebootNodeStrategy.class; - } - - @Override - protected Class<? extends ResumeNodeStrategy> defineStartNodeStrategy() { - return EC2ResumeNodeStrategy.class; - } - - @Override - protected Class<? extends SuspendNodeStrategy> defineStopNodeStrategy() { - return EC2SuspendNodeStrategy.class; - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2BindComputeSuppliersByClass.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2BindComputeSuppliersByClass.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2BindComputeSuppliersByClass.java deleted file mode 100644 index c131608..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2BindComputeSuppliersByClass.java +++ /dev/null @@ -1,41 +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.ec2.compute.config; - -import java.util.Set; - -import org.jclouds.compute.config.BindComputeSuppliersByClass; -import org.jclouds.compute.domain.Hardware; -import org.jclouds.compute.domain.Image; -import org.jclouds.ec2.compute.suppliers.EC2HardwareSupplier; -import org.jclouds.ec2.compute.suppliers.EC2ImageSupplier; - -import com.google.common.base.Supplier; -/** - * @author Adrian Cole - */ -public class EC2BindComputeSuppliersByClass extends BindComputeSuppliersByClass { - @Override - protected Class<? extends Supplier<Set<? extends Hardware>>> defineHardwareSupplier() { - return EC2HardwareSupplier.class; - } - - @Override - protected Class<? extends Supplier<Set<? extends Image>>> defineImageSupplier() { - return EC2ImageSupplier.class; - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceContextModule.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceContextModule.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceContextModule.java deleted file mode 100644 index 81c874d..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceContextModule.java +++ /dev/null @@ -1,144 +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.ec2.compute.config; - -import static com.google.common.collect.Iterables.toArray; -import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL; -import static org.jclouds.ec2.reference.EC2Constants.PROPERTY_EC2_AMI_OWNERS; - -import java.util.Set; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.atomic.AtomicReference; - -import javax.inject.Named; -import javax.inject.Singleton; - -import org.jclouds.compute.config.BaseComputeServiceContextModule; -import org.jclouds.compute.domain.Image; -import org.jclouds.compute.extensions.ImageExtension; -import org.jclouds.compute.extensions.SecurityGroupExtension; -import org.jclouds.ec2.compute.domain.RegionAndName; -import org.jclouds.ec2.compute.loaders.RegionAndIdToImage; -import org.jclouds.ec2.compute.suppliers.RegionAndNameToImageSupplier; -import org.jclouds.rest.AuthorizationException; -import org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier; - -import com.google.common.base.Optional; -import com.google.common.base.Splitter; -import com.google.common.base.Supplier; -import com.google.common.base.Suppliers; -import com.google.common.base.Throwables; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; -import com.google.common.collect.ImmutableSet; -import com.google.common.util.concurrent.Atomics; -import com.google.inject.Injector; -import com.google.inject.Key; -import com.google.inject.Provides; -import com.google.inject.TypeLiteral; -import com.google.inject.name.Names; - -/** - * Configures the {@link ComputeServiceContext}; requires {@link EC2ComputeService} bound. - * - * @author Adrian Cole - */ -public class EC2ComputeServiceContextModule extends BaseComputeServiceContextModule { - @Override - protected void configure() { - installDependencies(); - install(new EC2BindComputeStrategiesByClass()); - install(new EC2BindComputeSuppliersByClass()); - super.configure(); - } - - protected void installDependencies() { - install(new EC2ComputeServiceDependenciesModule()); - } - - @Override - protected boolean shouldEagerlyParseImages(Injector injector) { - // If no owners to query, then will never lookup all images - String[] amiOwners = injector.getInstance(Key.get(String[].class, Names.named(PROPERTY_EC2_AMI_OWNERS))); - return amiOwners.length > 0; - } - - @Override - protected Supplier<Set<? extends Image>> supplyNonParsingImageCache( - AtomicReference<AuthorizationException> authException, @Named(PROPERTY_SESSION_INTERVAL) long seconds, - final Supplier<Set<? extends Image>> imageSupplier, Injector injector) { - final Supplier<LoadingCache<RegionAndName, ? extends Image>> cache = injector.getInstance(Key.get(new TypeLiteral<Supplier<LoadingCache<RegionAndName, ? extends Image>>>() {})); - return new Supplier<Set<? extends Image>>() { - @Override - public Set<? extends Image> get() { - return ImmutableSet.copyOf(cache.get().asMap().values()); - } - }; - } - - @Provides - @Singleton - protected Supplier<LoadingCache<RegionAndName, ? extends Image>> provideRegionAndNameToImageSupplierCache( - final RegionAndNameToImageSupplier supplier) { - return supplier; - } - - @Provides - @Singleton - protected Supplier<CacheLoader<RegionAndName, Image>> provideRegionAndNameToImageSupplierCacheLoader( - final RegionAndIdToImage delegate) { - return Suppliers.<CacheLoader<RegionAndName, Image>>ofInstance(new CacheLoader<RegionAndName, Image>() { - private final AtomicReference<AuthorizationException> authException = Atomics.newReference(); - - @Override - public Image load(final RegionAndName key) throws Exception { - // raw lookup of an image - Supplier<Image> rawSupplier = new Supplier<Image>() { - @Override public Image get() { - try { - return delegate.load(key); - } catch (ExecutionException e) { - throw Throwables.propagate(e); - } - } - }; - return new SetAndThrowAuthorizationExceptionSupplier<Image>(rawSupplier, authException).get(); - } - - }); - } - - @Provides - @Singleton - @Named(PROPERTY_EC2_AMI_OWNERS) - String[] amiOwners(@Named(PROPERTY_EC2_AMI_OWNERS) String amiOwners) { - if (amiOwners.trim().equals("")) - return new String[] {}; - return toArray(Splitter.on(',').split(amiOwners), String.class); - } - - @Override - protected Optional<ImageExtension> provideImageExtension(Injector i) { - return Optional.of(i.getInstance(ImageExtension.class)); - } - - @Override - protected Optional<SecurityGroupExtension> provideSecurityGroupExtension(Injector i) { - return Optional.of(i.getInstance(SecurityGroupExtension.class)); - } -} - http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceDependenciesModule.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceDependenciesModule.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceDependenciesModule.java deleted file mode 100644 index 9f6c285..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2ComputeServiceDependenciesModule.java +++ /dev/null @@ -1,197 +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.ec2.compute.config; - -import static java.util.concurrent.TimeUnit.MILLISECONDS; -import static org.jclouds.ec2.reference.EC2Constants.PROPERTY_EC2_TIMEOUT_SECURITYGROUP_PRESENT; -import static org.jclouds.util.Predicates2.retry; - -import java.util.Map; -import java.util.concurrent.ConcurrentMap; - -import javax.inject.Named; -import javax.inject.Singleton; - -import org.jclouds.compute.ComputeService; -import org.jclouds.compute.domain.Image; -import org.jclouds.compute.domain.NodeMetadata; -import org.jclouds.compute.domain.NodeMetadata.Status; -import org.jclouds.compute.domain.SecurityGroup; -import org.jclouds.compute.domain.TemplateBuilder; -import org.jclouds.compute.extensions.ImageExtension; -import org.jclouds.compute.extensions.SecurityGroupExtension; -import org.jclouds.compute.options.TemplateOptions; -import org.jclouds.domain.LoginCredentials; -import org.jclouds.ec2.compute.EC2ComputeService; -import org.jclouds.ec2.compute.domain.PasswordDataAndPrivateKey; -import org.jclouds.ec2.compute.domain.RegionAndName; -import org.jclouds.ec2.compute.extensions.EC2ImageExtension; -import org.jclouds.ec2.compute.extensions.EC2SecurityGroupExtension; -import org.jclouds.ec2.compute.functions.AddElasticIpsToNodemetadata; -import org.jclouds.ec2.compute.functions.CreateUniqueKeyPair; -import org.jclouds.ec2.compute.functions.CredentialsForInstance; -import org.jclouds.ec2.compute.functions.EC2ImageParser; -import org.jclouds.ec2.compute.functions.EC2SecurityGroupIdFromName; -import org.jclouds.ec2.compute.functions.EC2SecurityGroupToSecurityGroup; -import org.jclouds.ec2.compute.functions.PasswordCredentialsFromWindowsInstance; -import org.jclouds.ec2.compute.functions.RunningInstanceToNodeMetadata; -import org.jclouds.ec2.compute.functions.WindowsLoginCredentialsFromEncryptedData; -import org.jclouds.ec2.compute.internal.EC2TemplateBuilderImpl; -import org.jclouds.ec2.compute.loaders.CreateSecurityGroupIfNeeded; -import org.jclouds.ec2.compute.loaders.LoadPublicIpForInstanceOrNull; -import org.jclouds.ec2.compute.loaders.RegionAndIdToImage; -import org.jclouds.ec2.compute.options.EC2TemplateOptions; -import org.jclouds.ec2.compute.predicates.SecurityGroupPresent; -import org.jclouds.ec2.domain.Image.ImageState; -import org.jclouds.ec2.domain.InstanceState; -import org.jclouds.ec2.domain.KeyPair; -import org.jclouds.ec2.domain.RunningInstance; -import org.jclouds.ec2.reference.EC2Constants; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Function; -import com.google.common.base.Functions; -import com.google.common.base.Optional; -import com.google.common.base.Predicate; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Maps; -import com.google.inject.AbstractModule; -import com.google.inject.Injector; -import com.google.inject.Provides; -import com.google.inject.TypeLiteral; -import com.google.inject.name.Names; - -/** - * - * @author Adrian Cole - */ -public class EC2ComputeServiceDependenciesModule extends AbstractModule { - - public static final Map<InstanceState, Status> toPortableNodeStatus = ImmutableMap - .<InstanceState, Status> builder() - .put(InstanceState.PENDING, Status.PENDING) - .put(InstanceState.RUNNING, Status.RUNNING) - .put(InstanceState.SHUTTING_DOWN, Status.PENDING) - .put(InstanceState.TERMINATED, Status.TERMINATED) - .put(InstanceState.STOPPING, Status.PENDING) - .put(InstanceState.STOPPED, Status.SUSPENDED) - .put(InstanceState.UNRECOGNIZED, Status.UNRECOGNIZED) - .build(); - - @Singleton - @Provides - protected Map<InstanceState, NodeMetadata.Status> toPortableNodeStatus() { - return toPortableNodeStatus; - } - - @VisibleForTesting - public static final Map<ImageState, Image.Status> toPortableImageStatus = ImmutableMap - .<ImageState, Image.Status> builder() - .put(ImageState.AVAILABLE, Image.Status.AVAILABLE) - .put(ImageState.DEREGISTERED, Image.Status.DELETED) - .put(ImageState.UNRECOGNIZED, Image.Status.UNRECOGNIZED).build(); - - @Singleton - @Provides - protected Map<ImageState, Image.Status> toPortableImageStatus() { - return toPortableImageStatus; - } - - @Override - protected void configure() { - bind(TemplateBuilder.class).to(EC2TemplateBuilderImpl.class); - bind(TemplateOptions.class).to(EC2TemplateOptions.class); - bind(ComputeService.class).to(EC2ComputeService.class); - bind(new TypeLiteral<CacheLoader<RunningInstance, Optional<LoginCredentials>>>() { - }).to(CredentialsForInstance.class); - bind(new TypeLiteral<Function<RegionAndName, KeyPair>>() { - }).to(CreateUniqueKeyPair.class); - bind(new TypeLiteral<CacheLoader<RegionAndName, Image>>() { - }).to(RegionAndIdToImage.class); - bind(new TypeLiteral<CacheLoader<RegionAndName, String>>() { - }).annotatedWith(Names.named("SECURITY")).to(CreateSecurityGroupIfNeeded.class); - bind(new TypeLiteral<CacheLoader<RegionAndName, String>>() { - }).annotatedWith(Names.named("ELASTICIP")).to(LoadPublicIpForInstanceOrNull.class); - bind(new TypeLiteral<Function<String, String>>() { - }).annotatedWith(Names.named("SECGROUP_NAME_TO_ID")).to(EC2SecurityGroupIdFromName.class); - bind(new TypeLiteral<Function<PasswordDataAndPrivateKey, LoginCredentials>>() { - }).to(WindowsLoginCredentialsFromEncryptedData.class); - bind(new TypeLiteral<Function<RunningInstance, LoginCredentials>>() { - }).to(PasswordCredentialsFromWindowsInstance.class); - bind(new TypeLiteral<Function<org.jclouds.ec2.domain.Image, Image>>() { - }).to(EC2ImageParser.class); - bind(new TypeLiteral<Function<org.jclouds.ec2.domain.SecurityGroup, SecurityGroup>>() { - }).to(EC2SecurityGroupToSecurityGroup.class); - bind(new TypeLiteral<ImageExtension>() { - }).to(EC2ImageExtension.class); - bind(new TypeLiteral<SecurityGroupExtension>() { - }).to(EC2SecurityGroupExtension.class); - } - - /** - * only add the overhead of looking up ips when we have enabled the auto-allocate functionality - */ - @Provides - @Singleton - public Function<RunningInstance, NodeMetadata> bindNodeConverter(RunningInstanceToNodeMetadata baseConverter, - AddElasticIpsToNodemetadata addElasticIpsToNodemetadata, - @Named(EC2Constants.PROPERTY_EC2_AUTO_ALLOCATE_ELASTIC_IPS) boolean autoAllocateElasticIps) { - if (!autoAllocateElasticIps) - return baseConverter; - return Functions.compose(addElasticIpsToNodemetadata, baseConverter); - } - - @Provides - @Singleton - protected LoadingCache<RunningInstance, Optional<LoginCredentials>> credentialsMap(CacheLoader<RunningInstance, Optional<LoginCredentials>> in) { - return CacheBuilder.newBuilder().build(in); - } - - @Provides - @Singleton - protected ConcurrentMap<RegionAndName, KeyPair> keypairMap(Injector i) { - return Maps.newConcurrentMap(); - } - - @Provides - @Singleton - @Named("SECURITY") - protected LoadingCache<RegionAndName, String> securityGroupMap( - @Named("SECURITY") CacheLoader<RegionAndName, String> in) { - return CacheBuilder.newBuilder().build(in); - } - - @Provides - @Singleton - @Named("ELASTICIP") - protected LoadingCache<RegionAndName, String> instanceToElasticIp( - @Named("ELASTICIP") CacheLoader<RegionAndName, String> in) { - return CacheBuilder.newBuilder().build(in); - } - - @Provides - @Singleton - @Named("SECURITY") - protected Predicate<RegionAndName> securityGroupEventualConsistencyDelay(SecurityGroupPresent in, - @Named(PROPERTY_EC2_TIMEOUT_SECURITYGROUP_PRESENT) long msDelay) { - return retry(in, msDelay, 100l, MILLISECONDS); - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2ResolveImagesModule.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2ResolveImagesModule.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2ResolveImagesModule.java deleted file mode 100644 index e3e98e6..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/config/EC2ResolveImagesModule.java +++ /dev/null @@ -1,36 +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.ec2.compute.config; - -import org.jclouds.compute.config.ResolvesImages; -import org.jclouds.compute.strategy.PopulateDefaultLoginCredentialsForImageStrategy; -import org.jclouds.ec2.compute.strategy.EC2PopulateDefaultLoginCredentialsForImageStrategy; - -import com.google.inject.AbstractModule; - -/** - * @author Oleksiy Yarmula - */ -@ResolvesImages -public class EC2ResolveImagesModule extends AbstractModule { - - @Override - protected void configure() { - bind(PopulateDefaultLoginCredentialsForImageStrategy.class).to(EC2PopulateDefaultLoginCredentialsForImageStrategy.class); - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/domain/EC2HardwareBuilder.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/domain/EC2HardwareBuilder.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/domain/EC2HardwareBuilder.java deleted file mode 100644 index 185644e..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/domain/EC2HardwareBuilder.java +++ /dev/null @@ -1,599 +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.ec2.compute.domain; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Predicates.not; -import static org.jclouds.compute.domain.Volume.Type.LOCAL; -import static org.jclouds.compute.predicates.ImagePredicates.any; -import static org.jclouds.compute.predicates.ImagePredicates.idIn; - -import java.net.URI; -import java.util.List; -import java.util.Map; - -import org.jclouds.compute.domain.Hardware; -import org.jclouds.compute.domain.HardwareBuilder; -import org.jclouds.compute.domain.Image; -import org.jclouds.compute.domain.OsFamily; -import org.jclouds.compute.domain.Processor; -import org.jclouds.compute.domain.Volume; -import org.jclouds.compute.domain.VolumeBuilder; -import org.jclouds.compute.predicates.ImagePredicates; -import org.jclouds.domain.Location; -import org.jclouds.ec2.domain.InstanceType; -import org.jclouds.ec2.domain.RootDeviceType; -import org.jclouds.ec2.domain.VirtualizationType; - -import com.google.common.base.Predicate; -import com.google.common.base.Predicates; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableList.Builder; -import com.google.common.collect.ImmutableSet; - -/** - * - * @author Adrian Cole - * @see <a href= - * "http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?instance-types.html" - * /> - */ -public class EC2HardwareBuilder extends HardwareBuilder { - private Predicate<Image> rootDeviceType = any(); - private Predicate<Image> virtualizationType = Predicates.or(new IsWindows(), new RequiresVirtualizationType( - VirtualizationType.PARAVIRTUAL)); - private Predicate<Image> imageIds = any(); - private Predicate<Image> is64Bit = any(); - - public EC2HardwareBuilder() { - this.supportsImage = null; - } - - /** - * evaluates true if the Image has the following rootDeviceType - * - * @param type - * rootDeviceType of the image - * @return predicate - */ - public static class RequiresRootDeviceType implements Predicate<Image> { - final RootDeviceType type; - - public RequiresRootDeviceType(final RootDeviceType type) { - this.type = checkNotNull(type, "type must be defined"); - } - - @Override - public boolean apply(Image image) { - return image.getUserMetadata().containsKey("rootDeviceType") - && type == RootDeviceType.fromValue(image.getUserMetadata().get("rootDeviceType")); - } - - @Override - public String toString() { - return "requiresRootDeviceType(" + type + ")"; - } - - } - - public static class IsWindows implements Predicate<Image> { - - @Override - public boolean apply(Image image) { - return image.getOperatingSystem() != null && OsFamily.WINDOWS == image.getOperatingSystem().getFamily(); - } - - @Override - public String toString() { - return "isWindows()"; - } - - } - - /** - * evaluates true if the Image requires the following virtualizationType - * - * @param type - * virtualizationType of the image - * @return predicate - */ - public static class RequiresVirtualizationType implements Predicate<Image> { - final VirtualizationType type; - - public RequiresVirtualizationType(final VirtualizationType type) { - this.type = checkNotNull(type, "type must be defined"); - } - - @Override - public boolean apply(Image image) { - return image.getOperatingSystem() != null && image.getOperatingSystem().getArch() != null - && type == VirtualizationType.fromValue(image.getOperatingSystem().getArch()); - } - - @Override - public String toString() { - return "requiresVirtualizationType(" + type + ")"; - } - - } - - public EC2HardwareBuilder(String instanceType) { - ids(instanceType); - } - - public EC2HardwareBuilder virtualizationType(VirtualizationType virtualizationType) { - this.virtualizationType = new RequiresVirtualizationType(virtualizationType); - return this; - } - - public EC2HardwareBuilder rootDeviceType(RootDeviceType rootDeviceType) { - this.rootDeviceType = new RequiresRootDeviceType(rootDeviceType); - return this; - } - - public EC2HardwareBuilder supportsImageIds(Iterable<String> ids) { - this.imageIds = idIn(ids); - return this; - } - - public EC2HardwareBuilder ids(String id) { - return EC2HardwareBuilder.class.cast(super.ids(id)); - } - - public EC2HardwareBuilder ram(int ram) { - return EC2HardwareBuilder.class.cast(super.ram(ram)); - } - - public EC2HardwareBuilder processors(List<Processor> processors) { - return EC2HardwareBuilder.class.cast(super.processors(processors)); - } - - public EC2HardwareBuilder volumes(List<Volume> volumes) { - return EC2HardwareBuilder.class.cast(super.volumes(volumes)); - } - - public EC2HardwareBuilder supportsImage(Predicate<Image> supportsImage) { - return EC2HardwareBuilder.class.cast(super.supportsImage(supportsImage)); - } - - public EC2HardwareBuilder is64Bit(boolean is64Bit) { - this.is64Bit = is64Bit ? ImagePredicates.is64Bit() : not(ImagePredicates.is64Bit()); - return this; - } - - public EC2HardwareBuilder id(String id) { - return EC2HardwareBuilder.class.cast(super.id(id)); - } - - @Override - public EC2HardwareBuilder providerId(String providerId) { - return EC2HardwareBuilder.class.cast(super.providerId(providerId)); - } - - @Override - public EC2HardwareBuilder name(String name) { - return EC2HardwareBuilder.class.cast(super.name(name)); - } - - @Override - public EC2HardwareBuilder location(Location location) { - return EC2HardwareBuilder.class.cast(super.location(location)); - } - - @Override - public EC2HardwareBuilder uri(URI uri) { - return EC2HardwareBuilder.class.cast(super.uri(uri)); - } - - @Override - public EC2HardwareBuilder userMetadata(Map<String, String> userMetadata) { - return EC2HardwareBuilder.class.cast(super.userMetadata(userMetadata)); - } - - /** - * @see InstanceType#M1_SMALL - */ - public static EC2HardwareBuilder m1_small() { - return new EC2HardwareBuilder(InstanceType.M1_SMALL) - .ram(1740) - .processors(ImmutableList.of(new Processor(1.0, 1.0))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(150.0f).device("/dev/sda2").bootDevice(false).durable(false).build())); - } - - /** - * @see InstanceType#M1_MEDIUM - */ - public static EC2HardwareBuilder m1_medium() { - return new EC2HardwareBuilder(InstanceType.M1_MEDIUM) - .ram(3750) - .processors(ImmutableList.of(new Processor(1.0, 2.0))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(420.0f).device("/dev/sdb").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(420.0f).device("/dev/sdc").bootDevice(false).durable(false).build())); - } - - - /** - * @see InstanceType#T1_MICRO - */ - public static EC2HardwareBuilder t1_micro() { - return new EC2HardwareBuilder(InstanceType.T1_MICRO).ram(630) - .processors(ImmutableList.of(new Processor(1.0, 1.0))).rootDeviceType(RootDeviceType.EBS); - } - - /** - * @see InstanceType#M1_LARGE - */ - public static EC2HardwareBuilder m1_large() { - return new EC2HardwareBuilder(InstanceType.M1_LARGE) - .ram(7680) - .processors(ImmutableList.of(new Processor(2.0, 2.0))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(420.0f).device("/dev/sdb").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(420.0f).device("/dev/sdc").bootDevice(false).durable(false).build())) - .is64Bit(true); - } - - /** - * @see InstanceType#M1_XLARGE - */ - public static EC2HardwareBuilder m1_xlarge() { - return new EC2HardwareBuilder(InstanceType.M1_XLARGE) - .ram(15360) - .processors(ImmutableList.of(new Processor(4.0, 2.0))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(420.0f).device("/dev/sdb").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(420.0f).device("/dev/sdc").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(420.0f).device("/dev/sdd").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(420.0f).device("/dev/sde").bootDevice(false).durable(false).build())) - .is64Bit(true); - } - - /** - * @see InstanceType#M2_XLARGE - */ - public static EC2HardwareBuilder m2_xlarge() { - return new EC2HardwareBuilder(InstanceType.M2_XLARGE).ram(17510) - .processors(ImmutableList.of(new Processor(2.0, 3.25))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(420.0f).device("/dev/sda1").bootDevice(true).durable(false).build())) - .is64Bit(true); - } - - /** - * @see InstanceType#M2_2XLARGE - */ - public static EC2HardwareBuilder m2_2xlarge() { - return new EC2HardwareBuilder(InstanceType.M2_2XLARGE) - .ram(35020) - .processors(ImmutableList.of(new Processor(4.0, 3.25))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(840.0f).device("/dev/sdb").bootDevice(false).durable(false).build())) - .is64Bit(true); - } - - /** - * @see InstanceType#M2_4XLARGE - */ - public static EC2HardwareBuilder m2_4xlarge() { - return new EC2HardwareBuilder(InstanceType.M2_4XLARGE) - .ram(70041) - .processors(ImmutableList.of(new Processor(8.0, 3.25))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(840.0f).device("/dev/sdb").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(840.0f).device("/dev/sdc").bootDevice(false).durable(false).build())) - .is64Bit(true); - } - - /** - * @see InstanceType#M3_MEDIUM - */ - public static EC2HardwareBuilder m3_medium() { - return new EC2HardwareBuilder(InstanceType.M3_MEDIUM) - .ram(3840) - .processors(ImmutableList.of(new Processor(1.0, 3.0))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(4.0f).device("/dev/sdb").bootDevice(false).durable(false).build())); - } - - /** - * @see InstanceType#M3_LARGE - */ - public static EC2HardwareBuilder m3_large() { - return new EC2HardwareBuilder(InstanceType.M3_LARGE) - .ram(7680) - .processors(ImmutableList.of(new Processor(2.0, 3.25))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(32.0f).device("/dev/sdb").bootDevice(false).durable(false).build())); - } - - /** - * @see InstanceType#M3_XLARGE - */ - public static EC2HardwareBuilder m3_xlarge() { - return new EC2HardwareBuilder(InstanceType.M3_XLARGE).ram(15360) - .processors(ImmutableList.of(new Processor(4.0, 3.25))).rootDeviceType(RootDeviceType.EBS).is64Bit(true); - } - - /** - * @see InstanceType#M3_2XLARGE - */ - public static EC2HardwareBuilder m3_2xlarge() { - return new EC2HardwareBuilder(InstanceType.M3_2XLARGE).ram(30720) - .processors(ImmutableList.of(new Processor(8.0, 3.25))).rootDeviceType(RootDeviceType.EBS).is64Bit(true); - } - - /** - * @see InstanceType#C1_MEDIUM - */ - public static EC2HardwareBuilder c1_medium() { - return new EC2HardwareBuilder(InstanceType.C1_MEDIUM) - .ram(1740) - .processors(ImmutableList.of(new Processor(2.0, 2.5))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(340.0f).device("/dev/sda2").bootDevice(false).durable(false).build())); - } - - /** - * @see InstanceType#C1_XLARGE - */ - public static EC2HardwareBuilder c1_xlarge() { - return new EC2HardwareBuilder(InstanceType.C1_XLARGE) - .ram(7168) - .processors(ImmutableList.of(new Processor(8.0, 2.5))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(420.0f).device("/dev/sdb").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(420.0f).device("/dev/sdc").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(420.0f).device("/dev/sdd").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(420.0f).device("/dev/sde").bootDevice(false).durable(false).build())) - .is64Bit(true); - } - - /** - * @see InstanceType#C3_LARGE - */ - public static EC2HardwareBuilder c3_large() { - return new EC2HardwareBuilder(InstanceType.C3_LARGE) - .ram(3750) - .processors(ImmutableList.of(new Processor(2.0, 3.5))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(16.0f).device("/dev/sdb").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(16.0f).device("/dev/sdc").bootDevice(false).durable(false).build())) - .is64Bit(true); - } - - /** - * @see InstanceType#C3_XLARGE - */ - public static EC2HardwareBuilder c3_xlarge() { - return new EC2HardwareBuilder(InstanceType.C3_XLARGE) - .ram(7168) - .processors(ImmutableList.of(new Processor(4.0, 3.5))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(40.0f).device("/dev/sdb").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(40.0f).device("/dev/sdc").bootDevice(false).durable(false).build())) - .is64Bit(true); - } - - /** - * @see InstanceType#C3_2XLARGE - */ - public static EC2HardwareBuilder c3_2xlarge() { - return new EC2HardwareBuilder(InstanceType.C3_2XLARGE) - .ram(15360) - .processors(ImmutableList.of(new Processor(8.0, 3.5))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(80.0f).device("/dev/sdb").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(80.0f).device("/dev/sdc").bootDevice(false).durable(false).build())) - .is64Bit(true); - } - - /** - * @see InstanceType#C3_4XLARGE - */ - public static EC2HardwareBuilder c3_4xlarge() { - return new EC2HardwareBuilder(InstanceType.C3_4XLARGE) - .ram(30720) - .processors(ImmutableList.of(new Processor(16.0, 3.4375))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(160.0f).device("/dev/sdb").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(160.0f).device("/dev/sdc").bootDevice(false).durable(false).build())) - .is64Bit(true); - } - - /** - * @see InstanceType#C3_8XLARGE - */ - public static EC2HardwareBuilder c3_8xlarge() { - return new EC2HardwareBuilder(InstanceType.C3_8XLARGE) - .ram(61440) - .processors(ImmutableList.of(new Processor(32.0, 3.375))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(320.0f).device("/dev/sdb").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(320.0f).device("/dev/sdc").bootDevice(false).durable(false).build())) - .is64Bit(true); - } - - public static EC2HardwareBuilder cg1_4xlarge() { - return new EC2HardwareBuilder(InstanceType.CG1_4XLARGE) - .ram(22 * 1024) - .processors(ImmutableList.of(new Processor(4.0, 4.0), new Processor(4.0, 4.0))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(840.0f).device("/dev/sdb").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(840.0f).device("/dev/sdc").bootDevice(false).durable(false).build())) - .virtualizationType(VirtualizationType.HVM); - } - - public static EC2HardwareBuilder cc1_4xlarge() { - return new EC2HardwareBuilder(InstanceType.CC1_4XLARGE) - .ram(23 * 1024) - .processors(ImmutableList.of(new Processor(4.0, 4.0), new Processor(4.0, 4.0))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(840.0f).device("/dev/sdb").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(840.0f).device("/dev/sdc").bootDevice(false).durable(false).build())) - .virtualizationType(VirtualizationType.HVM); - } - - public static EC2HardwareBuilder cc2_8xlarge() { - return new EC2HardwareBuilder(InstanceType.CC2_8XLARGE) - .ram(60 * 1024 + 512) - .processors(ImmutableList.of(new Processor(8.0, 5.5), new Processor(8.0, 5.5))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(840.0f).device("/dev/sdb").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(840.0f).device("/dev/sdc").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(840.0f).device("/dev/sdd").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(840.0f).device("/dev/sde").bootDevice(false).durable(false).build())) - .virtualizationType(VirtualizationType.HVM); - } - - /** - * @see InstanceType#G2_2XLARGE - */ - public static EC2HardwareBuilder g2_2xlarge() { - return new EC2HardwareBuilder(InstanceType.G2_2XLARGE) - .ram(15*1024) - .processors(ImmutableList.of(new Processor(8.0, 3.25))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(60.0f).device("/dev/sdb").bootDevice(false).durable(false).build())) - .virtualizationType(VirtualizationType.HVM); - } - - /** - * @see InstanceType#I2_XLARGE - */ - public static EC2HardwareBuilder i2_xlarge() { - return new EC2HardwareBuilder(InstanceType.I2_XLARGE) - .ram(30 * 1024 + 512) - .processors(ImmutableList.of(new Processor(4.0, 3.5))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(800.0f).device("/dev/sdb").bootDevice(false).durable(false).build())) - .virtualizationType(VirtualizationType.HVM); - } - - /** - * @see InstanceType#I2_2XLARGE - */ - public static EC2HardwareBuilder i2_2xlarge() { - return new EC2HardwareBuilder(InstanceType.I2_2XLARGE) - .ram(61 * 1024) - .processors(ImmutableList.of(new Processor(8.0, 3.375))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(800.0f).device("/dev/sdb").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(800.0f).device("/dev/sdc").bootDevice(false).durable(false).build())) - .virtualizationType(VirtualizationType.HVM); - } - - /** - * @see InstanceType#I2_4XLARGE - */ - public static EC2HardwareBuilder i2_4xlarge() { - return new EC2HardwareBuilder(InstanceType.I2_4XLARGE) - .ram(122 * 1024) - .processors(ImmutableList.of(new Processor(16.0, 3.3125))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(800.0f).device("/dev/sdb").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(800.0f).device("/dev/sdc").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(800.0f).device("/dev/sdd").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(800.0f).device("/dev/sde").bootDevice(false).durable(false).build())) - .virtualizationType(VirtualizationType.HVM); - } - - /** - * @see InstanceType#I2_8XLARGE - */ - public static EC2HardwareBuilder i2_8xlarge() { - return new EC2HardwareBuilder(InstanceType.I2_8XLARGE) - .ram(244 * 1024) - .processors(ImmutableList.of(new Processor(32.0, 3.25))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(10.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(800.0f).device("/dev/sdb").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(800.0f).device("/dev/sdc").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(800.0f).device("/dev/sdd").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(800.0f).device("/dev/sde").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(800.0f).device("/dev/sdf").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(800.0f).device("/dev/sdg").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(800.0f).device("/dev/sdh").bootDevice(false).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(800.0f).device("/dev/sdi").bootDevice(false).durable(false).build())) - .virtualizationType(VirtualizationType.HVM); - } - - public static EC2HardwareBuilder hi1_4xlarge() { - return new EC2HardwareBuilder(InstanceType.HI1_4XLARGE) - .ram(60 * 1024 + 512) - .processors(ImmutableList.of(new Processor(16.0, 2.1875))) - .volumes(ImmutableList.<Volume> of( - new VolumeBuilder().type(LOCAL).size(1024.0f).device("/dev/sda1").bootDevice(true).durable(false).build(), - new VolumeBuilder().type(LOCAL).size(1024.0f).device("/dev/sdb").bootDevice(false).durable(false).build())) - .virtualizationType(VirtualizationType.HVM); - } - - public static EC2HardwareBuilder hs1_8xlarge() { - float twoTB = 2048.0f * 1024.0f; - Builder<Volume> all24Volumes = ImmutableList.<Volume>builder(); - all24Volumes.add(new VolumeBuilder().type(LOCAL).size(twoTB).device("/dev/sda1").bootDevice(true).durable(false).build()); - for (char letter : ImmutableSet.of('b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', - 'q', 'r', 's', 't', 'u', 'v', 'w', 'x')) { - all24Volumes.add(new VolumeBuilder().type(LOCAL).size(twoTB).device("/dev/sd" + letter).bootDevice(false).durable(false).build()); - } - return new EC2HardwareBuilder(InstanceType.HS1_8XLARGE) - .ram(117 * 1024) - .processors(ImmutableList.of(new Processor(16.0, 2.1875))) - .volumes(all24Volumes.build()) - .virtualizationType(VirtualizationType.HVM); - } - - @SuppressWarnings("unchecked") - @Override - public Hardware build() { - boolean reset = false; - if (this.supportsImage == null) - reset = true; - try { - supportsImage = Predicates.<Image> and(rootDeviceType, virtualizationType, imageIds, is64Bit); - return super.build(); - } finally { - if (reset) - this.supportsImage = null; - } - - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/domain/PasswordDataAndPrivateKey.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/domain/PasswordDataAndPrivateKey.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/domain/PasswordDataAndPrivateKey.java deleted file mode 100644 index 9e0748f..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/domain/PasswordDataAndPrivateKey.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.ec2.compute.domain; - -import org.jclouds.ec2.domain.PasswordData; - -import com.google.common.base.Objects; - -/** - * An encrypted Windows Administrator password, and the private key that can decrypt it. - * - * @author Richard Downer - */ -public class PasswordDataAndPrivateKey { - - private final PasswordData passwordData; - private final String privateKey; - - public PasswordDataAndPrivateKey(PasswordData passwordData, String privateKey) { - this.passwordData = passwordData; - this.privateKey = privateKey; - } - - public PasswordData getPasswordData() { - return passwordData; - } - - public String getPrivateKey() { - return privateKey; - } - - /** - * {@inheritDoc} - */ - @Override - public int hashCode() { - return Objects.hashCode(passwordData, privateKey); - } - - /** - * {@inheritDoc} - */ - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - PasswordDataAndPrivateKey other = PasswordDataAndPrivateKey.class.cast(obj); - return Objects.equal(this.passwordData, other.passwordData) && Objects.equal(this.privateKey, other.privateKey); - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return Objects.toStringHelper(this).omitNullValues().add("passwordData", passwordData).toString(); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/domain/RegionAndName.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/domain/RegionAndName.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/domain/RegionAndName.java deleted file mode 100644 index bdfc04d..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/domain/RegionAndName.java +++ /dev/null @@ -1,111 +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.ec2.compute.domain; - -import static com.google.common.base.Preconditions.checkNotNull; - -import com.google.common.base.Function; -import com.google.common.base.Objects; -import com.google.common.base.Objects.ToStringHelper; - -/** - * - * @author Adrian Cole - */ -public class RegionAndName { - - protected final String region; - protected final String name; - - public String slashEncode() { - return new StringBuilder(region).append('/').append(name).toString(); - } - - public RegionAndName(String region, String name) { - this.region = checkNotNull(region, "region"); - this.name = checkNotNull(name, "name"); - } - - @Override - public int hashCode() { - return Objects.hashCode(region, name); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (!(obj instanceof RegionAndName)) - return false; - RegionAndName other = RegionAndName.class.cast(obj); - return Objects.equal(region, other.region) && Objects.equal(name, other.name); - } - - public String getRegion() { - return region; - } - - public String getName() { - return name; - } - - @Override - public String toString() { - return string().toString(); - } - - protected ToStringHelper string() { - return Objects.toStringHelper("").add("region", region).add("name", name); - } - - private static enum RegionFunction implements Function<RegionAndName, String> { - INSTANCE; - @Override - public String apply(RegionAndName input) { - return input.getRegion(); - } - - @Override - public String toString() { - return "getRegion()"; - } - }; - - public static Function<RegionAndName, String> regionFunction() { - return RegionFunction.INSTANCE; - } - - private static enum NameFunction implements Function<RegionAndName, String> { - INSTANCE; - @Override - public String apply(RegionAndName input) { - return input.getName(); - } - - @Override - public String toString() { - return "getName()"; - } - }; - - public static Function<RegionAndName, String> nameFunction() { - return NameFunction.INSTANCE; - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/domain/RegionNameAndIngressRules.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/domain/RegionNameAndIngressRules.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/domain/RegionNameAndIngressRules.java deleted file mode 100644 index 0063104..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/compute/domain/RegionNameAndIngressRules.java +++ /dev/null @@ -1,44 +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.ec2.compute.domain; - -/** - * - * @author Adrian Cole - */ -public class RegionNameAndIngressRules extends RegionAndName { - private final int[] ports; - private final boolean authorizeSelf; - - public RegionNameAndIngressRules(String region, String tag, int[] ports, boolean authorizeSelf) { - super(region, tag); - this.ports = ports; - this.authorizeSelf = authorizeSelf; - } - - // intentionally not overriding equals or hash-code so that we can search only by region/tag in a - // map - - public int[] getPorts() { - return ports; - } - - public boolean shouldAuthorizeSelf() { - return authorizeSelf; - } - -}
