package com.sequenceiq.cloudbreak.cloud.aws.task;
import java.util.List;
import javax.inject.Inject;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import com.amazonaws.services.autoscaling.AmazonAutoScalingClient;
import com.amazonaws.services.cloudformation.AmazonCloudFormationClient;
import com.amazonaws.services.cloudformation.model.StackStatus;
import com.amazonaws.services.ec2.AmazonEC2Client;
import com.amazonaws.services.ec2.model.CreateSnapshotResult;
import com.sequenceiq.cloudbreak.cloud.aws.AwsClient;
import com.sequenceiq.cloudbreak.cloud.aws.CloudFormationStackUtil;
import com.sequenceiq.cloudbreak.cloud.context.AuthenticatedContext;
import com.sequenceiq.cloudbreak.cloud.model.CloudStack;
import com.sequenceiq.cloudbreak.cloud.task.PollTask;
@Component
public class AwsPollTaskFactory {
@Inject
private ApplicationContext applicationContext;
public PollTask<Boolean> newAwsCreateStackStatusCheckerTask(AuthenticatedContext authenticatedContext, AmazonCloudFormationClient cfClient,
AmazonAutoScalingClient asClient, StackStatus successStatus, StackStatus errorStatus, List<StackStatus> stackErrorStatuses,
String cloudFormationStackName) {
return createPollTask(AwsCreateStackStatusCheckerTask.NAME, authenticatedContext, cfClient, asClient, successStatus, errorStatus,
stackErrorStatuses, cloudFormationStackName);
}
public PollTask<Boolean> newAwsTerminateStackStatusCheckerTask(AuthenticatedContext authenticatedContext, AmazonCloudFormationClient cfClient,
StackStatus successStatus, StackStatus errorStatus, List<StackStatus> stackErrorStatuses, String cloudFormationStackName) {
return createPollTask(AwsTerminateStackStatusCheckerTask.NAME, authenticatedContext, cfClient, successStatus, errorStatus,
stackErrorStatuses, cloudFormationStackName);
}
public PollTask<Boolean> newEbsVolumeStatusCheckerTask(AuthenticatedContext authenticatedContext, CloudStack stack,
AmazonEC2Client amazonEC2Client, String volumeId) {
return createPollTask(EbsVolumeStatusCheckerTask.NAME, authenticatedContext, stack, amazonEC2Client, volumeId);
}
public PollTask<Boolean> newCreateSnapshotReadyStatusCheckerTask(AuthenticatedContext authenticatedContext, CreateSnapshotResult snapshotResult,
String snapshotId, AmazonEC2Client ec2Client) {
return createPollTask(CreateSnapshotReadyStatusCheckerTask.NAME, authenticatedContext, snapshotResult, snapshotId, ec2Client);
}
public PollTask<Boolean> newASGroupStatusCheckerTask(AuthenticatedContext authenticatedContext, String asGroupName, Integer requiredInstances,
AwsClient awsClient, CloudFormationStackUtil cloudFormationStackUtil) {
return createPollTask(ASGroupStatusCheckerTask.NAME, authenticatedContext, asGroupName, requiredInstances, awsClient, cloudFormationStackUtil);
}
@SuppressWarnings("unchecked")
private <T> T createPollTask(String name, Object... args) {
return (T) applicationContext.getBean(name, args);
}
}