2016-01-11 19:58:35 +00:00
/ *
Copyright 2016 Resin . io
Licensed under the Apache License , Version 2.0 ( the "License" ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : //www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an "AS IS" BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
* /
2015-11-10 16:53:34 +00:00
( function ( ) {
exports . read = {
signature : 'config read' ,
description : 'read a device configuration' ,
2015-11-10 18:27:01 +00:00
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 ) {
2015-12-07 14:32:24 +00:00
var Promise , config , prettyjson , umount , visuals ;
Promise = require ( 'bluebird' ) ;
config = require ( 'resin-config-json' ) ;
visuals = require ( 'resin-cli-visuals' ) ;
umount = Promise . promisifyAll ( require ( 'umount' ) ) ;
prettyjson = require ( 'prettyjson' ) ;
2015-11-10 18:27:01 +00:00
return Promise [ "try" ] ( function ( ) {
return options . drive || visuals . drive ( 'Select the device drive' ) ;
} ) . tap ( umount . umountAsync ) . then ( function ( drive ) {
2015-11-11 14:04:46 +00:00
return config . read ( drive , options . type ) ;
} ) . tap ( function ( configJSON ) {
return console . info ( prettyjson . render ( configJSON ) ) ;
2015-11-10 18:27:01 +00:00
} ) . nodeify ( done ) ;
}
} ;
exports . write = {
signature : 'config write <key> <value>' ,
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 "..."' ,
2015-11-10 16:53:34 +00:00
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 ) {
2015-12-07 14:32:24 +00:00
var Promise , _ , config , umount , visuals ;
Promise = require ( 'bluebird' ) ;
_ = require ( 'lodash' ) ;
config = require ( 'resin-config-json' ) ;
visuals = require ( 'resin-cli-visuals' ) ;
umount = Promise . promisifyAll ( require ( 'umount' ) ) ;
2015-11-10 16:53:34 +00:00
return Promise [ "try" ] ( function ( ) {
return options . drive || visuals . drive ( 'Select the device drive' ) ;
} ) . tap ( umount . umountAsync ) . then ( function ( drive ) {
2015-11-11 14:04:46 +00:00
return config . read ( drive , options . type ) . then ( function ( configJSON ) {
2015-11-10 18:27:01 +00:00
console . info ( "Setting " + params . key + " to " + params . value ) ;
2015-11-11 14:04:46 +00:00
_ . set ( configJSON , params . key , params . value ) ;
return configJSON ;
2015-11-10 18:27:01 +00:00
} ) . tap ( function ( ) {
return umount . umountAsync ( drive ) ;
2015-11-11 14:04:46 +00:00
} ) . then ( function ( configJSON ) {
return config . write ( drive , options . type , configJSON ) ;
2015-11-10 16:53:34 +00:00
} ) ;
2015-11-10 18:27:01 +00:00
} ) . tap ( function ( ) {
return console . info ( 'Done' ) ;
2015-11-10 16:53:34 +00:00
} ) . nodeify ( done ) ;
}
} ;
2015-11-11 14:38:45 +00:00
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 ) {
2015-12-07 14:32:24 +00:00
var Promise , capitano , config , umount , visuals ;
Promise = require ( 'bluebird' ) ;
config = require ( 'resin-config-json' ) ;
visuals = require ( 'resin-cli-visuals' ) ;
capitano = Promise . promisifyAll ( require ( 'capitano' ) ) ;
umount = Promise . promisifyAll ( require ( 'umount' ) ) ;
2015-11-11 14:38:45 +00:00
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 ) ;
}
} ;
2016-02-27 02:37:15 +00:00
exports . generate = {
signature : 'config generate <uuid>' ,
description : 'generate a config.json file' ,
help : 'Use this command to generate a config.json for a device\n\nExamples:\n\n $ resin config generate 7cf02a6\n $ resin config generate 7cf02a6 --output config.json' ,
options : [
{
signature : 'output' ,
description : 'output' ,
parameter : 'output' ,
alias : 'o'
}
] ,
permission : 'user' ,
action : function ( params , options , done ) {
var Promise , _ , deviceConfig , form , fs , prettyjson , resin ;
Promise = require ( 'bluebird' ) ;
fs = Promise . promisifyAll ( require ( 'fs' ) ) ;
resin = require ( 'resin-sdk' ) ;
_ = require ( 'lodash' ) ;
form = require ( 'resin-cli-form' ) ;
deviceConfig = require ( 'resin-device-config' ) ;
prettyjson = require ( 'prettyjson' ) ;
return resin . models . device . get ( params . uuid ) . then ( function ( device ) {
return resin . models . device . getManifestBySlug ( device . device _type ) . get ( 'options' ) . then ( form . run ) . then ( _ . partial ( deviceConfig . get , device . uuid ) ) ;
} ) . then ( function ( config ) {
if ( options . output != null ) {
return fs . writeFileAsync ( options . output , JSON . stringify ( config ) ) ;
}
return console . log ( prettyjson . render ( config ) ) ;
} ) . nodeify ( done ) ;
}
} ;
2015-11-10 16:53:34 +00:00
} ) . call ( this ) ;