package io.fathom.cloud.compute.api.os.resources; import io.fathom.cloud.CloudException; import io.fathom.cloud.compute.api.os.model.Host; import io.fathom.cloud.compute.api.os.model.Hosts; import io.fathom.cloud.compute.scheduler.InstanceScheduler; import io.fathom.cloud.compute.scheduler.SchedulerHost; import io.fathom.cloud.compute.state.HostStore; import io.fathom.cloud.protobuf.CloudModel.HostData; import io.fathom.cloud.server.resources.OpenstackDefaults; import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.collect.Lists; import com.google.inject.persist.Transactional; @Path("/openstack/compute/{project}/os-hosts") @Transactional public class HostsResource extends ComputeResourceBase { private static final Logger log = LoggerFactory.getLogger(HostsResource.class); @Inject InstanceScheduler scheduler; @Inject HostStore hostStore; @GET @Produces({ JSON }) public Hosts listHosts() throws CloudException { checkDomainAdmin(); Hosts response = new Hosts(); response.hosts = Lists.newArrayList(); for (SchedulerHost host : scheduler.getAllHosts()) { response.hosts.add(toModel(host)); } return response; } // @POST // @Produces({ JSON }) // @Unofficial // public Host createHost(Host host) throws CloudException { // checkDomainAdmin(); // // HostInfo.Builder hostInfo = HostInfo.newBuilder(); // // for (String address : host.addresses) { // hostInfo.addAddress(address); // } // // for (Host.Network network : host.networks) { // HostNetworkInfo.Builder net = hostInfo.addNetworksBuilder(); // net.setKey(network.key); // net.setCidr(network.cidr); // net.setGateway(network.gateway); // net.setPublicNetwork(network.isPublic); // } // // HostInfo created = hostStore.getHosts().create(hostInfo); // // scheduler.refreshHosts(); // // SchedulerHost schedulerHost = scheduler.findHost(created.getId()); // // return toModel(schedulerHost); // } private Host toModel(SchedulerHost host) { Host model = new Host(); model.name = Long.toString(host.getId()); HostData hostData = host.getHostData(); model.service = "compute"; model.zone = OpenstackDefaults.DEFAULT_ZONE; /* * model.addresses = hostInfo.getAddressList(); * * model.networks = Lists.newArrayList(); for (HostNetworkInfo network : * hostInfo.getNetworksList()) { Network net = new Network(); * * net.key = network.getKey(); net.isPublic = * network.getPublicNetwork(); net.cidr = network.getCidr(); net.gateway * = network.getGateway(); model.networks.add(net); } */ return model; } }