mirror of https://github.com/apache/jclouds.git
Merge branch 'master' of https://github.com/jclouds/jclouds
This commit is contained in:
commit
29b5b14e02
|
@ -109,15 +109,31 @@ public class CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions {
|
||||||
public String createNewKeyPairUnlessUserSpecifiedOtherwise(String region, String group, TemplateOptions options) {
|
public String createNewKeyPairUnlessUserSpecifiedOtherwise(String region, String group, TemplateOptions options) {
|
||||||
String keyPairName = null;
|
String keyPairName = null;
|
||||||
boolean shouldAutomaticallyCreateKeyPair = true;
|
boolean shouldAutomaticallyCreateKeyPair = true;
|
||||||
|
|
||||||
if (options instanceof EC2TemplateOptions) {
|
if (options instanceof EC2TemplateOptions) {
|
||||||
keyPairName = EC2TemplateOptions.class.cast(options).getKeyPair();
|
keyPairName = EC2TemplateOptions.class.cast(options).getKeyPair();
|
||||||
if (keyPairName == null)
|
if (keyPairName == null)
|
||||||
shouldAutomaticallyCreateKeyPair = EC2TemplateOptions.class.cast(options)
|
shouldAutomaticallyCreateKeyPair = EC2TemplateOptions.class.cast(options)
|
||||||
.shouldAutomaticallyCreateKeyPair();
|
.shouldAutomaticallyCreateKeyPair();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyPairName == null && shouldAutomaticallyCreateKeyPair) {
|
if (keyPairName == null && shouldAutomaticallyCreateKeyPair) {
|
||||||
keyPairName = createOrImportKeyPair(region, group, options);
|
keyPairName = createOrImportKeyPair(region, group, options);
|
||||||
|
} else if (keyPairName != null) {
|
||||||
|
if (options.getOverridingCredentials() != null && options.getOverridingCredentials().credential != null) {
|
||||||
|
KeyPair keyPair = KeyPair.builder().region(region).keyName(keyPairName).keyFingerprint("//TODO")
|
||||||
|
.keyMaterial(options.getOverridingCredentials().credential).build();
|
||||||
|
putKeyPairIntoCredentialMap(keyPair);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.getRunScript() != null) {
|
||||||
|
RegionAndName regionAndName = new RegionAndName(region, keyPairName);
|
||||||
|
checkState(credentialsMap.containsKey(regionAndName),
|
||||||
|
"no private key configured for: %s; please use options.overrideLoginCredentialWith(rsa_private_text)",
|
||||||
|
regionAndName);
|
||||||
|
}
|
||||||
|
|
||||||
return keyPairName;
|
return keyPairName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,18 +143,20 @@ public class CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String createUniqueKeyPairAndPutIntoMap(String region, String group) {
|
protected String createUniqueKeyPairAndPutIntoMap(String region, String group) {
|
||||||
String keyPairName;
|
|
||||||
RegionAndName regionAndName = new RegionAndName(region, group);
|
RegionAndName regionAndName = new RegionAndName(region, group);
|
||||||
KeyPair keyPair = createUniqueKeyPair.apply(regionAndName);
|
KeyPair keyPair = createUniqueKeyPair.apply(regionAndName);
|
||||||
keyPairName = keyPair.getKeyName();
|
putKeyPairIntoCredentialMap(keyPair);
|
||||||
|
return keyPair.getKeyName();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void putKeyPairIntoCredentialMap(KeyPair keyPair) {
|
||||||
// get or create incidental resources
|
// get or create incidental resources
|
||||||
// TODO race condition. we were using MapMaker, but it doesn't seem to
|
// TODO race condition. we were using MapMaker, but it doesn't seem to
|
||||||
// refresh properly
|
// refresh properly
|
||||||
// when
|
// when
|
||||||
// another thread
|
// another thread
|
||||||
// deletes a key
|
// deletes a key
|
||||||
credentialsMap.put(new RegionAndName(regionAndName.getRegion(), keyPairName), keyPair);
|
credentialsMap.put(new RegionAndName(keyPair.getRegion(), keyPair.getKeyName()), keyPair);
|
||||||
return keyPairName;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
|
|
|
@ -47,6 +47,7 @@ import org.jclouds.ec2.services.ElasticBlockStoreClient;
|
||||||
import org.jclouds.ec2.services.InstanceClient;
|
import org.jclouds.ec2.services.InstanceClient;
|
||||||
import org.jclouds.ec2.services.KeyPairClient;
|
import org.jclouds.ec2.services.KeyPairClient;
|
||||||
import org.jclouds.ec2.services.SecurityGroupClient;
|
import org.jclouds.ec2.services.SecurityGroupClient;
|
||||||
|
import org.jclouds.scriptbuilder.domain.Statements;
|
||||||
import org.jclouds.sshj.config.SshjSshClientModule;
|
import org.jclouds.sshj.config.SshjSshClientModule;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
@ -97,7 +98,6 @@ public class EC2ComputeServiceLiveTest extends BaseComputeServiceLiveTest {
|
||||||
TemplateOptions options = client.templateOptions();
|
TemplateOptions options = client.templateOptions();
|
||||||
|
|
||||||
options.as(EC2TemplateOptions.class).securityGroups(group);
|
options.as(EC2TemplateOptions.class).securityGroups(group);
|
||||||
options.as(EC2TemplateOptions.class).keyPair(group);
|
|
||||||
|
|
||||||
String startedId = null;
|
String startedId = null;
|
||||||
try {
|
try {
|
||||||
|
@ -110,6 +110,14 @@ public class EC2ComputeServiceLiveTest extends BaseComputeServiceLiveTest {
|
||||||
|
|
||||||
// create a keypair to pass in as well
|
// create a keypair to pass in as well
|
||||||
KeyPair result = keyPairClient.createKeyPairInRegion(null, group);
|
KeyPair result = keyPairClient.createKeyPairInRegion(null, group);
|
||||||
|
options.as(EC2TemplateOptions.class).keyPair(result.getKeyName());
|
||||||
|
|
||||||
|
// pass in the private key, so that we can run a script with it
|
||||||
|
assert result.getKeyMaterial() != null : result;
|
||||||
|
options.overrideLoginCredentialWith(result.getKeyMaterial());
|
||||||
|
|
||||||
|
// an arbitrary command to run
|
||||||
|
options.runScript(Statements.exec("find /usr"));
|
||||||
|
|
||||||
Set<? extends NodeMetadata> nodes = client.createNodesInGroup(group, 1, options);
|
Set<? extends NodeMetadata> nodes = client.createNodesInGroup(group, 1, options);
|
||||||
NodeMetadata first = Iterables.get(nodes, 0);
|
NodeMetadata first = Iterables.get(nodes, 0);
|
||||||
|
|
|
@ -34,6 +34,7 @@ import org.jclouds.aws.domain.Region;
|
||||||
import org.jclouds.compute.domain.Hardware;
|
import org.jclouds.compute.domain.Hardware;
|
||||||
import org.jclouds.compute.domain.Template;
|
import org.jclouds.compute.domain.Template;
|
||||||
import org.jclouds.compute.options.TemplateOptions;
|
import org.jclouds.compute.options.TemplateOptions;
|
||||||
|
import org.jclouds.domain.Credentials;
|
||||||
import org.jclouds.ec2.compute.domain.EC2HardwareBuilder;
|
import org.jclouds.ec2.compute.domain.EC2HardwareBuilder;
|
||||||
import org.jclouds.ec2.compute.domain.RegionAndName;
|
import org.jclouds.ec2.compute.domain.RegionAndName;
|
||||||
import org.jclouds.ec2.compute.domain.RegionNameAndIngressRules;
|
import org.jclouds.ec2.compute.domain.RegionNameAndIngressRules;
|
||||||
|
@ -44,6 +45,7 @@ import org.jclouds.ec2.domain.BlockDeviceMapping;
|
||||||
import org.jclouds.ec2.domain.KeyPair;
|
import org.jclouds.ec2.domain.KeyPair;
|
||||||
import org.jclouds.ec2.options.RunInstancesOptions;
|
import org.jclouds.ec2.options.RunInstancesOptions;
|
||||||
import org.jclouds.encryption.internal.Base64;
|
import org.jclouds.encryption.internal.Base64;
|
||||||
|
import org.jclouds.scriptbuilder.domain.Statements;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
|
@ -76,15 +78,15 @@ public class CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptionsTest {
|
||||||
|
|
||||||
// create mocks
|
// create mocks
|
||||||
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions strategy = createMock(
|
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions strategy = createMock(
|
||||||
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class, new Method[] {
|
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class,
|
||||||
|
new Method[] {
|
||||||
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class
|
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class
|
||||||
.getDeclaredMethod("getOptionsProvider"),
|
.getDeclaredMethod("getOptionsProvider"),
|
||||||
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class.getDeclaredMethod(
|
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class.getDeclaredMethod(
|
||||||
"createNewKeyPairUnlessUserSpecifiedOtherwise", String.class, String.class,
|
"createNewKeyPairUnlessUserSpecifiedOtherwise", String.class, String.class,
|
||||||
TemplateOptions.class),
|
TemplateOptions.class),
|
||||||
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class
|
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class.getDeclaredMethod(
|
||||||
.getDeclaredMethod("getSecurityGroupsForTagAndOptions", String.class, String.class,
|
"getSecurityGroupsForTagAndOptions", String.class, String.class, TemplateOptions.class) });
|
||||||
TemplateOptions.class) });
|
|
||||||
|
|
||||||
EC2TemplateOptions options = createMock(EC2TemplateOptions.class);
|
EC2TemplateOptions options = createMock(EC2TemplateOptions.class);
|
||||||
Template template = createMock(Template.class);
|
Template template = createMock(Template.class);
|
||||||
|
@ -107,9 +109,10 @@ public class CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptionsTest {
|
||||||
// run
|
// run
|
||||||
RunInstancesOptions customize = strategy.execute(region, tag, template);
|
RunInstancesOptions customize = strategy.execute(region, tag, template);
|
||||||
assertEquals(customize.buildQueryParameters(), ImmutableMultimap.<String, String> of());
|
assertEquals(customize.buildQueryParameters(), ImmutableMultimap.<String, String> of());
|
||||||
assertEquals(customize.buildFormParameters().entries(), ImmutableMultimap.<String, String> of("InstanceType",
|
assertEquals(
|
||||||
size.getProviderId(), "SecurityGroup.1", generatedGroup, "KeyName", systemGeneratedKeyPairName)
|
customize.buildFormParameters().entries(),
|
||||||
.entries());
|
ImmutableMultimap.<String, String> of("InstanceType", size.getProviderId(), "SecurityGroup.1",
|
||||||
|
generatedGroup, "KeyName", systemGeneratedKeyPairName).entries());
|
||||||
assertEquals(customize.buildMatrixParameters(), ImmutableMultimap.<String, String> of());
|
assertEquals(customize.buildMatrixParameters(), ImmutableMultimap.<String, String> of());
|
||||||
assertEquals(customize.buildRequestHeaders(), ImmutableMultimap.<String, String> of());
|
assertEquals(customize.buildRequestHeaders(), ImmutableMultimap.<String, String> of());
|
||||||
assertEquals(customize.buildStringPayload(), null);
|
assertEquals(customize.buildStringPayload(), null);
|
||||||
|
@ -131,15 +134,15 @@ public class CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptionsTest {
|
||||||
|
|
||||||
// create mocks
|
// create mocks
|
||||||
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions strategy = createMock(
|
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions strategy = createMock(
|
||||||
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class, new Method[] {
|
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class,
|
||||||
|
new Method[] {
|
||||||
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class
|
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class
|
||||||
.getDeclaredMethod("getOptionsProvider"),
|
.getDeclaredMethod("getOptionsProvider"),
|
||||||
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class.getDeclaredMethod(
|
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class.getDeclaredMethod(
|
||||||
"createNewKeyPairUnlessUserSpecifiedOtherwise", String.class, String.class,
|
"createNewKeyPairUnlessUserSpecifiedOtherwise", String.class, String.class,
|
||||||
TemplateOptions.class),
|
TemplateOptions.class),
|
||||||
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class
|
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions.class.getDeclaredMethod(
|
||||||
.getDeclaredMethod("getSecurityGroupsForTagAndOptions", String.class, String.class,
|
"getSecurityGroupsForTagAndOptions", String.class, String.class, TemplateOptions.class) });
|
||||||
TemplateOptions.class) });
|
|
||||||
|
|
||||||
EC2TemplateOptions options = createMock(EC2TemplateOptions.class);
|
EC2TemplateOptions options = createMock(EC2TemplateOptions.class);
|
||||||
Template template = createMock(Template.class);
|
Template template = createMock(Template.class);
|
||||||
|
@ -162,9 +165,10 @@ public class CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptionsTest {
|
||||||
// run
|
// run
|
||||||
RunInstancesOptions customize = strategy.execute(region, tag, template);
|
RunInstancesOptions customize = strategy.execute(region, tag, template);
|
||||||
assertEquals(customize.buildQueryParameters(), ImmutableMultimap.<String, String> of());
|
assertEquals(customize.buildQueryParameters(), ImmutableMultimap.<String, String> of());
|
||||||
assertEquals(customize.buildFormParameters().entries(), ImmutableMultimap.<String, String> of("InstanceType",
|
assertEquals(
|
||||||
size.getProviderId(), "SecurityGroup.1", "group", "KeyName", systemGeneratedKeyPairName, "UserData",
|
customize.buildFormParameters().entries(),
|
||||||
Base64.encodeBytes("hello".getBytes())).entries());
|
ImmutableMultimap.<String, String> of("InstanceType", size.getProviderId(), "SecurityGroup.1", "group",
|
||||||
|
"KeyName", systemGeneratedKeyPairName, "UserData", Base64.encodeBytes("hello".getBytes())).entries());
|
||||||
assertEquals(customize.buildMatrixParameters(), ImmutableMultimap.<String, String> of());
|
assertEquals(customize.buildMatrixParameters(), ImmutableMultimap.<String, String> of());
|
||||||
assertEquals(customize.buildRequestHeaders(), ImmutableMultimap.<String, String> of());
|
assertEquals(customize.buildRequestHeaders(), ImmutableMultimap.<String, String> of());
|
||||||
assertEquals(customize.buildStringPayload(), null);
|
assertEquals(customize.buildStringPayload(), null);
|
||||||
|
@ -188,6 +192,106 @@ public class CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptionsTest {
|
||||||
|
|
||||||
// setup expectations
|
// setup expectations
|
||||||
expect(options.getKeyPair()).andReturn(userSuppliedKeyPair);
|
expect(options.getKeyPair()).andReturn(userSuppliedKeyPair);
|
||||||
|
expect(options.getOverridingCredentials()).andReturn(null);
|
||||||
|
expect(options.getRunScript()).andReturn(null);
|
||||||
|
|
||||||
|
// replay mocks
|
||||||
|
replay(options);
|
||||||
|
replay(keyPair);
|
||||||
|
replayStrategy(strategy);
|
||||||
|
|
||||||
|
// run
|
||||||
|
assertEquals(strategy.createNewKeyPairUnlessUserSpecifiedOtherwise(region, tag, options), userSuppliedKeyPair);
|
||||||
|
|
||||||
|
// verify mocks
|
||||||
|
verify(options);
|
||||||
|
verify(keyPair);
|
||||||
|
verifyStrategy(strategy);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expectedExceptions = IllegalStateException.class)
|
||||||
|
public void testCreateNewKeyPairUnlessUserSpecifiedOtherwise_reusesKeyWhenToldToWithRunScriptButNoCredentials() {
|
||||||
|
// setup constants
|
||||||
|
String region = Region.AP_SOUTHEAST_1;
|
||||||
|
String tag = "tag";
|
||||||
|
String userSuppliedKeyPair = "myKeyPair";
|
||||||
|
|
||||||
|
// create mocks
|
||||||
|
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions strategy = setupStrategy();
|
||||||
|
EC2TemplateOptions options = createMock(EC2TemplateOptions.class);
|
||||||
|
KeyPair keyPair = createMock(KeyPair.class);
|
||||||
|
|
||||||
|
// setup expectations
|
||||||
|
expect(options.getKeyPair()).andReturn(userSuppliedKeyPair);
|
||||||
|
expect(options.getOverridingCredentials()).andReturn(null);
|
||||||
|
expect(options.getRunScript()).andReturn(Statements.exec("echo foo"));
|
||||||
|
expect(strategy.credentialsMap.containsKey(new RegionAndName(region, userSuppliedKeyPair))).andReturn(false);
|
||||||
|
|
||||||
|
// replay mocks
|
||||||
|
replay(options);
|
||||||
|
replay(keyPair);
|
||||||
|
replayStrategy(strategy);
|
||||||
|
|
||||||
|
// run
|
||||||
|
assertEquals(strategy.createNewKeyPairUnlessUserSpecifiedOtherwise(region, tag, options), userSuppliedKeyPair);
|
||||||
|
|
||||||
|
// verify mocks
|
||||||
|
verify(options);
|
||||||
|
verify(keyPair);
|
||||||
|
verifyStrategy(strategy);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testCreateNewKeyPairUnlessUserSpecifiedOtherwise_reusesKeyWhenToldToWithRunScriptAndCredentialsAlreadyInMap() {
|
||||||
|
// setup constants
|
||||||
|
String region = Region.AP_SOUTHEAST_1;
|
||||||
|
String tag = "tag";
|
||||||
|
String userSuppliedKeyPair = "myKeyPair";
|
||||||
|
|
||||||
|
// create mocks
|
||||||
|
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions strategy = setupStrategy();
|
||||||
|
EC2TemplateOptions options = createMock(EC2TemplateOptions.class);
|
||||||
|
KeyPair keyPair = createMock(KeyPair.class);
|
||||||
|
|
||||||
|
// setup expectations
|
||||||
|
expect(options.getKeyPair()).andReturn(userSuppliedKeyPair);
|
||||||
|
expect(options.getOverridingCredentials()).andReturn(null);
|
||||||
|
expect(options.getRunScript()).andReturn(Statements.exec("echo foo"));
|
||||||
|
expect(strategy.credentialsMap.containsKey(new RegionAndName(region, userSuppliedKeyPair))).andReturn(true);
|
||||||
|
|
||||||
|
// replay mocks
|
||||||
|
replay(options);
|
||||||
|
replay(keyPair);
|
||||||
|
replayStrategy(strategy);
|
||||||
|
|
||||||
|
// run
|
||||||
|
assertEquals(strategy.createNewKeyPairUnlessUserSpecifiedOtherwise(region, tag, options), userSuppliedKeyPair);
|
||||||
|
|
||||||
|
// verify mocks
|
||||||
|
verify(options);
|
||||||
|
verify(keyPair);
|
||||||
|
verifyStrategy(strategy);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testCreateNewKeyPairUnlessUserSpecifiedOtherwise_reusesKeyWhenToldToWithRunScriptAndCredentialsSpecified() {
|
||||||
|
// setup constants
|
||||||
|
String region = Region.AP_SOUTHEAST_1;
|
||||||
|
String tag = "tag";
|
||||||
|
String userSuppliedKeyPair = "myKeyPair";
|
||||||
|
|
||||||
|
// create mocks
|
||||||
|
CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions strategy = setupStrategy();
|
||||||
|
EC2TemplateOptions options = createMock(EC2TemplateOptions.class);
|
||||||
|
KeyPair keyPair = createMock(KeyPair.class);
|
||||||
|
|
||||||
|
// setup expectations
|
||||||
|
expect(options.getKeyPair()).andReturn(userSuppliedKeyPair);
|
||||||
|
expect(options.getOverridingCredentials()).andReturn(new Credentials(null, "MyRsa")).atLeastOnce();
|
||||||
|
expect(
|
||||||
|
strategy.credentialsMap.put(new RegionAndName(region, userSuppliedKeyPair), KeyPair.builder()
|
||||||
|
.region(region).keyName(userSuppliedKeyPair).keyFingerprint("//TODO").keyMaterial("MyRsa").build()))
|
||||||
|
.andReturn(null);
|
||||||
|
expect(options.getRunScript()).andReturn(Statements.exec("echo foo"));
|
||||||
|
expect(strategy.credentialsMap.containsKey(new RegionAndName(region, userSuppliedKeyPair))).andReturn(true);
|
||||||
|
|
||||||
// replay mocks
|
// replay mocks
|
||||||
replay(options);
|
replay(options);
|
||||||
|
@ -220,9 +324,11 @@ public class CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptionsTest {
|
||||||
expect(options.getKeyPair()).andReturn(userSuppliedKeyPair);
|
expect(options.getKeyPair()).andReturn(userSuppliedKeyPair);
|
||||||
expect(options.shouldAutomaticallyCreateKeyPair()).andReturn(shouldAutomaticallyCreateKeyPair);
|
expect(options.shouldAutomaticallyCreateKeyPair()).andReturn(shouldAutomaticallyCreateKeyPair);
|
||||||
expect(strategy.createUniqueKeyPair.apply(new RegionAndName(region, tag))).andReturn(keyPair);
|
expect(strategy.createUniqueKeyPair.apply(new RegionAndName(region, tag))).andReturn(keyPair);
|
||||||
|
expect(keyPair.getRegion()).andReturn(region).atLeastOnce();
|
||||||
expect(keyPair.getKeyName()).andReturn(systemGeneratedKeyPairName).atLeastOnce();
|
expect(keyPair.getKeyName()).andReturn(systemGeneratedKeyPairName).atLeastOnce();
|
||||||
expect(strategy.credentialsMap.put(new RegionAndName(region, systemGeneratedKeyPairName), keyPair)).andReturn(
|
expect(strategy.credentialsMap.put(new RegionAndName(region, systemGeneratedKeyPairName), keyPair)).andReturn(
|
||||||
null);
|
null);
|
||||||
|
expect(options.getRunScript()).andReturn(null);
|
||||||
|
|
||||||
// replay mocks
|
// replay mocks
|
||||||
replay(options);
|
replay(options);
|
||||||
|
@ -254,6 +360,7 @@ public class CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptionsTest {
|
||||||
|
|
||||||
// setup expectations
|
// setup expectations
|
||||||
expect(options.getKeyPair()).andReturn(userSuppliedKeyPair);
|
expect(options.getKeyPair()).andReturn(userSuppliedKeyPair);
|
||||||
|
expect(options.getRunScript()).andReturn(null);
|
||||||
expect(options.shouldAutomaticallyCreateKeyPair()).andReturn(shouldAutomaticallyCreateKeyPair);
|
expect(options.shouldAutomaticallyCreateKeyPair()).andReturn(shouldAutomaticallyCreateKeyPair);
|
||||||
|
|
||||||
// replay mocks
|
// replay mocks
|
||||||
|
|
|
@ -38,6 +38,7 @@ import org.jclouds.ec2.domain.SecurityGroup;
|
||||||
import org.jclouds.ec2.services.InstanceClient;
|
import org.jclouds.ec2.services.InstanceClient;
|
||||||
import org.jclouds.ec2.services.KeyPairClient;
|
import org.jclouds.ec2.services.KeyPairClient;
|
||||||
import org.jclouds.ec2.util.IpPermissions;
|
import org.jclouds.ec2.util.IpPermissions;
|
||||||
|
import org.jclouds.scriptbuilder.domain.Statements;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableSortedSet;
|
import com.google.common.collect.ImmutableSortedSet;
|
||||||
|
@ -74,7 +75,6 @@ public class AWSEC2ComputeServiceLiveTest extends EC2ComputeServiceLiveTest {
|
||||||
|
|
||||||
// Date before = new Date();
|
// Date before = new Date();
|
||||||
|
|
||||||
options.as(AWSEC2TemplateOptions.class).keyPair(group);
|
|
||||||
options.as(AWSEC2TemplateOptions.class).enableMonitoring();
|
options.as(AWSEC2TemplateOptions.class).enableMonitoring();
|
||||||
options.as(AWSEC2TemplateOptions.class).spotPrice(0.3f);
|
options.as(AWSEC2TemplateOptions.class).spotPrice(0.3f);
|
||||||
|
|
||||||
|
@ -93,6 +93,14 @@ public class AWSEC2ComputeServiceLiveTest extends EC2ComputeServiceLiveTest {
|
||||||
|
|
||||||
// create a keypair to pass in as well
|
// create a keypair to pass in as well
|
||||||
KeyPair result = keyPairClient.createKeyPairInRegion(null, group);
|
KeyPair result = keyPairClient.createKeyPairInRegion(null, group);
|
||||||
|
options.as(AWSEC2TemplateOptions.class).keyPair(result.getKeyName());
|
||||||
|
|
||||||
|
// pass in the private key, so that we can run a script with it
|
||||||
|
assert result.getKeyMaterial() != null : result;
|
||||||
|
options.overrideLoginCredentialWith(result.getKeyMaterial());
|
||||||
|
|
||||||
|
// an arbitrary command to run
|
||||||
|
options.runScript(Statements.exec("find /usr"));
|
||||||
|
|
||||||
Set<? extends NodeMetadata> nodes = client.createNodesInGroup(group, 1, options);
|
Set<? extends NodeMetadata> nodes = client.createNodesInGroup(group, 1, options);
|
||||||
NodeMetadata first = Iterables.get(nodes, 0);
|
NodeMetadata first = Iterables.get(nodes, 0);
|
||||||
|
|
|
@ -44,11 +44,13 @@ import org.jclouds.ec2.compute.EC2TemplateBuilderTest;
|
||||||
import org.jclouds.ec2.compute.domain.EC2HardwareBuilder;
|
import org.jclouds.ec2.compute.domain.EC2HardwareBuilder;
|
||||||
import org.jclouds.ec2.compute.domain.RegionAndName;
|
import org.jclouds.ec2.compute.domain.RegionAndName;
|
||||||
import org.jclouds.ec2.compute.domain.RegionNameAndIngressRules;
|
import org.jclouds.ec2.compute.domain.RegionNameAndIngressRules;
|
||||||
|
import org.jclouds.ec2.compute.options.EC2TemplateOptions;
|
||||||
import org.jclouds.ec2.compute.strategy.CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions;
|
import org.jclouds.ec2.compute.strategy.CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions;
|
||||||
import org.jclouds.ec2.domain.BlockDeviceMapping;
|
import org.jclouds.ec2.domain.BlockDeviceMapping;
|
||||||
import org.jclouds.ec2.domain.KeyPair;
|
import org.jclouds.ec2.domain.KeyPair;
|
||||||
import org.jclouds.ec2.options.RunInstancesOptions;
|
import org.jclouds.ec2.options.RunInstancesOptions;
|
||||||
import org.jclouds.encryption.internal.Base64;
|
import org.jclouds.encryption.internal.Base64;
|
||||||
|
import org.jclouds.scriptbuilder.domain.Statements;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
|
@ -382,19 +384,24 @@ public class CreateKeyPairPlacementAndSecurityGroupsAsNeededAndReturnRunOptionsT
|
||||||
verify(strategy);
|
verify(strategy);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testCreateNewKeyPairUnlessUserSpecifiedOtherwise_reusesKeyWhenToldTo() {
|
|
||||||
|
@Test(expectedExceptions = IllegalStateException.class)
|
||||||
|
public void testCreateNewKeyPairUnlessUserSpecifiedOtherwise_reusesKeyWhenToldToWithRunScriptButNoCredentials() {
|
||||||
// setup constants
|
// setup constants
|
||||||
String region = Region.AP_SOUTHEAST_1;
|
String region = Region.AP_SOUTHEAST_1;
|
||||||
String group = "group";
|
String tag = "tag";
|
||||||
String userSuppliedKeyPair = "myKeyPair";
|
String userSuppliedKeyPair = "myKeyPair";
|
||||||
|
|
||||||
// create mocks
|
// create mocks
|
||||||
CreateKeyPairPlacementAndSecurityGroupsAsNeededAndReturnRunOptions strategy = setupStrategy();
|
CreateKeyPairPlacementAndSecurityGroupsAsNeededAndReturnRunOptions strategy = setupStrategy();
|
||||||
AWSEC2TemplateOptions options = createMock(AWSEC2TemplateOptions.class);
|
EC2TemplateOptions options = createMock(EC2TemplateOptions.class);
|
||||||
KeyPair keyPair = createMock(KeyPair.class);
|
KeyPair keyPair = createMock(KeyPair.class);
|
||||||
|
|
||||||
// setup expectations
|
// setup expectations
|
||||||
expect(options.getKeyPair()).andReturn(userSuppliedKeyPair);
|
expect(options.getKeyPair()).andReturn(userSuppliedKeyPair);
|
||||||
|
expect(options.getOverridingCredentials()).andReturn(null);
|
||||||
|
expect(options.getRunScript()).andReturn(Statements.exec("echo foo"));
|
||||||
|
expect(strategy.credentialsMap.containsKey(new RegionAndName(region, userSuppliedKeyPair))).andReturn(false);
|
||||||
|
|
||||||
// replay mocks
|
// replay mocks
|
||||||
replay(options);
|
replay(options);
|
||||||
|
@ -402,7 +409,73 @@ public class CreateKeyPairPlacementAndSecurityGroupsAsNeededAndReturnRunOptionsT
|
||||||
replayStrategy(strategy);
|
replayStrategy(strategy);
|
||||||
|
|
||||||
// run
|
// run
|
||||||
assertEquals(strategy.createNewKeyPairUnlessUserSpecifiedOtherwise(region, group, options), userSuppliedKeyPair);
|
assertEquals(strategy.createNewKeyPairUnlessUserSpecifiedOtherwise(region, tag, options), userSuppliedKeyPair);
|
||||||
|
|
||||||
|
// verify mocks
|
||||||
|
verify(options);
|
||||||
|
verify(keyPair);
|
||||||
|
verifyStrategy(strategy);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testCreateNewKeyPairUnlessUserSpecifiedOtherwise_reusesKeyWhenToldToWithRunScriptAndCredentialsAlreadyInMap() {
|
||||||
|
// setup constants
|
||||||
|
String region = Region.AP_SOUTHEAST_1;
|
||||||
|
String tag = "tag";
|
||||||
|
String userSuppliedKeyPair = "myKeyPair";
|
||||||
|
|
||||||
|
// create mocks
|
||||||
|
CreateKeyPairPlacementAndSecurityGroupsAsNeededAndReturnRunOptions strategy = setupStrategy();
|
||||||
|
EC2TemplateOptions options = createMock(EC2TemplateOptions.class);
|
||||||
|
KeyPair keyPair = createMock(KeyPair.class);
|
||||||
|
|
||||||
|
// setup expectations
|
||||||
|
expect(options.getKeyPair()).andReturn(userSuppliedKeyPair);
|
||||||
|
expect(options.getOverridingCredentials()).andReturn(null);
|
||||||
|
expect(options.getRunScript()).andReturn(Statements.exec("echo foo"));
|
||||||
|
expect(strategy.credentialsMap.containsKey(new RegionAndName(region, userSuppliedKeyPair))).andReturn(true);
|
||||||
|
|
||||||
|
// replay mocks
|
||||||
|
replay(options);
|
||||||
|
replay(keyPair);
|
||||||
|
replayStrategy(strategy);
|
||||||
|
|
||||||
|
// run
|
||||||
|
assertEquals(strategy.createNewKeyPairUnlessUserSpecifiedOtherwise(region, tag, options), userSuppliedKeyPair);
|
||||||
|
|
||||||
|
// verify mocks
|
||||||
|
verify(options);
|
||||||
|
verify(keyPair);
|
||||||
|
verifyStrategy(strategy);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testCreateNewKeyPairUnlessUserSpecifiedOtherwise_reusesKeyWhenToldToWithRunScriptAndCredentialsSpecified() {
|
||||||
|
// setup constants
|
||||||
|
String region = Region.AP_SOUTHEAST_1;
|
||||||
|
String tag = "tag";
|
||||||
|
String userSuppliedKeyPair = "myKeyPair";
|
||||||
|
|
||||||
|
// create mocks
|
||||||
|
CreateKeyPairPlacementAndSecurityGroupsAsNeededAndReturnRunOptions strategy = setupStrategy();
|
||||||
|
EC2TemplateOptions options = createMock(EC2TemplateOptions.class);
|
||||||
|
KeyPair keyPair = createMock(KeyPair.class);
|
||||||
|
|
||||||
|
// setup expectations
|
||||||
|
expect(options.getKeyPair()).andReturn(userSuppliedKeyPair);
|
||||||
|
expect(options.getOverridingCredentials()).andReturn(new Credentials(null, "MyRsa")).atLeastOnce();
|
||||||
|
expect(
|
||||||
|
strategy.credentialsMap.put(new RegionAndName(region, userSuppliedKeyPair), KeyPair.builder()
|
||||||
|
.region(region).keyName(userSuppliedKeyPair).keyFingerprint("//TODO").keyMaterial("MyRsa").build()))
|
||||||
|
.andReturn(null);
|
||||||
|
expect(options.getRunScript()).andReturn(Statements.exec("echo foo"));
|
||||||
|
expect(strategy.credentialsMap.containsKey(new RegionAndName(region, userSuppliedKeyPair))).andReturn(true);
|
||||||
|
|
||||||
|
// replay mocks
|
||||||
|
replay(options);
|
||||||
|
replay(keyPair);
|
||||||
|
replayStrategy(strategy);
|
||||||
|
|
||||||
|
// run
|
||||||
|
assertEquals(strategy.createNewKeyPairUnlessUserSpecifiedOtherwise(region, tag, options), userSuppliedKeyPair);
|
||||||
|
|
||||||
// verify mocks
|
// verify mocks
|
||||||
verify(options);
|
verify(options);
|
||||||
|
@ -431,7 +504,7 @@ public class CreateKeyPairPlacementAndSecurityGroupsAsNeededAndReturnRunOptionsT
|
||||||
.andReturn(keyPair);
|
.andReturn(keyPair);
|
||||||
expect(options.dontAuthorizePublicKey()).andReturn(options);
|
expect(options.dontAuthorizePublicKey()).andReturn(options);
|
||||||
expect(options.getOverridingCredentials()).andReturn(new Credentials("foo", "bar")).times(3);
|
expect(options.getOverridingCredentials()).andReturn(new Credentials("foo", "bar")).times(3);
|
||||||
expect(options.getRunScript()).andReturn(null);
|
expect(options.getRunScript()).andReturn(null).times(2);
|
||||||
expect(options.getPrivateKey()).andReturn(null);
|
expect(options.getPrivateKey()).andReturn(null);
|
||||||
expect(
|
expect(
|
||||||
strategy.credentialsMap.put(new RegionAndName(region, "jclouds#" + group),
|
strategy.credentialsMap.put(new RegionAndName(region, "jclouds#" + group),
|
||||||
|
@ -470,7 +543,7 @@ public class CreateKeyPairPlacementAndSecurityGroupsAsNeededAndReturnRunOptionsT
|
||||||
.andReturn(keyPair);
|
.andReturn(keyPair);
|
||||||
expect(options.dontAuthorizePublicKey()).andReturn(options);
|
expect(options.dontAuthorizePublicKey()).andReturn(options);
|
||||||
expect(options.getOverridingCredentials()).andReturn(null);
|
expect(options.getOverridingCredentials()).andReturn(null);
|
||||||
expect(options.getRunScript()).andReturn(null);
|
expect(options.getRunScript()).andReturn(null).times(2);
|
||||||
expect(options.getPrivateKey()).andReturn(null);
|
expect(options.getPrivateKey()).andReturn(null);
|
||||||
expect(strategy.credentialsMap.put(new RegionAndName(region, "jclouds#" + group), keyPair)).andReturn(null);
|
expect(strategy.credentialsMap.put(new RegionAndName(region, "jclouds#" + group), keyPair)).andReturn(null);
|
||||||
|
|
||||||
|
@ -505,7 +578,9 @@ public class CreateKeyPairPlacementAndSecurityGroupsAsNeededAndReturnRunOptionsT
|
||||||
expect(strategy.credentialsMap.get(new RegionAndName(region, "jclouds#" + group))).andReturn(null);
|
expect(strategy.credentialsMap.get(new RegionAndName(region, "jclouds#" + group))).andReturn(null);
|
||||||
expect(options.getPublicKey()).andReturn(null).times(2);
|
expect(options.getPublicKey()).andReturn(null).times(2);
|
||||||
expect(strategy.createUniqueKeyPair.apply(new RegionAndName(region, group))).andReturn(keyPair);
|
expect(strategy.createUniqueKeyPair.apply(new RegionAndName(region, group))).andReturn(keyPair);
|
||||||
|
expect(keyPair.getRegion()).andReturn(region).atLeastOnce();
|
||||||
expect(keyPair.getKeyName()).andReturn(systemGeneratedKeyPairName).atLeastOnce();
|
expect(keyPair.getKeyName()).andReturn(systemGeneratedKeyPairName).atLeastOnce();
|
||||||
|
expect(options.getRunScript()).andReturn(null);
|
||||||
expect(strategy.credentialsMap.put(new RegionAndName(region, systemGeneratedKeyPairName), keyPair)).andReturn(
|
expect(strategy.credentialsMap.put(new RegionAndName(region, systemGeneratedKeyPairName), keyPair)).andReturn(
|
||||||
null);
|
null);
|
||||||
|
|
||||||
|
@ -539,6 +614,7 @@ public class CreateKeyPairPlacementAndSecurityGroupsAsNeededAndReturnRunOptionsT
|
||||||
|
|
||||||
// setup expectations
|
// setup expectations
|
||||||
expect(options.getKeyPair()).andReturn(userSuppliedKeyPair);
|
expect(options.getKeyPair()).andReturn(userSuppliedKeyPair);
|
||||||
|
expect(options.getRunScript()).andReturn(null);
|
||||||
expect(options.shouldAutomaticallyCreateKeyPair()).andReturn(shouldAutomaticallyCreateKeyPair);
|
expect(options.shouldAutomaticallyCreateKeyPair()).andReturn(shouldAutomaticallyCreateKeyPair);
|
||||||
expect(strategy.credentialsMap.get(new RegionAndName(region, "jclouds#" + group))).andReturn(keyPair);
|
expect(strategy.credentialsMap.get(new RegionAndName(region, "jclouds#" + group))).andReturn(keyPair);
|
||||||
expect(keyPair.getKeyName()).andReturn(systemGeneratedKeyPairName).atLeastOnce();
|
expect(keyPair.getKeyName()).andReturn(systemGeneratedKeyPairName).atLeastOnce();
|
||||||
|
@ -572,6 +648,7 @@ public class CreateKeyPairPlacementAndSecurityGroupsAsNeededAndReturnRunOptionsT
|
||||||
|
|
||||||
// setup expectations
|
// setup expectations
|
||||||
expect(options.getKeyPair()).andReturn(userSuppliedKeyPair);
|
expect(options.getKeyPair()).andReturn(userSuppliedKeyPair);
|
||||||
|
expect(options.getRunScript()).andReturn(null);
|
||||||
expect(options.shouldAutomaticallyCreateKeyPair()).andReturn(shouldAutomaticallyCreateKeyPair);
|
expect(options.shouldAutomaticallyCreateKeyPair()).andReturn(shouldAutomaticallyCreateKeyPair);
|
||||||
|
|
||||||
// replay mocks
|
// replay mocks
|
||||||
|
|
Loading…
Reference in New Issue