package com.sequenceiq.cloudbreak.cloud.template.task;
import java.util.Collections;
import java.util.List;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.sequenceiq.cloudbreak.cloud.context.AuthenticatedContext;
import com.sequenceiq.cloudbreak.cloud.model.CloudInstance;
import com.sequenceiq.cloudbreak.cloud.model.CloudVmInstanceStatus;
import com.sequenceiq.cloudbreak.cloud.task.AbstractPollTask;
import com.sequenceiq.cloudbreak.cloud.template.ComputeResourceBuilder;
import com.sequenceiq.cloudbreak.cloud.template.context.ResourceBuilderContext;
@Component(PollComputeStatusTask.NAME)
@Scope(value = "prototype")
public class PollComputeStatusTask extends AbstractPollTask<List<CloudVmInstanceStatus>> {
public static final String NAME = "pollComputeStatusTask";
private ComputeResourceBuilder builder;
private ResourceBuilderContext context;
private CloudInstance instance;
public PollComputeStatusTask(AuthenticatedContext auth, ComputeResourceBuilder builder, ResourceBuilderContext context, CloudInstance instance) {
super(auth);
this.builder = builder;
this.context = context;
this.instance = instance;
}
@Override
public List<CloudVmInstanceStatus> call() throws Exception {
return builder.checkInstances(context, getAuthenticatedContext(), Collections.singletonList(instance));
}
@Override
public boolean completed(List<CloudVmInstanceStatus> status) {
for (CloudVmInstanceStatus result : status) {
if (result.getStatus().isTransient()) {
return false;
}
}
return true;
}
}