(function() { var Promise, _, capitano, config, prettyjson, umount, visuals; _ = require('lodash'); Promise = require('bluebird'); capitano = Promise.promisifyAll(require('capitano')); umount = Promise.promisifyAll(require('umount')); visuals = require('resin-cli-visuals'); config = require('resin-config-json'); prettyjson = require('prettyjson'); exports.read = { signature: 'config read', description: 'read a device configuration', help: 'Use this command to read the config.json file from a provisioned device\n\nExamples:\n\n $ resin config read --type raspberry-pi\n $ resin config read --type raspberry-pi --drive /dev/disk2', options: [ { signature: 'type', description: 'device type', parameter: 'type', alias: 't', required: 'You have to specify a device type' }, { signature: 'drive', description: 'drive', parameter: 'drive', alias: 'd' } ], permission: 'user', root: true, action: function(params, options, done) { return Promise["try"](function() { return options.drive || visuals.drive('Select the device drive'); }).tap(umount.umountAsync).then(function(drive) { return config.read(drive, options.type); }).tap(function(configJSON) { return console.info(prettyjson.render(configJSON)); }).nodeify(done); } }; exports.write = { signature: 'config write ', description: 'write a device configuration', help: 'Use this command to write the config.json file of a provisioned device\n\nExamples:\n\n $ resin config write --type raspberry-pi username johndoe\n $ resin config write --type raspberry-pi --drive /dev/disk2 username johndoe\n $ resin config write --type raspberry-pi files.network/settings "..."', options: [ { signature: 'type', description: 'device type', parameter: 'type', alias: 't', required: 'You have to specify a device type' }, { signature: 'drive', description: 'drive', parameter: 'drive', alias: 'd' } ], permission: 'user', root: true, action: function(params, options, done) { return Promise["try"](function() { return options.drive || visuals.drive('Select the device drive'); }).tap(umount.umountAsync).then(function(drive) { return config.read(drive, options.type).then(function(configJSON) { console.info("Setting " + params.key + " to " + params.value); _.set(configJSON, params.key, params.value); return configJSON; }).tap(function() { return umount.umountAsync(drive); }).then(function(configJSON) { return config.write(drive, options.type, configJSON); }); }).tap(function() { return console.info('Done'); }).nodeify(done); } }; exports.reconfigure = { signature: 'config reconfigure', description: 'reconfigure a provisioned device', help: 'Use this command to reconfigure a provisioned device\n\nExamples:\n\n $ resin config reconfigure --type raspberry-pi\n $ resin config reconfigure --type raspberry-pi --advanced\n $ resin config reconfigure --type raspberry-pi --drive /dev/disk2', options: [ { signature: 'type', description: 'device type', parameter: 'type', alias: 't', required: 'You have to specify a device type' }, { signature: 'drive', description: 'drive', parameter: 'drive', alias: 'd' }, { signature: 'advanced', description: 'show advanced commands', boolean: true, alias: 'v' } ], permission: 'user', root: true, action: function(params, options, done) { return Promise["try"](function() { return options.drive || visuals.drive('Select the device drive'); }).tap(umount.umountAsync).then(function(drive) { return config.read(drive, options.type).get('uuid').tap(function() { return umount.umountAsync(drive); }).then(function(uuid) { var configureCommand; configureCommand = "os configure " + drive + " " + uuid; if (options.advanced) { configureCommand += ' --advanced'; } return capitano.runAsync(configureCommand); }); }).then(function() { return console.info('Done'); }).nodeify(done); } }; }).call(this);