com.atlassian.bamboo.agent.elastic.server
Interface ElasticInstanceManager

All Superinterfaces:
ElasticAgentTunnelPorts
All Known Implementing Classes:
ElasticInstanceManagerImpl

public interface ElasticInstanceManager
extends ElasticAgentTunnelPorts


Field Summary
static String BAMBOO_CONTROL_TAG
           
static com.atlassian.aws.ec2.EC2InstanceType DEFAULT_INSTANCE_TYPE_32
           
static com.atlassian.aws.ec2.EC2InstanceType DEFAULT_INSTANCE_TYPE_64
           
static String DEFAULT_PRODUCT_FOR_LINUX_PLATFORM
           
static String DEFAULT_PRODUCT_FOR_WINDOWS_PLATFORM
           
static String ELASTIC_BAMBOO_KEY_PAIR
           
static String ELASTIC_BAMBOO_KEY_PAIR_FILE
           
static String ELASTIC_BAMBOO_SECURITY_GROUP
           
 
Method Summary
 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.
 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)
 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 remoteElasticInstance)
          Tell the manager that the instance is up and running
 void onInstanceRunning(RemoteElasticInstance remoteElasticInstance)
          Invoked when the instance enters the 'running' state
 void registerElasticAgentStopped(RemoteElasticInstance instance)
          Remove and EC2 instance from the "currently Running map
 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)
          Deprecated. since 5.4 use validateAwsCredentials(com.atlassian.aws.ec2.awssdk.AwsSupportConstants.Region, String, String, com.atlassian.bamboo.utils.error.ErrorCollection) instead
 
Methods inherited from interface com.atlassian.bamboo.agent.elastic.tunnel.ElasticAgentTunnelPorts
getAgentSideHttpPort, getAgentSideJmsPort, getTunnelPort
 

Field Detail

DEFAULT_INSTANCE_TYPE_32

static final com.atlassian.aws.ec2.EC2InstanceType DEFAULT_INSTANCE_TYPE_32

DEFAULT_INSTANCE_TYPE_64

static final com.atlassian.aws.ec2.EC2InstanceType DEFAULT_INSTANCE_TYPE_64

DEFAULT_PRODUCT_FOR_LINUX_PLATFORM

static final String DEFAULT_PRODUCT_FOR_LINUX_PLATFORM
See Also:
Constant Field Values

DEFAULT_PRODUCT_FOR_WINDOWS_PLATFORM

static final String DEFAULT_PRODUCT_FOR_WINDOWS_PLATFORM
See Also:
Constant Field Values

BAMBOO_CONTROL_TAG

static final String BAMBOO_CONTROL_TAG
See Also:
Constant Field Values

ELASTIC_BAMBOO_SECURITY_GROUP

static final String ELASTIC_BAMBOO_SECURITY_GROUP
See Also:
Constant Field Values

ELASTIC_BAMBOO_KEY_PAIR

static final String ELASTIC_BAMBOO_KEY_PAIR
See Also:
Constant Field Values

ELASTIC_BAMBOO_KEY_PAIR_FILE

static final String ELASTIC_BAMBOO_KEY_PAIR_FILE
See Also:
Constant Field Values
Method Detail

newElasticAgent

RemoteElasticInstance newElasticAgent(RemoteElasticInstanceListener listener,
                                      com.atlassian.aws.AWSAccount awsAccount,
                                      AgentManager agentManager,
                                      ElasticImageConfiguration elasticImageConfiguration,
                                      com.atlassian.aws.ec2.InstanceLaunchConfigurationBuilder instanceLaunchConfigurationBuilder)
                                      throws NoSuchAlgorithmException,
                                             KeyManagementException,
                                             IOException,
                                             CertificateException,
                                             UnrecoverableKeyException,
                                             KeyStoreException
Throws:
NoSuchAlgorithmException
KeyManagementException
IOException
CertificateException
UnrecoverableKeyException
KeyStoreException

ensureLoginKeyPairExists

void ensureLoginKeyPairExists(com.atlassian.aws.AWSAccount awsAccount,
                              String keyPair)
                              throws com.atlassian.aws.AWSException

Ensures that a key pair, named "elasticbamboo", has been defined in the configured AWS account.

Parameters:
awsAccount - that should contain the key pair
keyPair -
Throws:
com.atlassian.aws.AWSException - if there is a problem communicating with EC2.

validateAwsCredentials

boolean validateAwsCredentials(com.atlassian.aws.ec2.awssdk.AwsSupportConstants.Region region,
                               String awsAccessID,
                               String awsSecretKey,
                               ErrorCollection errorCollection)

Validate a set of supplied AWS credentials.

Parameters:
awsAccessID - The Access ID of the Amazon Web Services Account
awsSecretKey - The Secret Key of the Amazon Web Services Account
errorCollection - An ErrorCollection to which validation errors should be added, or null if validation errors are not required.
Returns:
true if the supplied credentials are successfully validated; false otherwise.

validateAwsCredentials

@Deprecated
boolean validateAwsCredentials(String awsAccessID,
                                          String awsSecretKey,
                                          ErrorCollection errorCollection)
Deprecated. since 5.4 use validateAwsCredentials(com.atlassian.aws.ec2.awssdk.AwsSupportConstants.Region, String, String, com.atlassian.bamboo.utils.error.ErrorCollection) instead


getElasticRemoteAgents

@NotNull
List<RemoteElasticInstance> getElasticRemoteAgents()
Retrieve a readonly list of any currently existing EC2 instances

Returns:
List of RemoteElasticInstance

getRequestedElasticRemoteAgents

@NotNull
List<RemoteElasticInstance> getRequestedElasticRemoteAgents()
Returns the elastic instances which have been requested but not yet identified.

Returns:
List of elastic instances which have been requested but not yet started up yet..

getStartingElasticInstances

@NotNull
List<RemoteElasticInstance> getStartingElasticInstances()
Return the elastic instances which have been identified but not started up yet, i.e. those instances that are IDENTIFIED pending to move to RUNNING state. The list does not include those instances that have been requested but not yet identified.

Returns:
List of elastic instances which have been requested and identified but not yet started up yet..

getAllElasticRemoteAgents

List<RemoteElasticInstance> getAllElasticRemoteAgents()
Returns all elastic instances. It includes requested agents as well as active agents

Returns:

getInstancesWithStartingAgents

@NotNull
List<RemoteElasticInstance> getInstancesWithStartingAgents()
Returns those elastic instances that have already started but their agents have not yet connected to the bamboo server. Once the elastic instance is started it launches a bamboo agents that connects to the bamboo server. There is a period of time when the instance has already started (and therefore it is not returned by 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 getElasticRemoteAgents().

Returns:
List of RemoteElasticInstance

getAllElasticAgentsAsMap

com.google.common.collect.SetMultimap<ElasticImageConfiguration,RemoteElasticInstance> getAllElasticAgentsAsMap()
Returns all elastic instances in a SetMultimap, keyed by the ElasticImageConfiguration

Returns:

getTotalNumElasticRemoteAgents

int getTotalNumElasticRemoteAgents()
Return how many license spots are currently being occupied by elastic instances (pending and running)

Returns:
Number of license slots currently occupied by elastic instances (pending and running).

getElasticRemoteAgentByInstanceId

@Nullable
RemoteElasticInstance getElasticRemoteAgentByInstanceId(String instanceId)
Retrieve elastic instance of the given ID.

Parameters:
instanceId - of the instance
Returns:
the elastic remote agent specific to the provided instance id

registerElasticAgentStopped

void registerElasticAgentStopped(@NotNull
                                 RemoteElasticInstance instance)
Remove and EC2 instance from the "currently Running map

Parameters:
instance - - the one to be deleted from the map

onInstanceIdentified

void onInstanceIdentified(@NotNull
                          RemoteElasticInstance remoteElasticInstance)
Tell the manager that the instance is up and running

Parameters:
remoteElasticInstance - the instance identified

onInstanceRunning

void onInstanceRunning(@NotNull
                       RemoteElasticInstance remoteElasticInstance)
Invoked when the instance enters the 'running' state

Parameters:
remoteElasticInstance - the instance that entered running state

addElasticLogEntry

void addElasticLogEntry(org.apache.log4j.Logger log,
                        String logEntry)

getElasticAgentLogs

List<String> getElasticAgentLogs()
Retrieve activity logs

Returns:
a copy of the current elastic agent logs

isElasticSupportEnabled

boolean isElasticSupportEnabled()
Returns:
true, if elastic support is turned on

getAllowedInstanceTypes

@NotNull
Set<com.atlassian.aws.ec2.EC2InstanceType> getAllowedInstanceTypes()
Returns:
Set of allowed instance types.

getElasticRemoteAgentsByConfiguration

@NotNull
List<RemoteElasticInstance> getElasticRemoteAgentsByConfiguration(ElasticImageConfiguration elasticImageConfiguration)

getElasticRemoteAgentsByConfiguration

@NotNull
List<RemoteElasticInstance> getElasticRemoteAgentsByConfiguration(long id)

cancelSpotRequests

boolean cancelSpotRequests(com.atlassian.aws.AWSAccount awsAccount)
Cancel spot instance requests.

Parameters:
awsAccount - account
Returns:
true if at least one request was found and cancelled

getInstanceLogs

@NotNull
String getInstanceLogs(@NotNull
                               String instanceId)
                       throws com.atlassian.aws.AWSException
Fetch console output of a running EC2 instance.

Parameters:
instanceId - id of the instance
Returns:
Logs from the instance, empty string if no logs were available.
Throws:
com.atlassian.aws.AWSException - if an error occurs while fetching the console output

isInstanceKnown

boolean isInstanceKnown(@NotNull
                        String instanceId)
Checks if an AWS instance with the given ID exists and is managed by this Bamboo server.

Parameters:
instanceId - id of the instance
Returns:
true, if the instance exists and is managed by this Bamboo server


Copyright © 2015 Atlassian Software Systems Pty Ltd. All rights reserved.