aboutsummaryrefslogtreecommitdiffstats
path: root/lib/services.js
blob: 9508efd1a8e3b81b38ba3056475d2f19dee8ee6f (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
98
99
100
101
102
103
104
105
106
107
/*
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;
const logError = require('./logging').logError;
const logAudit = require('./logging').logAccess;

/* 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 */
		var 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) {
			logAudit(req, 200, "Deployed id: " + deploymentId);
		})
		.catch(function(err) {
			/* err should be a standard dispatcher error generated by the deploy or inventory modules */
			/* Enrich the message with the deployment ID */
			err.message = "Error deploying " + deploymentId + ": " + err.message;
			logError(err, req);
			logAudit(req, 500, err.message);
			//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){
			logAudit(req, 200, "Undeployed id: " + deployment.deploymentId);
		})
		.catch(function(err){
			/* err should be a standard dispatcher error generated by the deploy or inventory modules */
			/* Enrich the message with the deployment ID */
			err.message = "Error undeploying " + deployment.deploymentId + ": " + err.message;
			logError(err, req);
			logAudit(req, 500, err.message);
		});
	};
	
};