mirror of https://github.com/apache/jclouds.git
fixed where TemplateOptions was not permitted in ec2
This commit is contained in:
parent
050af3c3f7
commit
dbd42ce7ac
|
@ -19,7 +19,7 @@
|
||||||
package org.jclouds.aws.ec2.compute.strategy;
|
package org.jclouds.aws.ec2.compute.strategy;
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkArgument;
|
import static com.google.common.base.Preconditions.checkArgument;
|
||||||
import static org.jclouds.aws.ec2.options.RunInstancesOptions.Builder.*;
|
import static org.jclouds.aws.ec2.options.RunInstancesOptions.Builder.asType;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -37,6 +37,7 @@ import org.jclouds.aws.ec2.compute.options.EC2TemplateOptions;
|
||||||
import org.jclouds.aws.ec2.domain.KeyPair;
|
import org.jclouds.aws.ec2.domain.KeyPair;
|
||||||
import org.jclouds.aws.ec2.options.RunInstancesOptions;
|
import org.jclouds.aws.ec2.options.RunInstancesOptions;
|
||||||
import org.jclouds.compute.domain.Template;
|
import org.jclouds.compute.domain.Template;
|
||||||
|
import org.jclouds.compute.options.TemplateOptions;
|
||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
@ -72,29 +73,32 @@ public class CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions {
|
||||||
"unexpected image type. should be EC2Size, was: " + template.getSize().getClass());
|
"unexpected image type. should be EC2Size, was: " + template.getSize().getClass());
|
||||||
EC2Size ec2Size = EC2Size.class.cast(template.getSize());
|
EC2Size ec2Size = EC2Size.class.cast(template.getSize());
|
||||||
|
|
||||||
checkArgument(template.getOptions() instanceof EC2TemplateOptions,
|
String keyPairName = createNewKeyPairUnlessUserSpecifiedOtherwise(region, tag, template
|
||||||
"unexpected options type. should be EC2Options, was: "
|
.getOptions());
|
||||||
+ template.getOptions().getClass());
|
Set<String> groups = getSecurityGroupsForTagAndOptions(region, tag, template.getOptions());
|
||||||
EC2TemplateOptions options = EC2TemplateOptions.class.cast(template.getOptions());
|
|
||||||
|
|
||||||
String keyPairName = createNewKeyPairUnlessUserSpecifiedOtherwise(region, tag, options);
|
|
||||||
Set<String> groups = getSecurityGroupsForTagAndOptions(region, tag, options);
|
|
||||||
|
|
||||||
RunInstancesOptions instanceOptions = asType(ec2Size.getInstanceType())//
|
RunInstancesOptions instanceOptions = asType(ec2Size.getInstanceType())//
|
||||||
.withSecurityGroups(groups)//
|
.withSecurityGroups(groups)//
|
||||||
.withAdditionalInfo(tag);
|
.withAdditionalInfo(tag);
|
||||||
|
|
||||||
if (keyPairName != null)
|
if (keyPairName != null)
|
||||||
instanceOptions.withKeyName(keyPairName);
|
instanceOptions.withKeyName(keyPairName);
|
||||||
|
|
||||||
return instanceOptions;
|
return instanceOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
String createNewKeyPairUnlessUserSpecifiedOtherwise(String region, String tag,
|
String createNewKeyPairUnlessUserSpecifiedOtherwise(String region, String tag,
|
||||||
EC2TemplateOptions options) {
|
TemplateOptions options) {
|
||||||
String keyPairName = options.getKeyPair();
|
String keyPairName = null;
|
||||||
if (keyPairName == null && options.shouldAutomaticallyCreateKeyPair()) {
|
boolean shouldAutomaticallyCreateKeyPair = true;
|
||||||
|
if (options instanceof EC2TemplateOptions) {
|
||||||
|
keyPairName = EC2TemplateOptions.class.cast(options).getKeyPair();
|
||||||
|
if (keyPairName == null)
|
||||||
|
shouldAutomaticallyCreateKeyPair = EC2TemplateOptions.class.cast(options)
|
||||||
|
.shouldAutomaticallyCreateKeyPair();
|
||||||
|
}
|
||||||
|
if (keyPairName == null && shouldAutomaticallyCreateKeyPair) {
|
||||||
RegionAndName regionAndName = new RegionAndName(region, tag);
|
RegionAndName regionAndName = new RegionAndName(region, tag);
|
||||||
KeyPair keyPair = createUniqueKeyPair.apply(regionAndName);
|
KeyPair keyPair = createUniqueKeyPair.apply(regionAndName);
|
||||||
// get or create incidental resources
|
// get or create incidental resources
|
||||||
|
@ -110,7 +114,7 @@ public class CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions {
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
Set<String> getSecurityGroupsForTagAndOptions(String region, @Nullable String tag,
|
Set<String> getSecurityGroupsForTagAndOptions(String region, @Nullable String tag,
|
||||||
EC2TemplateOptions options) {
|
TemplateOptions options) {
|
||||||
Set<String> groups = Sets.newLinkedHashSet();
|
Set<String> groups = Sets.newLinkedHashSet();
|
||||||
|
|
||||||
if (tag != null) {
|
if (tag != null) {
|
||||||
|
@ -119,12 +123,15 @@ public class CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions {
|
||||||
|
|
||||||
RegionNameAndIngressRules regionNameAndIngessRulesForMarkerGroup;
|
RegionNameAndIngressRules regionNameAndIngessRulesForMarkerGroup;
|
||||||
|
|
||||||
if (options.getGroupIds().size() == 0) {
|
if (options instanceof EC2TemplateOptions
|
||||||
regionNameAndIngessRulesForMarkerGroup = new RegionNameAndIngressRules(region,
|
&& EC2TemplateOptions.class.cast(options).getGroupIds().size() > 0) {
|
||||||
markerGroup, options.getInboundPorts(), true);
|
|
||||||
} else {
|
|
||||||
regionNameAndIngessRulesForMarkerGroup = new RegionNameAndIngressRules(region,
|
regionNameAndIngessRulesForMarkerGroup = new RegionNameAndIngressRules(region,
|
||||||
markerGroup, new int[] {}, false);
|
markerGroup, new int[] {}, false);
|
||||||
|
groups.addAll(EC2TemplateOptions.class.cast(options).getGroupIds());
|
||||||
|
|
||||||
|
} else {
|
||||||
|
regionNameAndIngessRulesForMarkerGroup = new RegionNameAndIngressRules(region,
|
||||||
|
markerGroup, options.getInboundPorts(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!securityGroupMap.containsKey(regionNameAndIngessRulesForMarkerGroup)) {
|
if (!securityGroupMap.containsKey(regionNameAndIngessRulesForMarkerGroup)) {
|
||||||
|
@ -132,7 +139,6 @@ public class CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions {
|
||||||
createSecurityGroupIfNeeded.apply(regionNameAndIngessRulesForMarkerGroup));
|
createSecurityGroupIfNeeded.apply(regionNameAndIngessRulesForMarkerGroup));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
groups.addAll(options.getGroupIds());
|
|
||||||
return groups;
|
return groups;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -38,6 +38,7 @@ import org.jclouds.aws.ec2.compute.options.EC2TemplateOptions;
|
||||||
import org.jclouds.aws.ec2.domain.KeyPair;
|
import org.jclouds.aws.ec2.domain.KeyPair;
|
||||||
import org.jclouds.aws.ec2.options.RunInstancesOptions;
|
import org.jclouds.aws.ec2.options.RunInstancesOptions;
|
||||||
import org.jclouds.compute.domain.Template;
|
import org.jclouds.compute.domain.Template;
|
||||||
|
import org.jclouds.compute.options.TemplateOptions;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMultimap;
|
import com.google.common.collect.ImmutableMultimap;
|
||||||
|
@ -63,12 +64,12 @@ public class CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptionsTest {
|
||||||
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class, new Method[] {
|
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class, new Method[] {
|
||||||
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class
|
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class
|
||||||
.getDeclaredMethod("createNewKeyPairUnlessUserSpecifiedOtherwise",
|
.getDeclaredMethod("createNewKeyPairUnlessUserSpecifiedOtherwise",
|
||||||
String.class, String.class, EC2TemplateOptions.class),
|
String.class, String.class, TemplateOptions.class),
|
||||||
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class
|
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class
|
||||||
.getDeclaredMethod("getSecurityGroupsForTagAndOptions",
|
.getDeclaredMethod("getSecurityGroupsForTagAndOptions",
|
||||||
String.class, String.class, EC2TemplateOptions.class) });
|
String.class, String.class, TemplateOptions.class) });
|
||||||
|
|
||||||
EC2TemplateOptions options = createMock(EC2TemplateOptions.class);
|
TemplateOptions options = createMock(TemplateOptions.class);
|
||||||
Template template = createMock(Template.class);
|
Template template = createMock(Template.class);
|
||||||
|
|
||||||
// setup expectations
|
// setup expectations
|
||||||
|
|
Loading…
Reference in New Issue