Search in sources :

Example 26 with AwsCredentialView

use of com.sequenceiq.cloudbreak.cloud.aws.view.AwsCredentialView in project cloudbreak by hortonworks.

the class AwsMetadataCollector method collect.

@Override
public List<CloudVmMetaDataStatus> collect(AuthenticatedContext ac, List<CloudResource> resources, List<CloudInstance> vms) {
    List<CloudVmMetaDataStatus> cloudVmMetaDataStatuses = new ArrayList<>();
    try {
        String region = ac.getCloudContext().getLocation().getRegion().value();
        AmazonCloudFormationClient amazonCFClient = awsClient.createCloudFormationClient(new AwsCredentialView(ac.getCloudCredential()), region);
        AmazonAutoScalingClient amazonASClient = awsClient.createAutoScalingClient(new AwsCredentialView(ac.getCloudCredential()), region);
        AmazonEC2Client amazonEC2Client = awsClient.createAccess(new AwsCredentialView(ac.getCloudCredential()), region);
        // contains all instances
        ListMultimap<String, CloudInstance> groupByInstanceGroup = groupByInstanceGroup(vms);
        for (String key : groupByInstanceGroup.keySet()) {
            List<CloudInstance> cloudInstances = groupByInstanceGroup.get(key);
            cloudVmMetaDataStatuses.addAll(collectGroupMetaData(ac, amazonASClient, amazonEC2Client, amazonCFClient, key, cloudInstances));
        }
        return cloudVmMetaDataStatuses;
    } catch (RuntimeException e) {
        throw new CloudConnectorException(e.getMessage(), e);
    }
}
Also used : AmazonEC2Client(com.amazonaws.services.ec2.AmazonEC2Client) CloudConnectorException(com.sequenceiq.cloudbreak.cloud.exception.CloudConnectorException) ArrayList(java.util.ArrayList) CloudInstance(com.sequenceiq.cloudbreak.cloud.model.CloudInstance) AwsCredentialView(com.sequenceiq.cloudbreak.cloud.aws.view.AwsCredentialView) AmazonAutoScalingClient(com.amazonaws.services.autoscaling.AmazonAutoScalingClient) CloudVmMetaDataStatus(com.sequenceiq.cloudbreak.cloud.model.CloudVmMetaDataStatus) AmazonCloudFormationClient(com.amazonaws.services.cloudformation.AmazonCloudFormationClient)

Example 27 with AwsCredentialView

use of com.sequenceiq.cloudbreak.cloud.aws.view.AwsCredentialView in project cloudbreak by hortonworks.

the class EncryptedSnapshotPreparator method createSnapshotIfNeeded.

public Optional<String> createSnapshotIfNeeded(AuthenticatedContext ac, Group group) {
    InstanceTemplate instanceTemplate = group.getReferenceInstanceConfiguration().getTemplate();
    String regionName = ac.getCloudContext().getLocation().getRegion().value();
    AwsInstanceView awsInstanceView = new AwsInstanceView(instanceTemplate);
    AwsCredentialView awsCredentialView = new AwsCredentialView(ac.getCloudCredential());
    AmazonEC2Client client = awsClient.createAccess(awsCredentialView, regionName);
    Optional<String> snapshotId = checkThatSnapshotIsAvailable(awsInstanceView, client);
    return snapshotId.isPresent() ? snapshotId : prepareSnapshotForEncryptionBecauseThatDoesNotExist(ac, awsInstanceView, client);
}
Also used : AwsCredentialView(com.sequenceiq.cloudbreak.cloud.aws.view.AwsCredentialView) AmazonEC2Client(com.amazonaws.services.ec2.AmazonEC2Client) AwsInstanceView(com.sequenceiq.cloudbreak.cloud.aws.view.AwsInstanceView) InstanceTemplate(com.sequenceiq.cloudbreak.cloud.model.InstanceTemplate)

Example 28 with AwsCredentialView

use of com.sequenceiq.cloudbreak.cloud.aws.view.AwsCredentialView in project cloudbreak by hortonworks.

the class ASGroupStatusCheckerTask method doCall.

@Override
protected Boolean doCall() {
    LOGGER.info("Checking status of Auto Scaling group '{}'", autoScalingGroupName);
    AmazonEC2Client amazonEC2Client = awsClient.createAccess(new AwsCredentialView(getAuthenticatedContext().getCloudCredential()), getAuthenticatedContext().getCloudContext().getLocation().getRegion().value());
    List<String> instanceIds = cloudFormationStackUtil.getInstanceIds(autoScalingClient, autoScalingGroupName);
    if (instanceIds.size() < requiredInstances) {
        LOGGER.debug("Instances in AS group: {}, needed: {}", instanceIds.size(), requiredInstances);
        List<Activity> activities = getAutoScalingActivities();
        if (latestActivity.isPresent()) {
            checkForSpotRequest(latestActivity.get(), amazonEC2Client);
            activities = activities.stream().filter(activity -> activity.getStartTime().after(latestActivity.get().getStartTime())).collect(Collectors.toList());
        }
        updateLatestActivity(activities);
        checkFailedActivities(activities);
        return false;
    }
    Collection<DescribeInstanceStatusResult> describeInstanceStatusResultList = new ArrayList<>();
    List<List<String>> partitionedInstanceIdsList = Lists.partition(instanceIds, MAX_INSTANCE_ID_SIZE);
    for (List<String> partitionedInstanceIds : partitionedInstanceIdsList) {
        DescribeInstanceStatusRequest describeInstanceStatusRequest = new DescribeInstanceStatusRequest().withInstanceIds(partitionedInstanceIds);
        DescribeInstanceStatusResult describeResult = amazonEC2Client.describeInstanceStatus(describeInstanceStatusRequest);
        describeInstanceStatusResultList.add(describeResult);
    }
    List<InstanceStatus> instanceStatusList = describeInstanceStatusResultList.stream().flatMap(describeInstanceStatusResult -> describeInstanceStatusResult.getInstanceStatuses().stream()).collect(Collectors.toList());
    if (instanceStatusList.size() < requiredInstances) {
        LOGGER.debug("Instances up: {}, needed: {}", instanceStatusList.size(), requiredInstances);
        return false;
    }
    for (InstanceStatus status : instanceStatusList) {
        if (INSTANCE_RUNNING != status.getInstanceState().getCode()) {
            LOGGER.debug("Instances are up but not all of them are in running state.");
            return false;
        }
    }
    return true;
}
Also used : AmazonEC2Client(com.amazonaws.services.ec2.AmazonEC2Client) Activity(com.amazonaws.services.autoscaling.model.Activity) LoggerFactory(org.slf4j.LoggerFactory) Scope(org.springframework.context.annotation.Scope) ArrayList(java.util.ArrayList) CloudConnectorException(com.sequenceiq.cloudbreak.cloud.exception.CloudConnectorException) Matcher(java.util.regex.Matcher) Lists(com.google.common.collect.Lists) InstanceStatus(com.amazonaws.services.ec2.model.InstanceStatus) AuthenticatedContext(com.sequenceiq.cloudbreak.cloud.context.AuthenticatedContext) DescribeInstanceStatusRequest(com.amazonaws.services.ec2.model.DescribeInstanceStatusRequest) AmazonEC2(com.amazonaws.services.ec2.AmazonEC2) DescribeScalingActivitiesRequest(com.amazonaws.services.autoscaling.model.DescribeScalingActivitiesRequest) AmazonEC2Client(com.amazonaws.services.ec2.AmazonEC2Client) PollBooleanStateTask(com.sequenceiq.cloudbreak.cloud.task.PollBooleanStateTask) Logger(org.slf4j.Logger) Collection(java.util.Collection) DescribeInstanceStatusResult(com.amazonaws.services.ec2.model.DescribeInstanceStatusResult) CloudFormationStackUtil(com.sequenceiq.cloudbreak.cloud.aws.CloudFormationStackUtil) AmazonAutoScalingClient(com.amazonaws.services.autoscaling.AmazonAutoScalingClient) Collectors(java.util.stream.Collectors) DescribeSpotInstanceRequestsResult(com.amazonaws.services.ec2.model.DescribeSpotInstanceRequestsResult) List(java.util.List) Component(org.springframework.stereotype.Component) Optional(java.util.Optional) SpotInstanceRequest(com.amazonaws.services.ec2.model.SpotInstanceRequest) AwsClient(com.sequenceiq.cloudbreak.cloud.aws.AwsClient) Pattern(java.util.regex.Pattern) DescribeSpotInstanceRequestsRequest(com.amazonaws.services.ec2.model.DescribeSpotInstanceRequestsRequest) AwsCredentialView(com.sequenceiq.cloudbreak.cloud.aws.view.AwsCredentialView) DescribeInstanceStatusRequest(com.amazonaws.services.ec2.model.DescribeInstanceStatusRequest) ArrayList(java.util.ArrayList) Activity(com.amazonaws.services.autoscaling.model.Activity) AwsCredentialView(com.sequenceiq.cloudbreak.cloud.aws.view.AwsCredentialView) DescribeInstanceStatusResult(com.amazonaws.services.ec2.model.DescribeInstanceStatusResult) InstanceStatus(com.amazonaws.services.ec2.model.InstanceStatus) ArrayList(java.util.ArrayList) List(java.util.List)

Aggregations

AwsCredentialView (com.sequenceiq.cloudbreak.cloud.aws.view.AwsCredentialView)28 AmazonEC2Client (com.amazonaws.services.ec2.AmazonEC2Client)20 CloudConnectorException (com.sequenceiq.cloudbreak.cloud.exception.CloudConnectorException)12 AmazonServiceException (com.amazonaws.AmazonServiceException)10 AmazonAutoScalingClient (com.amazonaws.services.autoscaling.AmazonAutoScalingClient)8 ArrayList (java.util.ArrayList)8 AmazonCloudFormationClient (com.amazonaws.services.cloudformation.AmazonCloudFormationClient)6 CloudInstance (com.sequenceiq.cloudbreak.cloud.model.CloudInstance)6 AutoScalingGroup (com.amazonaws.services.autoscaling.model.AutoScalingGroup)5 AwsNetworkView (com.sequenceiq.cloudbreak.cloud.aws.view.AwsNetworkView)5 Group (com.sequenceiq.cloudbreak.cloud.model.Group)5 IOException (java.io.IOException)5 HashMap (java.util.HashMap)5 DescribeStacksRequest (com.amazonaws.services.cloudformation.model.DescribeStacksRequest)4 Subnet (com.amazonaws.services.ec2.model.Subnet)4 ActionWentFailException (com.sequenceiq.cloudbreak.service.Retry.ActionWentFailException)4 AmazonClientException (com.amazonaws.AmazonClientException)3 ResumeProcessesRequest (com.amazonaws.services.autoscaling.model.ResumeProcessesRequest)3 AmazonEC2Exception (com.amazonaws.services.ec2.model.AmazonEC2Exception)3 DescribeSubnetsRequest (com.amazonaws.services.ec2.model.DescribeSubnetsRequest)3