diff --git a/images/vultr.js b/images/vultr.js index 46bf953c0..79d2d8291 100755 --- a/images/vultr.js +++ b/images/vultr.js @@ -4,7 +4,8 @@ require('colors'); -var request = require('superagent-sync'); +var request = require('superagent-sync'), + sleep = require('sleep').sleep; function exit(error, result) { if (error) console.error(error.message.red); @@ -105,6 +106,23 @@ function powerOff(id, callback) { callback(null); } +function waitForSnapshot(id) { + var res = request.post('https://api.vultr.com/v1/snapshot/list') + .query({ api_key : gApiToken }) + .end(); + + if (res.statusCode !== 200) { + console.error('Invalid statusCode waiting for snapshot'); + return false; + } + + if (res.body[id].status === 'complete') return true; + + console.error('snapshot not complete : ' + res.body[id].status); + + return false; +} + function snapshot(id, name, callback) { var res = request.post('https://api.vultr.com/v1/snapshot/create') .query({ api_key : gApiToken }) @@ -114,6 +132,11 @@ function snapshot(id, name, callback) { if (res.statusCode !== 200) return callback(new Error('Invalid statusCode powering off')); + for (var i = 0; i < 200; i++) { + if (waitForSnapshot(res.body.SNAPSHOTID)) break; + sleep(10); + } + callback(null, res.body.SNAPSHOTID); } diff --git a/package.json b/package.json index b06d2b7cc..46563240a 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "lodash": "^3.2.0", "mocha": "^2.1.0", "nock": "^0.59.1", + "sleep": "^3.0.0", "superagent-sync": "^0.2.0", "supererror": "^0.7.0", "yesno": "0.0.1"