UNPKG

@yawetse/pkgcloud

Version:

An infrastructure-as-a-service agnostic cloud library for node.js

97 lines (87 loc) 2.23 kB
/* * templates.js: Instance methods for working with templates from OpenStack Orchestration * * (C) 2014 Rackspace * Ken Perkins * MIT LICENSE */ var pkgcloud = require('../../../../../lib/pkgcloud'), urlJoin = require('url-join'), orchestration = pkgcloud.providers.openstack.orchestration; var _urlPrefix = '/stacks'; /** * client.getTemplate * * @description get the template for a provided stack * * @param {object|string} stack the stackName or stack for the template query * @param {function} callback f(err, template) * @returns {*} */ exports.getTemplate = function (stack, callback) { var self = this; function getTemplate(stack) { return self._request({ path: urlJoin(_urlPrefix, stack.name, stack.id, 'template') }, function (err, body) { if (err) { return callback(err); } if (!body) { return new Error('Unexpected empty response'); } else { callback(null, body); } }); } if (stack instanceof orchestration.Stack) { getTemplate(stack); } else if (typeof stack === 'string') { self.getStack(stack, function(err, stack) { if (err) { callback(err); return; } getTemplate(stack); }); } }; /** * client.validateTemplate * * @description validate a provided template * * @param {object|string} template the template or templateUrl to validate * @param {function} callback f(err, template) * @returns {*} */ exports.validateTemplate = function (template, callback) { var self = this, requestOpts = { path: urlJoin('/validate'), method: 'POST', body: {} }; if (typeof template === 'string') { requestOpts.body.template_url = template; } else if (typeof template === 'object') { requestOpts.body.template = template; } else { callback(new Error('please provide either a template object, or a templateUrl')); } return self._request(requestOpts, function (err, body) { if (err) { return callback(err); } if (!body) { return new Error('Unexpected empty response'); } else { callback(null, body); } }); };