public class EC2Provider extends com.cloudera.director.spi.v1.compute.util.AbstractComputeProvider<EC2Instance,EC2InstanceTemplate>
Modifier and Type | Class and Description |
---|---|
static class |
EC2Provider.EC2ProviderConfigurationPropertyToken
EC2 configuration properties.
|
protected static class |
EC2Provider.SpotAllocationRecord
Holds details about the allocation state of a single virtual instance.
|
protected class |
EC2Provider.SpotGroupAllocator
Holds state and logic for allocating a group of Spot instances.
|
Modifier and Type | Field and Description |
---|---|
protected static List<com.cloudera.director.spi.v1.model.ConfigurationProperty> |
CONFIGURATION_PROPERTIES
The provider configuration properties.
|
static int |
DEFAULT_SPOT_INSTANCE_PRICE_CHANGE_DURATION_MS
The default amount of time to wait, in milliseconds, for a Spot price change when the Spot
bid is known to be below the current Spot price.
|
static int |
DEFAULT_SPOT_INSTANCE_REQUEST_DURATION_MS
The default spot instance request duration, in milliseconds.
|
static String |
ID
The resource provider ID.
|
static com.cloudera.director.spi.v1.provider.ResourceProviderMetadata |
METADATA
The resource provider metadata.
|
Constructor and Description |
---|
EC2Provider(com.cloudera.director.spi.v1.model.Configured configuration,
EphemeralDeviceMappings ephemeralDeviceMappings,
VirtualizationMappings virtualizationMappings,
AWSFilters awsFilters,
com.amazonaws.services.ec2.AmazonEC2Client client,
com.amazonaws.services.identitymanagement.AmazonIdentityManagementClient identityManagementClient,
com.cloudera.director.spi.v1.model.LocalizationContext cloudLocalizationContext)
Construct a new provider instance and validate all configurations.
|
Modifier and Type | Method and Description |
---|---|
void |
allocate(EC2InstanceTemplate template,
Collection<String> virtualInstanceIds,
int minCount) |
void |
allocateOnDemandInstances(EC2InstanceTemplate template,
Collection<String> virtualInstanceIds,
int minCount)
Atomically allocates multiple regular EC2 instances with the specified identifiers based on a
single instance template.
|
void |
allocateSpotInstances(EC2InstanceTemplate template,
Collection<String> virtualInstanceIds,
int minCount)
Atomically allocates multiple EC2 Spot Instances with the specified identifiers based on a
single instance template.
|
protected static com.amazonaws.services.ec2.AmazonEC2Client |
configureClient(com.cloudera.director.spi.v1.model.Configured configuration,
com.cloudera.director.spi.v1.model.exception.PluginExceptionConditionAccumulator accumulator,
com.amazonaws.services.ec2.AmazonEC2Client client,
com.cloudera.director.spi.v1.model.LocalizationContext providerLocalizationContext,
boolean verify)
Configures the specified EC2 client.
|
protected static com.amazonaws.services.identitymanagement.AmazonIdentityManagementClient |
configureIAMClient(com.cloudera.director.spi.v1.model.Configured configuration,
com.cloudera.director.spi.v1.model.exception.PluginExceptionConditionAccumulator accumulator,
com.amazonaws.services.identitymanagement.AmazonIdentityManagementClient identityManagementClient,
com.cloudera.director.spi.v1.model.LocalizationContext providerLocalizationContext,
boolean verify)
Configures the specified IAM client.
|
EC2InstanceTemplate |
createResourceTemplate(String name,
com.cloudera.director.spi.v1.model.Configured configuration,
Map<String,String> tags) |
void |
delete(EC2InstanceTemplate template,
Collection<String> virtualInstanceIds) |
protected com.cloudera.director.spi.v1.model.Configured |
enhanceTemplateConfiguration(String name,
com.cloudera.director.spi.v1.model.Configured configuration,
com.cloudera.director.spi.v1.model.LocalizationContext templateLocalizationContext) |
Collection<EC2Instance> |
find(EC2InstanceTemplate template,
Collection<String> virtualInstanceIds) |
com.amazonaws.services.ec2.AmazonEC2Client |
getClient() |
AWSFilters |
getEC2Filters()
Returns the EC2 filters.
|
EphemeralDeviceMappings |
getEphemeralDeviceMappings()
Returns the ephemeral device mappings.
|
com.amazonaws.services.identitymanagement.AmazonIdentityManagementClient |
getIdentityManagementClient() |
Map<String,com.cloudera.director.spi.v1.model.InstanceState> |
getInstanceState(EC2InstanceTemplate template,
Collection<String> virtualInstanceIds) |
com.cloudera.director.spi.v1.model.ConfigurationValidator |
getResourceTemplateConfigurationValidator() |
com.cloudera.director.spi.v1.model.Resource.Type |
getResourceType() |
VirtualizationMappings |
getVirtualizationMappings()
Returns the virtualization mappings.
|
getLocalizationContext, getProviderMetadata, getResourceTemplateLocalizationContext, validateResourceTemplateConfiguration
getConfiguration, getConfigurationValue, getConfigurationValue
protected static final List<com.cloudera.director.spi.v1.model.ConfigurationProperty> CONFIGURATION_PROPERTIES
public static final String ID
public static final com.cloudera.director.spi.v1.provider.ResourceProviderMetadata METADATA
public static final int DEFAULT_SPOT_INSTANCE_REQUEST_DURATION_MS
public static final int DEFAULT_SPOT_INSTANCE_PRICE_CHANGE_DURATION_MS
public EC2Provider(com.cloudera.director.spi.v1.model.Configured configuration, EphemeralDeviceMappings ephemeralDeviceMappings, VirtualizationMappings virtualizationMappings, AWSFilters awsFilters, com.amazonaws.services.ec2.AmazonEC2Client client, com.amazonaws.services.identitymanagement.AmazonIdentityManagementClient identityManagementClient, com.cloudera.director.spi.v1.model.LocalizationContext cloudLocalizationContext)
configuration
- the configurationephemeralDeviceMappings
- the ephemeral device mappingsvirtualizationMappings
- the virtualization mappingsawsFilters
- the AWS filtersclient
- the EC2 clientidentityManagementClient
- the IAM clientcloudLocalizationContext
- the parent cloud localization contextcom.cloudera.director.spi.v1.model.exception.InvalidCredentialsException
- if the supplied credentials are invalidcom.cloudera.director.spi.v1.model.exception.TransientProviderException
- if a transient exception occurs communicating with the
providercom.cloudera.director.spi.v1.model.exception.UnrecoverableProviderException
- if an unrecoverable exception occurs communicating with
the providerprotected static com.amazonaws.services.ec2.AmazonEC2Client configureClient(com.cloudera.director.spi.v1.model.Configured configuration, com.cloudera.director.spi.v1.model.exception.PluginExceptionConditionAccumulator accumulator, com.amazonaws.services.ec2.AmazonEC2Client client, com.cloudera.director.spi.v1.model.LocalizationContext providerLocalizationContext, boolean verify)
configuration
- the provider configurationaccumulator
- the exception accumulatorclient
- the EC2 clientproviderLocalizationContext
- the resource provider localization contextverify
- whether to verify the configuration by making an API callcom.cloudera.director.spi.v1.model.exception.InvalidCredentialsException
- if the supplied credentials are invalidcom.cloudera.director.spi.v1.model.exception.TransientProviderException
- if a transient exception occurs communicating with the
providercom.cloudera.director.spi.v1.model.exception.UnrecoverableProviderException
- if an unrecoverable exception occurs communicating with
the providerprotected static com.amazonaws.services.identitymanagement.AmazonIdentityManagementClient configureIAMClient(com.cloudera.director.spi.v1.model.Configured configuration, com.cloudera.director.spi.v1.model.exception.PluginExceptionConditionAccumulator accumulator, com.amazonaws.services.identitymanagement.AmazonIdentityManagementClient identityManagementClient, com.cloudera.director.spi.v1.model.LocalizationContext providerLocalizationContext, boolean verify)
configuration
- the provider configurationaccumulator
- the exception accumulatoridentityManagementClient
- the IAM clientproviderLocalizationContext
- the resource provider localization contextverify
- whether to verify the configuration by making an API callcom.cloudera.director.spi.v1.model.exception.InvalidCredentialsException
- if the supplied credentials are invalidcom.cloudera.director.spi.v1.model.exception.TransientProviderException
- if a transient exception occurs communicating with the
providercom.cloudera.director.spi.v1.model.exception.UnrecoverableProviderException
- if an unrecoverable exception occurs communicating with
the providerpublic com.amazonaws.services.ec2.AmazonEC2Client getClient()
public com.amazonaws.services.identitymanagement.AmazonIdentityManagementClient getIdentityManagementClient()
public EphemeralDeviceMappings getEphemeralDeviceMappings()
public VirtualizationMappings getVirtualizationMappings()
public AWSFilters getEC2Filters()
public com.cloudera.director.spi.v1.model.ConfigurationValidator getResourceTemplateConfigurationValidator()
getResourceTemplateConfigurationValidator
in class com.cloudera.director.spi.v1.provider.util.AbstractResourceProvider<EC2Instance,EC2InstanceTemplate>
public com.cloudera.director.spi.v1.model.Resource.Type getResourceType()
public EC2InstanceTemplate createResourceTemplate(String name, com.cloudera.director.spi.v1.model.Configured configuration, Map<String,String> tags)
public void allocate(EC2InstanceTemplate template, Collection<String> virtualInstanceIds, int minCount) throws InterruptedException
InterruptedException
public Collection<EC2Instance> find(EC2InstanceTemplate template, Collection<String> virtualInstanceIds) throws InterruptedException
InterruptedException
public void delete(EC2InstanceTemplate template, Collection<String> virtualInstanceIds) throws InterruptedException
InterruptedException
public Map<String,com.cloudera.director.spi.v1.model.InstanceState> getInstanceState(EC2InstanceTemplate template, Collection<String> virtualInstanceIds)
protected com.cloudera.director.spi.v1.model.Configured enhanceTemplateConfiguration(String name, com.cloudera.director.spi.v1.model.Configured configuration, com.cloudera.director.spi.v1.model.LocalizationContext templateLocalizationContext)
enhanceTemplateConfiguration
in class com.cloudera.director.spi.v1.provider.util.AbstractResourceProvider<EC2Instance,EC2InstanceTemplate>
public void allocateOnDemandInstances(EC2InstanceTemplate template, Collection<String> virtualInstanceIds, int minCount) throws InterruptedException
template
- the instance templatevirtualInstanceIds
- the unique identifiers for the instancesminCount
- the minimum number of instances to allocate if not all resources can
be allocatedInterruptedException
- if the operation is interruptedpublic void allocateSpotInstances(EC2InstanceTemplate template, Collection<String> virtualInstanceIds, int minCount) throws InterruptedException
Atomically allocates multiple EC2 Spot Instances with the specified identifiers based on a single instance template. If not all the instances can be allocated, the number of instances allocated must be at least the specified minimum or the method must fail cleanly with no billing implications.
Note: contrary to the contract of the SPI method, there are some cases where despite failing to satisfy the min count there are billing implications, due to non-atomicity of AWS operations. In particular, if we lose connectivity to AWS for an extended period of time after creating Spot instance requests, we will be unable to cancel the requests, and unable to detect that instances have been provisioned. The resulting requests and/or instances may or may not be tagged appropriately, depending on when connectivity was interrupted.
template
- the instance templatevirtualInstanceIds
- the unique identifiers for the instancesminCount
- the minimum number of instances to allocate if not all resources can
be allocatedInterruptedException
- if the operation is interruptedCopyright © 2016. All rights reserved.