diff --git a/images/createImage b/images/createImage index eb051d4f3..f3bafe819 100755 --- a/images/createImage +++ b/images/createImage @@ -1,6 +1,6 @@ #!/bin/bash -set -eu -o pipefail +set -eux -o pipefail assertNotEmpty() { : "${!1:? "$1 is not set."}" diff --git a/images/vultr.js b/images/vultr.js new file mode 100755 index 000000000..b22072b5e --- /dev/null +++ b/images/vultr.js @@ -0,0 +1,67 @@ +#!/usr/bin/env node + +'use strict'; + +require('colors'); + +var request = require('superagent-sync'); + +function exit(error, result) { + if (error) console.error(error.message.red); + if (result) console.log(result); + + process.exit(error ? 1 : 0); +} + +var gApiToken = process.env.API_TOKEN; +if (!gApiToken) exit('Script requires API_TOKEN env to be set'); + +if (process.argv.length < 3) { + exit('Usage: vultr '); +} + +function getSshKeyId(keyName) { + request.get('https://api.vultr.com/v1/sshkey/list') + .query({ api_key : gApiToken }) + .end(function (error, res) { + + if (error) exit(error); + + var allKeys = Object.keys(res.body); + for (var i = 0; i < allKeys.length; i++) { + if (keyName === allKeys[i]) exit(null, res.body[keyName].key); + } + + exit(new Error('key not found')); + }); +} + +switch (process.argv[2]) { +case 'get_ssh_key_id': + getSshKeyId(process.argv[3]); + break; + +case 'create': + +case 'get_id': + +case 'get_ip': + +case 'power_on': + +case 'power_off': + +case 'snapshot': + +case 'destroy': + +case 'wait_for_image_event': + +case 'transfer_image': + exit(new Error('Unimplemented command:' + process.argv[2])); + + break; + +default: + exit(new Error('Unknown command:' + process.argv[2])); +} diff --git a/package.json b/package.json index 4d3b042e9..b06d2b7cc 100644 --- a/package.json +++ b/package.json @@ -25,12 +25,14 @@ "superagent": "^0.21.0" }, "devDependencies": { + "colors": "^1.1.2", "commander": "^2.8.1", "expect.js": "^0.3.1", "istanbul": "^0.3.5", "lodash": "^3.2.0", "mocha": "^2.1.0", "nock": "^0.59.1", + "superagent-sync": "^0.2.0", "supererror": "^0.7.0", "yesno": "0.0.1" },