Package com.sequenceiq.cloudbreak.service.stack.connector.aws

Source Code of com.sequenceiq.cloudbreak.service.stack.connector.aws.ASGroupStatusCheckerTask

package com.sequenceiq.cloudbreak.service.stack.connector.aws;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.amazonaws.services.ec2.AmazonEC2Client;
import com.amazonaws.services.ec2.model.DescribeInstanceStatusRequest;
import com.amazonaws.services.ec2.model.DescribeInstanceStatusResult;
import com.amazonaws.services.ec2.model.InstanceStatus;
import com.sequenceiq.cloudbreak.logger.MDCBuilder;
import com.sequenceiq.cloudbreak.service.StatusCheckerTask;
import com.sequenceiq.cloudbreak.service.stack.AddInstancesFailedException;

@Component
public class ASGroupStatusCheckerTask implements StatusCheckerTask<AutoScalingGroupReady> {

    private static final Logger LOGGER = LoggerFactory.getLogger(ASGroupStatusCheckerTask.class);

    private static final int INSTANCE_RUNNING = 16;

    @Autowired
    private CloudFormationStackUtil cfStackUtil;

    @Override
    public boolean checkStatus(AutoScalingGroupReady asGroupReady) {
        MDCBuilder.buildMdcContext(asGroupReady.getStack());
        LOGGER.info("Checking status of autoscaling group '{}'", asGroupReady.getAutoScalingGroupName());
        AmazonEC2Client amazonEC2Client = asGroupReady.getAmazonEC2Client();
        List<String> instanceIds = cfStackUtil.getInstanceIds(asGroupReady.getAutoScalingGroupName(), asGroupReady.getAmazonASClient());
        if (instanceIds.size() < asGroupReady.getRequiredInstances()) {
            return false;
        }
        DescribeInstanceStatusResult describeResult = amazonEC2Client.describeInstanceStatus(new DescribeInstanceStatusRequest().withInstanceIds(instanceIds));
        if (describeResult.getInstanceStatuses().size() < asGroupReady.getRequiredInstances()) {
            return false;
        }
        for (InstanceStatus status : describeResult.getInstanceStatuses()) {
            if (INSTANCE_RUNNING != status.getInstanceState().getCode()) {
                return false;
            }
        }
        return true;
    }

    @Override
    public void handleTimeout(AutoScalingGroupReady t) {
        throw new AddInstancesFailedException(String.format(
                "Something went wrong. Instances in Auto Scaling group '%s' not started in a reasonable timeframe.",
                t.getAutoScalingGroupName()));
    }

    @Override
    public String successMessage(AutoScalingGroupReady t) {
        MDCBuilder.buildMdcContext(t.getStack());
        return String.format("AutoScaling group '%s' is ready. All %s instances are running.", t.getAutoScalingGroupName(), t.getRequiredInstances());
    }
}
TOP

Related Classes of com.sequenceiq.cloudbreak.service.stack.connector.aws.ASGroupStatusCheckerTask

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.