aboutsummaryrefslogtreecommitdiffstats
path: root/lib/services.js
blob: 5a2a7d701a5f38bc17c68674187a01eb6beddf8b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
Copyright(c) 2017 AT&T Intellectual Property. All rights reserved. 

Licensed under the Apache License, Version 2.0 (the "License"); 
you may not use this file except in compliance with the License.

You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, 
software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. 
See the License for the specific language governing permissions and limitations under the License.
*/

/* Deploying and undeploying services based on incoming events */

"use strict";

const ejs = require('ejs');
const deploy = require('./deploy');
const inventory = require('./inventory');
const config = process.mainModule.exports.config;

/* Set up logging */
var logger = config.logSource.getLogger("services");

/* Create a deployer function that can deploy a service from a
 * blueprint template in the context of the event request 'req'.
 * 'template' is a template object (with 'type' and 'template') 
 * created by the checkInventory middleware
 */
exports.createDeployer = function(req) {
	
	return function(blueprint) {
		/* Generate a deploymentId */
		let deploymentId = blueprint.deploymentId;		

		/* Attempt the deployment */
		logger.info(req.dcaeReqId + " " + "Attempting to deploy deploymentId " + deploymentId);
		logger.debug(req.dcaeReqId + " deploymentId: " + deploymentId + " blueprint: " + blueprint.blueprint);
		
		deploy.deployBlueprint(deploymentId, blueprint.blueprint)
		.then(function(outputs) {
			logger.info(req.dcaeReqId + " Deployed deploymentId: " + deploymentId);
			logger.debug (req.dcaeReqId + " deploymentId: " + deploymentId + " outputs: " + JSON.stringify(outputs));
			return outputs;
		})
		.then(function(outputs) {
			/* Update the inventory */
			return inventory.addService(
					deploymentId, 
					blueprint.type, 
					req.body.dcae_target_name,
					req.body.dcae_target_type,
					req.body.dcae_service_location,
					outputs
			);		
		})
		.then(function(result) {
			logger.info(req.dcaeReqId + " Updated inventory for deploymentId: " + deploymentId);
		})
		.catch(function(err) {
			logger.error(req.dcaeReqId + " Failed to deploy deploymentId: " + deploymentId + " Error: " + JSON.stringify(err));
			//TODO try uninstall?
		});
	};	
};

/* Create an undeployer function that can undeploy 
 * a previously deployed service.
 */
exports.createUndeployer = function(req) {
	
	return function(deployment) {
		
		/* Undeploy */
		deploy.undeployDeployment(deployment.deploymentId)
		.then(function(result){
			logger.info(req.dcaeReqId + " Undeployed deploymentId: " + deployment.deploymentId);
			return result;
		})
		.then(function(result) {
			/* Delete the service from the inventory */
			/* When we create service we set service id = deployment id */
			return inventory.deleteService(deployment.deploymentId);
		})
		.then(function(result){
			logger.info(req.dcaeReqId + " Deleted service from inventory for deploymentId: " + deployment.deploymentId);
		})
		.catch(function(err){
			logger.error(req.dcaeReqId + " Error undeploying " + deployment.deploymentId + ": " + JSON.stringify(err));
		});
	};
	
};