UNPKG

on-http-y1

Version:
96 lines (83 loc) 3.11 kB
// Copyright © 2017 Dell Inc. or its subsidiaries. All Rights Reserved. 'use strict'; var di = require('di'); var ejs = require('ejs'); module.exports = taskApiServiceFactory; di.annotate(taskApiServiceFactory, new di.Provide('Http.Services.Api.Tasks')); di.annotate(taskApiServiceFactory, new di.Inject( 'Protocol.Task', 'Services.Waterline', 'Errors', 'Util', 'Services.Configuration', 'Services.Lookup', 'Services.Environment', 'Promise', 'Templates', 'Http.Services.Api.Taskgraph.Scheduler' ) ); function taskApiServiceFactory( taskProtocol, waterline, Errors, util, configuration, lookupService, Env, Promise, templates, taskgraphService ) { function NoActiveTaskError(message) { NoActiveTaskError.super_.call(this, message); Error.captureStackTrace(this, NoActiveTaskError); } util.inherits(NoActiveTaskError, Errors.BaseError); function TaskApiService() { this.NoActiveTaskError = NoActiveTaskError; } TaskApiService.prototype.getNode = function(macAddress) { macAddress = macAddress || ''; macAddress = macAddress.toLowerCase(); return waterline.nodes.findByIdentifier(macAddress); }; TaskApiService.prototype.getTasks = function(identifier) { var self = this; return taskgraphService.getTasksById(identifier) .catch(function() { throw new self.NoActiveTaskError(''); }) }; TaskApiService.prototype.postTasksById = function(id, body) { return taskProtocol.respondCommands(id, body); }; TaskApiService.prototype.getBootstrap = function (req, res, macAddress) { var scope = res.locals.scope; return this.getNode(macAddress).then(function (node) { if (node) { var promises = [ Promise.props({ identifier: node.id, server: configuration.get('apiServerAddress', '10.1.1.1'), port: configuration.get('apiServerPort', 80), ipaddress: res.locals.ipAddress, netmask: configuration.get('dhcpSubnetMask', '255.255.255.0'), gateway: configuration.get('dhcpGateway', '10.1.1.1'), macaddress: lookupService.ipAddressToMacAddress(res.locals.ipAddress), sku: Env.get('config', {}, [scope[0]]), env: Env.get('config', {}, scope) }), templates.get('bootstrap.js', scope), ]; return Promise.all(promises).spread(function (options, template) { return ejs.render(template.contents, options); }); } else { throw new Errors.NotFoundError('Node not found'); } }); }; return new TaskApiService(); }