package io.fathom.cloud.compute.services; import io.fathom.cloud.CloudException; import io.fathom.cloud.compute.state.ComputeRepository; import io.fathom.cloud.lifecycle.LifecycleListener; import io.fathom.cloud.protobuf.CloudModel.FlavorData; import io.fathom.cloud.state.DuplicateValueException; import java.util.List; import javax.inject.Inject; import javax.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.inject.persist.Transactional; @Transactional @Singleton public class Flavors implements LifecycleListener { private static final Logger log = LoggerFactory.getLogger(Flavors.class); @Inject ComputeRepository computeRepository; void initialize() throws DuplicateValueException, CloudException { List<FlavorData> flavors = computeRepository.getFlavors().list(); // TODO: This isn't atomic if (flavors.isEmpty()) { createFlavor("m1.tiny", 512, 1, 1, 0); createFlavor("m1.small", 2048, 1, 20, 0); createFlavor("m1.medium", 4096, 2, 40, 0); createFlavor("m1.large", 8192, 4, 80, 0); createFlavor("m1.xlarge", 16384, 8, 160, 0); } } private void createFlavor(String name, int ram, int vcpus, int disk, int ephemeral) throws DuplicateValueException, CloudException { FlavorData.Builder b = FlavorData.newBuilder(); b.setName(name); b.setRam(ram); b.setDisk(disk); // b.setSwap(0); b.setVcpus(vcpus); b.setEphemeral(ephemeral); computeRepository.getFlavors().create(b); } @Override public void start() throws Exception { initialize(); } public List<FlavorData> list() throws CloudException { List<FlavorData> flavors = computeRepository.getFlavors().list(); return flavors; } public FlavorData find(long id) throws CloudException { return computeRepository.getFlavors().find(id); } }