package com.sequenceiq.cloudbreak.cloud.openstack.nativ; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import org.openstack4j.api.OSClient; import org.openstack4j.model.compute.Server; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; 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.model.InstanceStatus; import com.sequenceiq.cloudbreak.cloud.openstack.auth.OpenStackClient; import com.sequenceiq.cloudbreak.cloud.openstack.status.NovaInstanceStatus; import com.sequenceiq.cloudbreak.cloud.template.AbstractInstanceConnector; @Service public class OpenStackNativeInstanceConnector extends AbstractInstanceConnector { private static final Logger LOGGER = LoggerFactory.getLogger(OpenStackNativeInstanceConnector.class); private static final int CONSOLE_OUTPUT_LINES = Integer.MAX_VALUE; @Inject private OpenStackClient openStackClient; @Override public List<CloudVmInstanceStatus> check(AuthenticatedContext ac, List<CloudInstance> vms) { List<CloudVmInstanceStatus> statuses = new ArrayList<>(); OSClient osClient = openStackClient.createOSClient(ac); for (CloudInstance vm : vms) { Server server = osClient.compute().servers().get(vm.getInstanceId()); if (server == null) { statuses.add(new CloudVmInstanceStatus(vm, InstanceStatus.TERMINATED)); } else { statuses.add(new CloudVmInstanceStatus(vm, NovaInstanceStatus.get(server))); } } return statuses; } @Override public String getConsoleOutput(AuthenticatedContext authenticatedContext, CloudInstance vm) { OSClient osClient = openStackClient.createOSClient(authenticatedContext); return osClient.compute().servers().getConsoleOutput(vm.getInstanceId(), CONSOLE_OUTPUT_LINES); } }