public class ElasticInstanceManagerImpl extends Object implements ElasticInstanceManager
BAMBOO_CONTROL_TAG, DEFAULT_INSTANCE_TYPE_32, DEFAULT_INSTANCE_TYPE_64, DEFAULT_INSTANCE_TYPE_ATLASSIAN_AGENTS, DEFAULT_PRODUCT_FOR_LINUX_PLATFORM, DEFAULT_PRODUCT_FOR_WINDOWS_PLATFORM, ELASTIC_BAMBOO_KEY_PAIR, ELASTIC_BAMBOO_KEY_PAIR_FILE, ELASTIC_BAMBOO_SECURITY_GROUP| Constructor and Description |
|---|
ElasticInstanceManagerImpl(AwsAccountBean awsAccountBean,
AdministrationConfigurationAccessor administrationConfigurationAccessor,
int startupTimeoutSeconds,
ScheduledExecutorService executor,
KeyStoreFactory keyStoreFactory,
SSLContextFactory sslContextFactory,
BootstrapManager bootstrapManager,
ErrorHandler errorHandler,
SpotInstanceConfigurationAccessor spotInstanceConfigurationAccessor) |
| Modifier and Type | Method and Description |
|---|---|
void |
addElasticLogEntry(org.apache.log4j.Logger log,
String logEntry) |
boolean |
cancelSpotRequests(com.atlassian.aws.AWSAccount awsAccount)
Cancel spot instance requests.
|
void |
ensureLoginKeyPairExists(com.atlassian.aws.AWSAccount awsAccount,
String keyPair)
Ensures that a key pair, named "elasticbamboo", has been defined in the configured AWS account.
|
int |
getAgentSideHttpPort()
The TCP port upon which the Elastic Agent listens for HTTP traffic intended for the Bamboo Server.
|
int |
getAgentSideJmsPort()
The TCP port upon which the Elastic Agent listens for JMS traffic intended for the Bamboo Server.
|
com.google.common.collect.SetMultimap<ElasticImageConfiguration,RemoteElasticInstance> |
getAllElasticAgentsAsMap()
Returns all elastic instances in a
SetMultimap, keyed by the ElasticImageConfiguration |
List<RemoteElasticInstance> |
getAllElasticRemoteAgents()
Returns all elastic instances.
|
Set<com.atlassian.aws.ec2.EC2InstanceType> |
getAllowedInstanceTypes() |
List<String> |
getElasticAgentLogs()
Retrieve activity logs
|
RemoteElasticInstance |
getElasticRemoteAgentByInstanceId(String instanceId)
Retrieve elastic instance of the given ID.
|
List<RemoteElasticInstance> |
getElasticRemoteAgents()
Retrieve a readonly list of any currently existing EC2 instances
|
List<RemoteElasticInstance> |
getElasticRemoteAgentsByConfiguration(ElasticImageConfiguration elasticImageConfiguration) |
List<RemoteElasticInstance> |
getElasticRemoteAgentsByConfiguration(long id) |
String |
getInstanceLogs(String instanceId)
Fetch console output of a running EC2 instance.
|
List<RemoteElasticInstance> |
getInstancesWithStartingAgents()
Returns those elastic instances that have already started but their agents have not yet connected to the bamboo server.
|
List<RemoteElasticInstance> |
getRequestedElasticRemoteAgents()
Returns the elastic instances which have been requested but not yet identified.
|
List<RemoteElasticInstance> |
getStartingElasticInstances()
Return the elastic instances which have been identified but not started up yet,
i.e.
|
int |
getTotalNumElasticRemoteAgents()
Return how many license spots are currently being occupied by elastic instances
(pending and running)
|
int |
getTunnelPort()
The TCP port upon which Elastic Agents listens for incoming tunnel connections from the Bamboo Server.
|
boolean |
isElasticSupportEnabled() |
boolean |
isInstanceKnown(String instanceId)
Checks if an AWS instance with the given ID exists and is managed by this Bamboo server.
|
RemoteElasticInstance |
newElasticAgent(RemoteElasticInstanceListener listener,
com.atlassian.aws.AWSAccount awsAccount,
AgentManager agentManager,
ElasticImageConfiguration elasticImageConfiguration,
com.atlassian.aws.ec2.InstanceLaunchConfigurationBuilder instanceLaunchConfigurationBuilder) |
void |
onInstanceIdentified(RemoteElasticInstance instance)
Tell the manager that the instance is up and running
|
void |
onInstanceRunning(RemoteElasticInstance instance)
Invoked when the instance enters the 'running' state
|
void |
registerElasticAgentStopped(RemoteElasticInstance instance)
Remove and EC2 instance from the "currently Running map
|
RemoteElasticInstance |
restoreElasticAgent(ElasticAgentDefinition elasticAgentDefinition,
com.amazonaws.services.ec2.model.Instance instance,
RemoteElasticInstanceListener listener,
com.atlassian.aws.AWSAccount awsAccount,
AgentManager agentManager,
com.atlassian.aws.ec2.InstanceLaunchConfigurationBuilder instanceLaunchConfigurationBuilder)
After Bamboo server restart, reconnect to elastic agent.
|
void |
setTunnelTimeoutMinutes(int tunnelTimeoutMinutes) |
boolean |
validateAwsCredentials(com.atlassian.aws.ec2.awssdk.AwsSupportConstants.Region region,
String awsAccessID,
String awsSecretKey,
ErrorCollection errorCollection)
Validate a set of supplied AWS credentials.
|
boolean |
validateAwsCredentials(String awsAccessID,
String awsSecretKey,
ErrorCollection errorCollection) |
public ElasticInstanceManagerImpl(AwsAccountBean awsAccountBean, AdministrationConfigurationAccessor administrationConfigurationAccessor, int startupTimeoutSeconds, ScheduledExecutorService executor, KeyStoreFactory keyStoreFactory, SSLContextFactory sslContextFactory, BootstrapManager bootstrapManager, ErrorHandler errorHandler, SpotInstanceConfigurationAccessor spotInstanceConfigurationAccessor)
public RemoteElasticInstance newElasticAgent(RemoteElasticInstanceListener listener, com.atlassian.aws.AWSAccount awsAccount, @NotNull AgentManager agentManager, @NotNull ElasticImageConfiguration elasticImageConfiguration, @NotNull com.atlassian.aws.ec2.InstanceLaunchConfigurationBuilder instanceLaunchConfigurationBuilder) throws NoSuchAlgorithmException, KeyManagementException, IOException, CertificateException, UnrecoverableKeyException, KeyStoreException
newElasticAgent in interface ElasticInstanceManagerNoSuchAlgorithmExceptionKeyManagementExceptionIOExceptionCertificateExceptionUnrecoverableKeyExceptionKeyStoreExceptionpublic RemoteElasticInstance restoreElasticAgent(@NotNull ElasticAgentDefinition elasticAgentDefinition, @NotNull com.amazonaws.services.ec2.model.Instance instance, @NotNull RemoteElasticInstanceListener listener, @NotNull com.atlassian.aws.AWSAccount awsAccount, @NotNull AgentManager agentManager, @NotNull com.atlassian.aws.ec2.InstanceLaunchConfigurationBuilder instanceLaunchConfigurationBuilder) throws Exception
ElasticInstanceManagerrestoreElasticAgent in interface ElasticInstanceManagerExceptionpublic void ensureLoginKeyPairExists(com.atlassian.aws.AWSAccount awsAccount,
String keyPair)
throws com.atlassian.aws.AWSException
ElasticInstanceManagerEnsures that a key pair, named "elasticbamboo", has been defined in the configured AWS account.
ensureLoginKeyPairExists in interface ElasticInstanceManagerawsAccount - that should contain the key paircom.atlassian.aws.AWSException - if there is a problem communicating with EC2.public boolean validateAwsCredentials(com.atlassian.aws.ec2.awssdk.AwsSupportConstants.Region region,
String awsAccessID,
String awsSecretKey,
ErrorCollection errorCollection)
ElasticInstanceManagerValidate a set of supplied AWS credentials.
validateAwsCredentials in interface ElasticInstanceManagerawsAccessID - The Access ID of the Amazon Web Services AccountawsSecretKey - The Secret Key of the Amazon Web Services AccounterrorCollection - An ErrorCollection to which validation errors should be added, or
null if validation errors are not required.true if the supplied credentials are successfully validated; false otherwise.public boolean validateAwsCredentials(String awsAccessID, String awsSecretKey, ErrorCollection errorCollection)
validateAwsCredentials in interface ElasticInstanceManager@NotNull public List<RemoteElasticInstance> getElasticRemoteAgents()
ElasticInstanceManagergetElasticRemoteAgents in interface ElasticInstanceManagerRemoteElasticInstance@NotNull public List<RemoteElasticInstance> getElasticRemoteAgentsByConfiguration(ElasticImageConfiguration elasticImageConfiguration)
getElasticRemoteAgentsByConfiguration in interface ElasticInstanceManager@NotNull public List<RemoteElasticInstance> getElasticRemoteAgentsByConfiguration(long id)
getElasticRemoteAgentsByConfiguration in interface ElasticInstanceManager@Nullable public RemoteElasticInstance getElasticRemoteAgentByInstanceId(String instanceId)
ElasticInstanceManagergetElasticRemoteAgentByInstanceId in interface ElasticInstanceManagerinstanceId - of the instance@NotNull public List<RemoteElasticInstance> getRequestedElasticRemoteAgents()
ElasticInstanceManagergetRequestedElasticRemoteAgents in interface ElasticInstanceManager@NotNull public List<RemoteElasticInstance> getStartingElasticInstances()
ElasticInstanceManagergetStartingElasticInstances in interface ElasticInstanceManager@NotNull public List<RemoteElasticInstance> getInstancesWithStartingAgents()
ElasticInstanceManagerElasticInstanceManager.getRequestedElasticRemoteAgents())
but the agent on the instance has not yet connected to the bamboo server. Elastic instances in such state are returned by this method
and the list is a subset of the list returned by ElasticInstanceManager.getElasticRemoteAgents().getInstancesWithStartingAgents in interface ElasticInstanceManagerRemoteElasticInstancepublic List<RemoteElasticInstance> getAllElasticRemoteAgents()
ElasticInstanceManagergetAllElasticRemoteAgents in interface ElasticInstanceManagerpublic com.google.common.collect.SetMultimap<ElasticImageConfiguration,RemoteElasticInstance> getAllElasticAgentsAsMap()
ElasticInstanceManagerSetMultimap, keyed by the ElasticImageConfigurationgetAllElasticAgentsAsMap in interface ElasticInstanceManagerpublic int getTotalNumElasticRemoteAgents()
ElasticInstanceManagergetTotalNumElasticRemoteAgents in interface ElasticInstanceManagerpublic void onInstanceIdentified(@NotNull
RemoteElasticInstance instance)
ElasticInstanceManageronInstanceIdentified in interface ElasticInstanceManagerinstance - the instance identifiedpublic void onInstanceRunning(@NotNull
RemoteElasticInstance instance)
ElasticInstanceManageronInstanceRunning in interface ElasticInstanceManagerinstance - the instance that entered running statepublic boolean cancelSpotRequests(@NotNull
com.atlassian.aws.AWSAccount awsAccount)
ElasticInstanceManagercancelSpotRequests in interface ElasticInstanceManagerawsAccount - accountpublic void registerElasticAgentStopped(@NotNull
RemoteElasticInstance instance)
ElasticInstanceManagerregisterElasticAgentStopped in interface ElasticInstanceManagerinstance - - the one to be deleted from the mappublic void addElasticLogEntry(org.apache.log4j.Logger log,
String logEntry)
addElasticLogEntry in interface ElasticInstanceManagerpublic List<String> getElasticAgentLogs()
ElasticInstanceManagergetElasticAgentLogs in interface ElasticInstanceManagerpublic boolean isElasticSupportEnabled()
isElasticSupportEnabled in interface ElasticInstanceManager@NotNull public Set<com.atlassian.aws.ec2.EC2InstanceType> getAllowedInstanceTypes()
getAllowedInstanceTypes in interface ElasticInstanceManagerpublic int getTunnelPort()
ElasticAgentTunnelPortsThe TCP port upon which Elastic Agents listens for incoming tunnel connections from the Bamboo Server.
getTunnelPort in interface ElasticAgentTunnelPortspublic int getAgentSideHttpPort()
ElasticAgentTunnelPortsThe TCP port upon which the Elastic Agent listens for HTTP traffic intended for the Bamboo Server.
getAgentSideHttpPort in interface ElasticAgentTunnelPortspublic int getAgentSideJmsPort()
ElasticAgentTunnelPortsThe TCP port upon which the Elastic Agent listens for JMS traffic intended for the Bamboo Server.
getAgentSideJmsPort in interface ElasticAgentTunnelPortspublic void setTunnelTimeoutMinutes(int tunnelTimeoutMinutes)
@NotNull public String getInstanceLogs(@NotNull String instanceId) throws com.atlassian.aws.AWSException
ElasticInstanceManagergetInstanceLogs in interface ElasticInstanceManagerinstanceId - id of the instancecom.atlassian.aws.AWSException - if an error occurs while fetching the console outputpublic boolean isInstanceKnown(@NotNull
String instanceId)
ElasticInstanceManagerisInstanceKnown in interface ElasticInstanceManagerinstanceId - id of the instanceCopyright © 2016 Atlassian Software Systems Pty Ltd. All rights reserved.