Search in sources :

Example 1 with AzureExistingVM

use of com.peterphi.servicemanager.service.rest.resource.jaxb.AzureExistingVM in project stdlib by petergeneric.

the class ResourceProvisionService method newInstance.

@Transactional
public ResourceInstanceEntity newInstance(final ResourceTemplateEntity dbTemplate, final ResourceTemplateDefinition definition, Map<String, String> metadata) {
    log.info("Provision new instance of template:" + dbTemplate.getId());
    final AzureExistingVM azureVM = definition.azureExistingVM;
    // TODO when adding a second provider make this generic so providers can be easily plugged in
    List<ResourceInstanceEntity> running = getAllRunning(dbTemplate);
    if (running.isEmpty()) {
        log.info("Provision new instance of template: ");
        ResourceInstanceEntity instance = new ResourceInstanceEntity();
        instance.setTemplate(dbTemplate);
        instance.setTemplateRevision(dbTemplate.getLatestRevision());
        instance.setTemplateRevisionCounter(dbTemplate.getRevisions());
        instance.setMetadata(metadata);
        instance.setProvider(AzureExistingVMProvider.PROVIDER);
        instance.setProviderInstanceId(azureVM.id);
        // TODO in the future when making generic this should be TO_PROVISION and we should make the provision call asynchronously
        instance.setState(ResourceInstanceState.PROVISIONING);
        instance.setId(instanceDao.save(instance));
        // Create a new instance
        azureExistingVMProvider.start(azureVM, metadata);
        return instance;
    } else {
        throw new IllegalArgumentException("Cannot create a new instance: provider is " + AzureExistingVMProvider.PROVIDER + " but an instance already appears to be running: " + running.stream().map(e -> e.getProviderInstanceId()).collect(Collectors.toList()));
    }
}
Also used : ResourceInstanceEntity(com.peterphi.servicemanager.service.db.entity.ResourceInstanceEntity) ResourceInstanceState(com.peterphi.servicemanager.service.rest.resource.type.ResourceInstanceState) StringUtils(org.apache.commons.lang.StringUtils) HibernateDao(com.peterphi.std.guice.hibernate.dao.HibernateDao) Inject(com.google.inject.Inject) Transactional(com.peterphi.std.guice.database.annotation.Transactional) ResourceNetworkConfig(com.peterphi.servicemanager.service.guice.ResourceNetworkConfig) ResourceTemplateDefinition(com.peterphi.servicemanager.service.rest.resource.jaxb.ResourceTemplateDefinition) Collectors(java.util.stream.Collectors) ArrayList(java.util.ArrayList) Logger(org.apache.log4j.Logger) List(java.util.List) JAXBSerialiserFactory(com.peterphi.std.util.jaxb.JAXBSerialiserFactory) Map(java.util.Map) AzureExistingVM(com.peterphi.servicemanager.service.rest.resource.jaxb.AzureExistingVM) ResourceTemplateEntity(com.peterphi.servicemanager.service.db.entity.ResourceTemplateEntity) Singleton(com.google.inject.Singleton) AzureExistingVM(com.peterphi.servicemanager.service.rest.resource.jaxb.AzureExistingVM) ResourceInstanceEntity(com.peterphi.servicemanager.service.db.entity.ResourceInstanceEntity) Transactional(com.peterphi.std.guice.database.annotation.Transactional)

Aggregations

Inject (com.google.inject.Inject)1 Singleton (com.google.inject.Singleton)1 ResourceInstanceEntity (com.peterphi.servicemanager.service.db.entity.ResourceInstanceEntity)1 ResourceTemplateEntity (com.peterphi.servicemanager.service.db.entity.ResourceTemplateEntity)1 ResourceNetworkConfig (com.peterphi.servicemanager.service.guice.ResourceNetworkConfig)1 AzureExistingVM (com.peterphi.servicemanager.service.rest.resource.jaxb.AzureExistingVM)1 ResourceTemplateDefinition (com.peterphi.servicemanager.service.rest.resource.jaxb.ResourceTemplateDefinition)1 ResourceInstanceState (com.peterphi.servicemanager.service.rest.resource.type.ResourceInstanceState)1 Transactional (com.peterphi.std.guice.database.annotation.Transactional)1 HibernateDao (com.peterphi.std.guice.hibernate.dao.HibernateDao)1 JAXBSerialiserFactory (com.peterphi.std.util.jaxb.JAXBSerialiserFactory)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 Map (java.util.Map)1 Collectors (java.util.stream.Collectors)1 StringUtils (org.apache.commons.lang.StringUtils)1 Logger (org.apache.log4j.Logger)1