@yawetse/pkgcloud
Version:
An infrastructure-as-a-service agnostic cloud library for node.js
97 lines (87 loc) • 2.23 kB
JavaScript
/*
* 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);
}
});
};