public RunInstancesOptions execute(String region, String group, Template template) { RunInstancesOptions instanceOptions = getOptionsProvider().get().asType(template.getHardware().getId()); String keyPairName = createNewKeyPairUnlessUserSpecifiedOtherwise(region, group, template.getOptions()); addSecurityGroups(region, group, template, instanceOptions); if (template.getOptions() instanceof EC2TemplateOptions) { if (keyPairName != null) instanceOptions.withKeyName(keyPairName); byte[] userData = EC2TemplateOptions.class.cast(template.getOptions()).getUserData(); if (userData != null) instanceOptions.withUserData(userData); Set<BlockDeviceMapping> blockDeviceMappings = EC2TemplateOptions.class.cast(template.getOptions()) .getBlockDeviceMappings(); if (blockDeviceMappings.size() > 0) { checkState("ebs".equals(template.getImage().getUserMetadata().get("rootDeviceType")), "BlockDeviceMapping only available on ebs boot"); instanceOptions.withBlockDeviceMappings(blockDeviceMappings); } } return instanceOptions; }
protected void addSecurityGroups(String region, String group, Template template, RunInstancesOptions instanceOptions) { Set<String> groups = getSecurityGroupsForTagAndOptions(region, group, null, template.getOptions()); instanceOptions.withSecurityGroups(groups); }
@Override protected boolean userSpecifiedTheirOwnGroups(TemplateOptions options) { return (options instanceof AWSEC2TemplateOptions && !AWSEC2TemplateOptions.class.cast(options).getGroupIds().isEmpty()) || super.userSpecifiedTheirOwnGroups(options); }
expect(strategy.getOptionsProvider()).andReturn(OPTIONS_PROVIDER); expect(template.getHardware()).andReturn(size).atLeastOnce(); expect(template.getOptions()).andReturn(options).atLeastOnce(); expect(options.getBlockDeviceMappings()).andReturn(ImmutableSet.<BlockDeviceMapping> of()).atLeastOnce(); expect(strategy.createNewKeyPairUnlessUserSpecifiedOtherwise(region, group, options)).andReturn( systemGeneratedKeyPairName); expect(strategy.getSecurityGroupsForTagAndOptions(region, group, options)).andReturn(generatedGroups); expect(options.getUserData()).andReturn("hello".getBytes()); RunInstancesOptions customize = strategy.execute(region, group, template); assertEquals(customize.buildQueryParameters(), ImmutableMultimap.<String, String> of()); assertEquals(
@Override public String createNewKeyPairUnlessUserSpecifiedOtherwise(String region, String group, TemplateOptions options) { RegionAndName key = new RegionAndName(region, group); KeyPair pair; if (and(hasPublicKeyMaterial, or(doesntNeedSshAfterImportingPublicKey, hasLoginCredential)).apply(options)) { pair = importExistingKeyPair.apply(new RegionNameAndPublicKeyMaterial(region, group, options.getPublicKey())); options.dontAuthorizePublicKey(); if (hasLoginCredential.apply(options)) pair = pair.toBuilder().keyMaterial(options.getLoginPrivateKey()).build(); credentialsMap.put(key, pair); } else { if (hasPublicKeyMaterial.apply(options)) { logger.warn("to avoid creating temporary keys in aws-ec2, use templateOption overrideLoginCredentialWith(id_rsa)"); } return super.createNewKeyPairUnlessUserSpecifiedOtherwise(region, group, options); } return pair.getKeyName(); }
private Set<RunningInstance> createKeyPairAndSecurityGroupsAsNeededThenRunInstances(String group, int count, Template template) { String region = AWSUtils.getRegionFromLocationOrNull(template.getLocation()); String zone = getZoneFromLocationOrNull(template.getLocation()); RunInstancesOptions instanceOptions = createKeyPairAndSecurityGroupsAsNeededAndReturncustomize.execute(region, group, template); return createNodesInRegionAndZone(region, zone, group, count, template, instanceOptions); }
@VisibleForTesting public String createNewKeyPairUnlessUserSpecifiedOtherwise(String region, String group, TemplateOptions options) { String keyPairName = null; 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) { keyPairName = createOrImportKeyPair(region, group, options); } else if (keyPairName != null) { if (options.getLoginPrivateKey() != null) { String pem = options.getLoginPrivateKey(); KeyPair keyPair = KeyPair.builder().region(region).keyName(keyPairName).fingerprint( fingerprintPrivateKey(pem)).sha1OfPrivateKey(sha1PrivateKey(pem)).keyMaterial(pem).build(); RegionAndName key = new RegionAndName(region, keyPairName); credentialsMap.put(key, keyPair); } } if (options.getRunScript() != null) { RegionAndName regionAndName = new RegionAndName(region, keyPairName); checkArgument( credentialsMap.containsKey(regionAndName), "no private key configured for: %s; please use options.overrideLoginCredentialWith(rsa_private_text)", regionAndName); } return keyPairName; }
@Override protected void addSecurityGroups(String region, String group, Template template, RunInstancesOptions instanceOptions) { AWSEC2TemplateOptions awsTemplateOptions = AWSEC2TemplateOptions.class.cast(template.getOptions()); AWSRunInstancesOptions awsInstanceOptions = AWSRunInstancesOptions.class.cast(instanceOptions); if (awsTemplateOptions.getGroupIds().size() > 0) awsInstanceOptions.withSecurityGroupIds(awsTemplateOptions.getGroupIds()); String subnetId = awsTemplateOptions.getSubnetId(); if (subnetId != null) { AWSRunInstancesOptions.class.cast(instanceOptions).withSubnetId(subnetId); } else { super.addSecurityGroups(region, group, template, instanceOptions); } } }
@SuppressWarnings("unchecked") private CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions setupStrategy() { Function<RegionAndName, KeyPair> makeKeyPair = createMock(Function.class); ConcurrentMap<RegionAndName, KeyPair> credentialsMap = createMock(ConcurrentMap.class); LoadingCache<RegionAndName, String> securityGroupMap = createMock(LoadingCache.class); GroupNamingConvention.Factory namingConventionFactory = createMock(GroupNamingConvention.Factory.class); GroupNamingConvention namingConvention = createMock(GroupNamingConvention.class); expect(namingConventionFactory.create()).andReturn(namingConvention).anyTimes(); expect(namingConvention.sharedNameForGroup("group")).andReturn("jclouds#group").anyTimes(); replay(namingConventionFactory); replay(namingConvention); return new CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions(makeKeyPair, credentialsMap, securityGroupMap, OPTIONS_PROVIDER, namingConventionFactory); }
expect(strategy.getOptionsProvider()).andReturn(OPTIONS_PROVIDER); expect(template.getHardware()).andReturn(size).atLeastOnce(); expect(template.getOptions()).andReturn(options).atLeastOnce(); expect(options.getBlockDeviceMappings()).andReturn(ImmutableSet.<BlockDeviceMapping> of()).atLeastOnce(); expect(strategy.createNewKeyPairUnlessUserSpecifiedOtherwise(region, group, options)).andReturn( systemGeneratedKeyPairName); expect(strategy.getSecurityGroupsForTagAndOptions(region, group, options)).andReturn(generatedGroups); expect(options.getUserData()).andReturn(null); RunInstancesOptions customize = strategy.execute(region, group, template); assertEquals(customize.buildQueryParameters(), ImmutableMultimap.<String, String> of()); assertEquals(
@Override public String createNewKeyPairUnlessUserSpecifiedOtherwise(String region, String group, TemplateOptions options) { RegionAndName key = new RegionAndName(region, group); KeyPair pair; if (and(hasPublicKeyMaterial, or(doesntNeedSshAfterImportingPublicKey, hasLoginCredential)).apply(options)) { pair = importExistingKeyPair.apply(new RegionNameAndPublicKeyMaterial(region, group, options.getPublicKey())); options.dontAuthorizePublicKey(); if (hasLoginCredential.apply(options)) pair = pair.toBuilder().keyMaterial(options.getLoginPrivateKey()).build(); credentialsMap.put(key, pair); } else { if (hasPublicKeyMaterial.apply(options)) { logger.warn("to avoid creating temporary keys in aws-ec2, use templateOption overrideLoginCredentialWith(id_rsa)"); } return super.createNewKeyPairUnlessUserSpecifiedOtherwise(region, group, options); } return pair.getKeyName(); }
private Set<RunningInstance> createKeyPairAndSecurityGroupsAsNeededThenRunInstances(String group, int count, Template template) { String region = AWSUtils.getRegionFromLocationOrNull(template.getLocation()); String zone = getZoneFromLocationOrNull(template.getLocation()); RunInstancesOptions instanceOptions = createKeyPairAndSecurityGroupsAsNeededAndReturncustomize.execute(region, group, template); return createNodesInRegionAndZone(region, zone, group, count, template, instanceOptions); }
@VisibleForTesting public String createNewKeyPairUnlessUserSpecifiedOtherwise(String region, String group, TemplateOptions options) { String keyPairName = null; 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) { keyPairName = createOrImportKeyPair(region, group, options); } else if (keyPairName != null) { if (options.getLoginPrivateKey() != null) { String pem = options.getLoginPrivateKey(); KeyPair keyPair = KeyPair.builder().region(region).keyName(keyPairName).fingerprint( fingerprintPrivateKey(pem)).sha1OfPrivateKey(sha1PrivateKey(pem)).keyMaterial(pem).build(); RegionAndName key = new RegionAndName(region, keyPairName); credentialsMap.put(key, keyPair); } } if (options.getRunScript() != null) { RegionAndName regionAndName = new RegionAndName(region, keyPairName); checkArgument( credentialsMap.containsKey(regionAndName), "no private key configured for: %s; please use options.overrideLoginCredentialWith(rsa_private_text)", regionAndName); } return keyPairName; }
@SuppressWarnings("unchecked") private CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions setupStrategy() { Function<RegionAndName, KeyPair> makeKeyPair = createMock(Function.class); ConcurrentMap<RegionAndName, KeyPair> credentialsMap = createMock(ConcurrentMap.class); LoadingCache<RegionAndName, String> securityGroupMap = createMock(LoadingCache.class); GroupNamingConvention.Factory namingConventionFactory = createMock(GroupNamingConvention.Factory.class); GroupNamingConvention namingConvention = createMock(GroupNamingConvention.class); expect(makeKeyPair.apply(anyObject(RegionAndName.class))).andReturn(null).anyTimes(); expect(namingConventionFactory.create()).andReturn(namingConvention).anyTimes(); expect(namingConvention.sharedNameForGroup("group")).andReturn("jclouds#group").anyTimes(); replay(namingConventionFactory); replay(namingConvention); return new CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptions(makeKeyPair, credentialsMap, securityGroupMap, OPTIONS_PROVIDER, namingConventionFactory); }
expect(strategy.getOptionsProvider()).andReturn(OPTIONS_PROVIDER); expect(template.getHardware()).andReturn(size).atLeastOnce(); expect(template.getOptions()).andReturn(options).atLeastOnce(); expect(options.getBlockDeviceMappings()).andReturn(ImmutableSet.<BlockDeviceMapping> of()).atLeastOnce(); expect(options.getClientToken()).andReturn("some-token"); expect(strategy.createNewKeyPairUnlessUserSpecifiedOtherwise(region, group, options)).andReturn( systemGeneratedKeyPairName); expect(strategy.getSecurityGroupsForTagAndOptions(region, group, null, options)).andReturn(generatedGroups); expect(options.getUserData()).andReturn("hello".getBytes()); RunInstancesOptions customize = strategy.execute(region, group, template); assertEquals(customize.buildQueryParameters(), ImmutableMultimap.<String, String> of()); assertEquals(
public RunInstancesOptions execute(String region, String group, Template template) { RunInstancesOptions instanceOptions = getOptionsProvider().get().asType(template.getHardware().getId()); String keyPairName = createNewKeyPairUnlessUserSpecifiedOtherwise(region, group, template.getOptions()); addSecurityGroups(region, group, template, instanceOptions); if (template.getOptions() instanceof EC2TemplateOptions) { if (keyPairName != null) instanceOptions.withKeyName(keyPairName); byte[] userData = EC2TemplateOptions.class.cast(template.getOptions()).getUserData(); if (userData != null) instanceOptions.withUserData(userData); Set<BlockDeviceMapping> blockDeviceMappings = EC2TemplateOptions.class.cast(template.getOptions()) .getBlockDeviceMappings(); if (blockDeviceMappings.size() > 0) { checkState("ebs".equals(template.getImage().getUserMetadata().get("rootDeviceType")), "BlockDeviceMapping only available on ebs boot"); instanceOptions.withBlockDeviceMappings(blockDeviceMappings); } } return instanceOptions; }
@Override public String createNewKeyPairUnlessUserSpecifiedOtherwise(String region, String group, TemplateOptions options) { RegionAndName key = new RegionAndName(region, group); KeyPair pair; if (and(hasPublicKeyMaterial, or(doesntNeedSshAfterImportingPublicKey, hasLoginCredential)).apply(options)) { pair = importExistingKeyPair.apply(new RegionNameAndPublicKeyMaterial(region, group, options.getPublicKey())); options.dontAuthorizePublicKey(); if (hasLoginCredential.apply(options)) pair = pair.toBuilder().keyMaterial(options.getLoginPrivateKey()).build(); credentialsMap.put(key, pair); } else { if (hasPublicKeyMaterial.apply(options)) { logger.warn("to avoid creating temporary keys in aws-ec2, use templateOption overrideLoginCredentialWith(id_rsa)"); } return super.createNewKeyPairUnlessUserSpecifiedOtherwise(region, group, options); } return pair.getKeyName(); }
private Set<RunningInstance> createKeyPairAndSecurityGroupsAsNeededThenRunInstances(String group, int count, Template template) { String region = AWSUtils.getRegionFromLocationOrNull(template.getLocation()); String zone = getZoneFromLocationOrNull(template.getLocation()); RunInstancesOptions instanceOptions = createKeyPairAndSecurityGroupsAsNeededAndReturncustomize.execute(region, group, template); return createNodesInRegionAndZone(region, zone, group, count, template, instanceOptions); }
protected void addSecurityGroups(String region, String group, Template template, RunInstancesOptions instanceOptions) { Set<String> groups = getSecurityGroupsForTagAndOptions(region, group, template.getOptions()); instanceOptions.withSecurityGroups(groups); }
@Override protected boolean userSpecifiedTheirOwnGroups(TemplateOptions options) { return options instanceof AWSEC2TemplateOptions && AWSEC2TemplateOptions.class.cast(options).getGroupIds().size() > 0 || super.userSpecifiedTheirOwnGroups(options); }