package com.sequenceiq.cloudbreak.cloud.aws.task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import com.amazonaws.services.ec2.AmazonEC2Client; import com.amazonaws.services.ec2.model.CreateSnapshotResult; import com.amazonaws.services.ec2.model.DescribeSnapshotsRequest; import com.amazonaws.services.ec2.model.DescribeSnapshotsResult; import com.sequenceiq.cloudbreak.cloud.context.AuthenticatedContext; import com.sequenceiq.cloudbreak.cloud.task.PollBooleanStateTask; @Component(CreateSnapshotReadyStatusCheckerTask.NAME) @Scope(value = "prototype") public class CreateSnapshotReadyStatusCheckerTask extends PollBooleanStateTask { public static final String NAME = "createSnapshotReadyStatusCheckerTask"; private static final Logger LOGGER = LoggerFactory.getLogger(CreateSnapshotReadyStatusCheckerTask.class); private AuthenticatedContext authenticatedContext; private CreateSnapshotResult snapshotResult; private String snapshotId; private AmazonEC2Client ec2Client; public CreateSnapshotReadyStatusCheckerTask(AuthenticatedContext authenticatedContext, CreateSnapshotResult snapshotResult, String snapshotId, AmazonEC2Client ec2Client) { super(authenticatedContext, true); this.snapshotId = snapshotId; this.snapshotResult = snapshotResult; this.ec2Client = ec2Client; } @Override public Boolean call() { LOGGER.info("Checking if AWS EBS snapshot '{}' is ready.", snapshotId); DescribeSnapshotsResult result = ec2Client.describeSnapshots(new DescribeSnapshotsRequest().withSnapshotIds(snapshotId)); return result.getSnapshots() != null && !result.getSnapshots().isEmpty() && "completed".equals(result.getSnapshots().get(0).getState()); } }