use of alien4cloud.model.deployment.Deployment in project alien4cloud by alien4cloud.
the class ApplicationVersionServiceTest method versionBeDeployed.
@Test
public void versionBeDeployed() {
dao.delete(Deployment.class, QueryBuilders.matchAllQuery());
ApplicationVersion applicationVersion = createApplicationVersion();
Deployment deployment = new Deployment();
deployment.setId(UUID.randomUUID().toString());
deployment.setVersionId("1.0.0-SNAPSHOT");
deployment.setEndDate(null);
dao.save(deployment);
// this is supposed to find if a matching deployment object exists in ES.
Assert.assertTrue(appVersionSrv.isApplicationVersionDeployed(applicationVersion));
}
use of alien4cloud.model.deployment.Deployment in project alien4cloud by alien4cloud.
the class ApplicationVersionServiceTest method versionShouldNotBeDeployedDeploymentComplete.
@Test
public void versionShouldNotBeDeployedDeploymentComplete() {
dao.delete(Deployment.class, QueryBuilders.matchAllQuery());
ApplicationVersion applicationVersion = createApplicationVersion();
Deployment deployment = new Deployment();
deployment.setId(UUID.randomUUID().toString());
deployment.setVersionId("1.0.0-SNAPSHOT");
deployment.setEndDate(new Date());
dao.save(deployment);
// this is supposed to find if a matching deployment object exists in ES.
Assert.assertFalse(appVersionSrv.isApplicationVersionDeployed(applicationVersion));
}
use of alien4cloud.model.deployment.Deployment in project alien4cloud by alien4cloud.
the class ApplicationDeploymentController method getInstanceInformation.
/**
* Get detailed information for every instances of every node of the application on the PaaS.
*
* @param applicationId The id of the application to be deployed.
* @return A {@link RestResponse} that contains detailed informations (See {@link InstanceInformation}) of the application on the PaaS it is deployed.
*/
@ApiOperation(value = "Get detailed informations for every instances of every node of the application on the PaaS.", notes = "Application role required [ APPLICATION_MANAGER | APPLICATION_DEVOPS ] and Application environment role required [ APPLICATION_USER | DEPLOYMENT_MANAGER ]")
@RequestMapping(value = "/{applicationId:.+}/environments/{applicationEnvironmentId}/deployment/informations", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@PreAuthorize("isAuthenticated()")
public DeferredResult<RestResponse<Map<String, Map<String, InstanceInformation>>>> getInstanceInformation(@PathVariable String applicationId, @PathVariable String applicationEnvironmentId) {
Application application = applicationService.checkAndGetApplication(applicationId);
ApplicationEnvironment environment = applicationEnvironmentService.getEnvironmentByIdOrDefault(application.getId(), applicationEnvironmentId);
AuthorizationUtil.checkAuthorizationForEnvironment(application, environment, ApplicationEnvironmentRole.values());
Deployment deployment = applicationEnvironmentService.getActiveDeployment(environment.getId());
final DeferredResult<RestResponse<Map<String, Map<String, InstanceInformation>>>> instancesDeferredResult = new DeferredResult<>(5L * 60L * 1000L);
if (deployment == null) {
// if there is no topology associated with the version it could not have been deployed.
instancesDeferredResult.setResult(RestResponseBuilder.<Map<String, Map<String, InstanceInformation>>>builder().build());
} else {
try {
deploymentRuntimeStateService.getInstancesInformation(deployment, new IPaaSCallback<Map<String, Map<String, InstanceInformation>>>() {
@Override
public void onSuccess(Map<String, Map<String, InstanceInformation>> data) {
instancesDeferredResult.setResult(RestResponseBuilder.<Map<String, Map<String, InstanceInformation>>>builder().data(data).build());
}
@Override
public void onFailure(Throwable throwable) {
instancesDeferredResult.setErrorResult(throwable);
}
});
} catch (OrchestratorDisabledException e) {
log.error("Cannot get instance informations as topology plugin cannot be found.", e);
instancesDeferredResult.setResult(RestResponseBuilder.<Map<String, Map<String, InstanceInformation>>>builder().build());
}
}
return instancesDeferredResult;
}
use of alien4cloud.model.deployment.Deployment in project alien4cloud by alien4cloud.
the class ApplicationDeploymentController method updateDeployment.
@ApiOperation(value = "Update the active deployment for the given application on the given cloud.", notes = "Application role required [ APPLICATION_MANAGER | APPLICATION_DEVOPS ] and Application environment role required [ DEPLOYMENT_MANAGER ]")
@RequestMapping(value = "/{applicationId:.+}/environments/{applicationEnvironmentId}/update-deployment", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
@PreAuthorize("isAuthenticated()")
public DeferredResult<RestResponse<Void>> updateDeployment(@PathVariable String applicationId, @PathVariable String applicationEnvironmentId, @ApiParam(value = "The secret provider configuration and credentials.") @RequestBody SecretProviderCredentials secretProviderCredentials) {
final DeferredResult<RestResponse<Void>> result = new DeferredResult<>(15L * 60L * 1000L);
Application application = applicationService.checkAndGetApplication(applicationId);
// get the topology from the version and the cloud from the environment
ApplicationEnvironment environment = applicationEnvironmentService.getEnvironmentByIdOrDefault(application.getId(), applicationEnvironmentId);
if (!environment.getApplicationId().equals(applicationId)) {
throw new NotFoundException("Unable to find environment with id <" + applicationEnvironmentId + "> for application <" + applicationId + ">");
}
AuthorizationUtil.checkAuthorizationForEnvironment(application, environment, ApplicationEnvironmentRole.APPLICATION_USER);
// check that the environment is not already deployed
boolean isEnvironmentDeployed = applicationEnvironmentService.isDeployed(environment.getId());
if (!isEnvironmentDeployed) {
// the topology must be deployed in order to update it
throw new NotFoundException("Application <" + applicationId + "> is not deployed for environment with id <" + applicationEnvironmentId + ">, can't update it");
}
Deployment deployment = deploymentService.getActiveDeployment(environment.getId());
if (deployment == null) {
throw new NotFoundException("Unable to find deployment for environment with id <" + applicationEnvironmentId + "> application <" + applicationId + ">, can't update it");
}
ApplicationTopologyVersion topologyVersion = applicationVersionService.getOrFail(Csar.createId(environment.getApplicationId(), environment.getVersion()), environment.getTopologyVersion());
Topology topology = topologyServiceCore.getOrFail(topologyVersion.getArchiveId());
DeploymentTopologyDTO deploymentTopologyDTO = deploymentTopologyDTOBuilder.prepareDeployment(topology, application, environment);
TopologyValidationResult validation = deploymentTopologyDTO.getValidation();
deploymentService.checkDeploymentUpdateFeasibility(deployment, deploymentTopologyDTO.getTopology());
// if not valid, then return validation errors
if (!validation.isValid()) {
result.setErrorResult(RestResponseBuilder.<Void>builder().error(new RestError(RestErrorCode.INVALID_DEPLOYMENT_TOPOLOGY.getCode(), "The deployment topology for the application <" + application.getName() + "> on the environment <" + environment.getName() + "> is not valid.")).build());
}
// process with the deployment
deployService.update(secretProviderCredentials, deploymentTopologyDTO.getTopology(), application, deployment, new IPaaSCallback<Object>() {
@Override
public void onSuccess(Object data) {
result.setResult(RestResponseBuilder.<Void>builder().build());
}
@Override
public void onFailure(Throwable e) {
result.setErrorResult(RestResponseBuilder.<Void>builder().error(new RestError(RestErrorCode.UNCATEGORIZED_ERROR.getCode(), e.getMessage())).build());
}
});
return result;
}
use of alien4cloud.model.deployment.Deployment in project alien4cloud by alien4cloud.
the class ApplicationDeploymentController method getRuntimeTopology.
/**
* Get runtime topology of an application on a specific environment or the current deployment topology if no deployment is active.
* This method is necessary for example to compute output properties / attributes on the client side.
*
* @param applicationId application id for which to get the topology
* @param applicationEnvironmentId application environment for which to get the topology
* @return {@link RestResponse}<{@link TopologyDTO}> containing the requested runtime {@link Topology} and the
* {@link NodeType} related to its {@link NodeTemplate}s
*/
@ApiOperation(value = "Get last runtime (deployed) topology of an application or else get the current deployment topology for the environment.")
@RequestMapping(value = "/{applicationId:.+?}/environments/{applicationEnvironmentId:.+?}/runtime-topology", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@PreAuthorize("isAuthenticated()")
public RestResponse<TopologyDTO> getRuntimeTopology(@ApiParam(value = "Id of the application for which to get deployed topology.", required = true) @PathVariable String applicationId, @ApiParam(value = "Id of the environment for which to get deployed topology.", required = true) @PathVariable String applicationEnvironmentId) {
ApplicationEnvironment environment = applicationEnvironmentService.getEnvironmentByIdOrDefault(applicationId, applicationEnvironmentId);
if (!environment.getApplicationId().equals(applicationId)) {
throw new NotFoundException("Unable to find environment with id <" + applicationEnvironmentId + "> for application <" + applicationId + ">");
}
AuthorizationUtil.checkAuthorizationForEnvironment(applicationService.getOrFail(applicationId), environment, ApplicationEnvironmentRole.APPLICATION_USER);
Deployment deployment = deploymentService.getActiveDeployment(environment.getId());
DeploymentTopology deploymentTopology = null;
if (deployment != null) {
deploymentTopology = deploymentRuntimeStateService.getRuntimeTopology(deployment.getId());
}
return RestResponseBuilder.<TopologyDTO>builder().data(topologyDTOBuilder.initTopologyDTO(deploymentTopology, new TopologyDTO())).build();
}
Aggregations