diff --git a/.gitignore b/.gitignore index 9b0ded5..28047b2 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,5 @@ node_modules ###################### # Projects checked out to this root ###################### + +\.vscode/ diff --git a/README.md b/README.md index 3fc009b..5bb586b 100644 --- a/README.md +++ b/README.md @@ -296,6 +296,35 @@ virtualbox.guestproperty(function guestproperty_callback(machines, error) { }); ``` +Obtaining an extra property by key name: + +```javascript +var options = { + vm: "machine_name", + key: "GUI/Fullscreen" +} + +virtualbox.extradata.get(options, function extradataget_callback(error, value) { + if (error) throw error; + console.log('Virtual Machine "%s" extra "%s" value is "%s"', options.vm, options.key, value); +}); +``` + +Writing an extra property by key name: + +```javascript +var options = { + vm: "machine_name", + key: "GUI/Fullscreen", + value: "true" +} + +virtualbox.extradata.set(options, function extradataset_callback(error) { + if (error) throw error; + console.log('Set Virtual Machine "%s" extra "%s" value to "%s"', options.vm, options.key, options.value); +}); +``` + # Putting it all together ```javascript @@ -346,6 +375,8 @@ virtualbox.start("machine_name", function start_callback(error) { - `.snapshotTake({vm:"machine_name"}, {vm:"snapshot_name"}, callback)` - `.snapshotDelete({vm:"machine_name"}, {vm:"snapshot_UUID"}, callback)` - `.snapshotRestore({vm:"machine_name"}, {vm:"snapshot_UUID"}, callback)` +- `.extradata.get({vm:"machine_name", key:"keyname"}, callback)` +- `.extradata.set({vm:"machine_name", key:"keyname", value:"val"}, callback)` # Troubleshooting diff --git a/lib/virtualbox.js b/lib/virtualbox.js index 8be964e..cbcd2c8 100644 --- a/lib/virtualbox.js +++ b/lib/virtualbox.js @@ -453,6 +453,38 @@ var guestproperty = { }; +var extradata = { + get: function(options, callback) { + var vm = options.vm || options.name || options.vmname || options.title, + key = options.key, + value = options.defaultValue || options.value; + + var cmd = 'getextradata "' + vm + '" "' + key + '"'; + vboxmanage(cmd, function(error, stdout) { + if (error) { + callback(error); + return; + } + var value = stdout.substr(stdout.indexOf(':') + 1).trim(); + if (value === 'No value set!') { + value = undefined; + } + callback(null, value); + }); + }, + + set: function(options, callback) { + var vm = options.vm || options.name || options.vmname || options.title, + key = options.key, + value = options.defaultValue || options.value; + + var cmd = 'setextradata "' + vm + '" "' + key + '" "' + value + '"'; + vboxmanage(cmd, function(error, stdout) { + callback(error); + }); + } +}; + module.exports = { 'exec': vmExec, 'kill': vmKill, @@ -475,6 +507,7 @@ module.exports = { 'snapshotDelete': snapshotDelete, 'snapshotRestore': snapshotRestore, 'isRunning': isRunning, + 'extradata': extradata, 'SCAN_CODES': require('./scan-codes') }; diff --git a/test/getextradata.js b/test/getextradata.js new file mode 100644 index 0000000..f08c975 --- /dev/null +++ b/test/getextradata.js @@ -0,0 +1,12 @@ +"use strict"; + +var virtualbox = require('../lib/virtualbox'), + args = process.argv.slice(2); + +virtualbox.extradata.get({vm: args[0], key: args[1]}, function(error, value){ + if(error) { + throw error; + } + + console.log('Virtual Machine "%s" extra "%s" value is "%s"', args[0], args[1], value); +}); \ No newline at end of file diff --git a/test/setextradata.js b/test/setextradata.js new file mode 100644 index 0000000..3297707 --- /dev/null +++ b/test/setextradata.js @@ -0,0 +1,12 @@ +"use strict"; + +var virtualbox = require('../lib/virtualbox'), + args = process.argv.slice(2); + +virtualbox.extradata.set({vm: args[0], key: args[1], value: args[2]}, function(error, value){ + if(error) { + throw error; + } + + console.log('Set Virtual Machine "%s" extra "%s" value to "%s"', args[0], args[1], args[2]); +}); \ No newline at end of file