'use strict'; var hashmerge = require('hashmerge'); /** * This command creates a new block. * @function block_create * @memberof Bluebox * @param {Hash} options * @param {String} options.product The UUID of a product. These are available with the /api/block_products call. * @param {String} options.template The UUID of a template. These are available with the /api/block_templates call. * @param {String} options.password password that be used to login (either specify password, ssh_public_key , or both) * @param {String} options.ssh_public_key ssh-public_key that can be used to login into the block (either specify password, ssh_public_key , or both) * @param {String} [options.hostname] Short hostname for your new block. It will be automatically appended with .custXXXX where XXXX is your customer ID * @param {String} [options.username] Username for your new user. Defaults to deploy. * @param {String} [options.location] The UUID of a location. These are available with the /api/locations call. * @param {String} [options.lb_applications] List of Load Balanced Application UUID's, separated by commas without whitespace * @param {String} [options.lb_services] List of Load Balanced Service UUID's, separated by commas without whitespace * @param {String} [options.lb_backends] List of Load Balanced Backend UUID's, separated by commas without whitespace * @param {function} callback * @instance */ var block_create = function(options, callback) { var self = this; var required = [ 'product', 'template', 'password' , 'ssh_public_key' ]; var optional = [ 'hostname', 'username', 'location', 'lb_applications', 'lb_services', 'lb_backends' ]; var defaults = {}; var settings = hashmerge(defaults, options); self._request('post', '/blocks.json', settings , function(err, body, statusCode) { if (err) { return callback(err) ; } if (statusCode === 400) { return callback(new Error('Bad Request - Posted data was incomplete. Check text variable for specific error.')); } if (statusCode === 404) { return callback(new Error('Not Found - The product or template specified could not be found. Check text variable for specific error.')); } if (statusCode === 406) { return callback(new Error('Not Acceptable - SSH key was not submitted and password did not pass libcrack test.')); } if (statusCode === 409) { return callback(new Error('Conflict - Out of capacity / API error occurred.')); } if (statusCode !== 200) { return callback(new Error('Unexpected Status Code[' + statusCode + '] : ' + body )) ; } return callback(null, body); }); }; module.exports = block_create; /* { id: 'ff8c4ad7-1418-4044-8661-0dada1be2fbc', hostname: 'block6106985-nqu.blueboxgrid.com', description: '1 GB RAM + 20 GB Disk', memory: 1073741824, storage: 21474836480, cpu: 0.5, ips: [ { address: '67.214.214.43' }, { address: '2607:f700:1:bd:8b40:1aa4:42c0:c8fd' } ], lb_applications: [], status: 'queued', location_id: '37c2bd9a-3e81-46c9-b6e2-db44a25cc675', product: { id: '94fd37a7-2606-47f7-84d5-9000deda52ae', description: 'Block 1GB Virtual Server', cost: '0.15' }, add_to_lb_application_results: { text: 'no load balanced application specified.' } } */