2015-02-26 15:47:56 +00:00
( function ( ) {
2015-03-12 16:03:59 +00:00
var _ , async , commandOptions , osAction , path , resin , vcs , visuals ;
2015-02-26 15:47:56 +00:00
_ = require ( 'lodash-contrib' ) ;
path = require ( 'path' ) ;
async = require ( 'async' ) ;
resin = require ( 'resin-sdk' ) ;
visuals = require ( 'resin-cli-visuals' ) ;
2015-03-12 16:03:59 +00:00
vcs = require ( 'resin-vcs' ) ;
2015-02-26 15:47:56 +00:00
commandOptions = require ( './command-options' ) ;
osAction = require ( './os' ) ;
exports . list = {
signature : 'devices' ,
description : 'list all devices' ,
2015-03-23 12:17:55 +00:00
help : 'Use this command to list all devices that belong to a certain application.\n\nExamples:\n\n $ resin devices --application MyApp' ,
2015-02-26 15:47:56 +00:00
options : [ commandOptions . application ] ,
permission : 'user' ,
action : function ( params , options , done ) {
return resin . models . device . getAllByApplication ( options . application , function ( error , devices ) {
if ( error != null ) {
return done ( error ) ;
}
console . log ( visuals . widgets . table . horizontal ( devices , [ 'id' , 'name' , 'device_type' , 'is_online' , 'application_name' , 'status' , 'last_seen' ] ) ) ;
return done ( ) ;
} ) ;
}
} ;
exports . info = {
2015-03-23 12:17:55 +00:00
signature : 'device <name>' ,
2015-02-26 15:47:56 +00:00
description : 'list a single device' ,
2015-03-23 12:17:55 +00:00
help : 'Use this command to show information about a single device.\n\nExamples:\n\n $ resin device MyDevice' ,
2015-02-26 15:47:56 +00:00
permission : 'user' ,
action : function ( params , options , done ) {
2015-03-23 12:17:55 +00:00
return resin . models . device . get ( params . name , function ( error , device ) {
2015-02-26 15:47:56 +00:00
if ( error != null ) {
return done ( error ) ;
}
console . log ( visuals . widgets . table . vertical ( device , [ 'id' , 'name' , 'device_type' , 'is_online' , 'ip_address' , 'application_name' , 'status' , 'last_seen' , 'uuid' , 'commit' , 'supervisor_version' , 'is_web_accessible' , 'note' ] ) ) ;
return done ( ) ;
} ) ;
}
} ;
exports . remove = {
2015-03-23 12:17:55 +00:00
signature : 'device rm <name>' ,
2015-02-26 15:47:56 +00:00
description : 'remove a device' ,
2015-03-23 12:17:55 +00:00
help : 'Use this command to remove a device from resin.io.\n\nNotice this command asks for confirmation interactively.\nYou can avoid this by passing the `--yes` boolean option.\n\nExamples:\n\n $ resin device rm MyDevice\n $ resin device rm MyDevice --yes' ,
2015-02-26 15:47:56 +00:00
options : [ commandOptions . yes ] ,
permission : 'user' ,
action : function ( params , options , done ) {
return visuals . patterns . remove ( 'device' , options . yes , function ( callback ) {
2015-03-23 12:17:55 +00:00
return resin . models . device . remove ( params . name , callback ) ;
2015-02-26 15:47:56 +00:00
} , done ) ;
}
} ;
exports . identify = {
signature : 'device identify <uuid>' ,
description : 'identify a device with a UUID' ,
2015-03-03 14:14:16 +00:00
help : 'Use this command to identify a device.\n\nIn the Raspberry Pi, the ACT led is blinked several times.\n\nExamples:\n\n $ resin device identify 23c73a12e3527df55c60b9ce647640c1b7da1b32d71e6a39849ac0f00db828' ,
2015-02-26 15:47:56 +00:00
permission : 'user' ,
action : function ( params , options , done ) {
return resin . models . device . identify ( params . uuid , done ) ;
}
} ;
exports . rename = {
2015-03-23 12:17:55 +00:00
signature : 'device rename <name> [newName]' ,
2015-02-26 15:47:56 +00:00
description : 'rename a resin device' ,
2015-03-23 12:17:55 +00:00
help : 'Use this command to rename a device.\n\nIf you omit the name, you\'ll get asked for it interactively.\n\nExamples:\n\n $ resin device rename MyDevice MyPi\n $ resin device rename MyDevice' ,
2015-02-26 15:47:56 +00:00
permission : 'user' ,
action : function ( params , options , done ) {
return async . waterfall ( [
function ( callback ) {
2015-03-23 12:17:55 +00:00
if ( ! _ . isEmpty ( params . newName ) ) {
return callback ( null , params . newName ) ;
2015-02-26 15:47:56 +00:00
}
2015-03-09 13:14:39 +00:00
return visuals . widgets . ask ( 'How do you want to name this device?' , null , callback ) ;
2015-03-23 12:17:55 +00:00
} , function ( newName , callback ) {
return resin . models . device . rename ( params . name , newName , callback ) ;
2015-02-26 15:47:56 +00:00
}
] , done ) ;
}
} ;
exports . supported = {
signature : 'devices supported' ,
description : 'list all supported devices' ,
2015-03-03 14:14:16 +00:00
help : 'Use this command to get the list of all supported devices\n\nExamples:\n\n $ resin devices supported' ,
2015-02-26 15:47:56 +00:00
permission : 'user' ,
action : function ( params , options , done ) {
return resin . models . device . getSupportedDeviceTypes ( function ( error , devices ) {
if ( error != null ) {
return done ( error ) ;
}
_ . each ( devices , _ . unary ( console . log ) ) ;
return done ( ) ;
} ) ;
}
} ;
exports . init = {
signature : 'device init [device]' ,
description : 'initialise a device with resin os' ,
2015-04-20 13:13:15 +00:00
help : 'Use this command to download the OS image of a certain application and write it to an SD Card.\n\nNote that this command requires admin privileges.\n\nIf `device` is omitted, you will be prompted to select a device interactively.\n\nNotice this command asks for confirmation interactively.\nYou can avoid this by passing the `--yes` boolean option.\n\nYou can quiet the progress bar by passing the `--quiet` boolean option.\n\nYou may have to unmount the device before attempting this operation.\n\nYou need to configure the network type and other settings:\n\nEthernet:\n You can setup the device OS to use ethernet by setting the `--network` option to "ethernet".\n\nWifi:\n You can setup the device OS to use wifi by setting the `--network` option to "wifi".\n If you set "network" to "wifi", you will need to specify the `--ssid` and `--key` option as well.\n\nYou can omit network related options to be asked about them interactively.\n\nExamples:\n\n $ resin device init\n $ resin device init --application MyApp\n $ resin device init --application MyApp --network ethernet\n $ resin device init /dev/disk2 --application MyApp --network wifi --ssid MyNetwork --key secret' ,
2015-03-12 16:03:59 +00:00
options : [ commandOptions . optionalApplication , commandOptions . network , commandOptions . wifiSsid , commandOptions . wifiKey ] ,
2015-02-26 15:47:56 +00:00
permission : 'user' ,
action : function ( params , options , done ) {
return async . waterfall ( [
function ( callback ) {
2015-03-12 16:03:59 +00:00
if ( options . application != null ) {
return callback ( null , options . application ) ;
}
2015-04-20 13:13:15 +00:00
return vcs . getApplicationId ( process . cwd ( ) , function ( error , applicationId ) {
if ( error != null ) {
return callback ( error ) ;
}
return resin . models . application . getById ( applicationId , function ( error , application ) {
if ( error != null ) {
return callback ( error ) ;
}
return callback ( null , application . app _name ) ;
} ) ;
} ) ;
} , function ( applicationName , callback ) {
params . name = applicationName ;
2015-02-26 15:47:56 +00:00
if ( params . device != null ) {
return callback ( null , params . device ) ;
}
return visuals . patterns . selectDrive ( callback ) ;
} , function ( device , callback ) {
2015-03-23 22:32:18 +00:00
var message ;
2015-02-26 15:47:56 +00:00
params . device = device ;
2015-03-23 22:32:18 +00:00
message = "This will completely erase " + params . device + ". Are you sure you want to continue?" ;
return visuals . patterns . confirm ( options . yes , message , callback ) ;
2015-02-26 15:47:56 +00:00
} , function ( confirmed , callback ) {
if ( ! confirmed ) {
return done ( ) ;
}
options . yes = confirmed ;
return osAction . download . action ( params , options , callback ) ;
} , function ( outputFile , callback ) {
params . image = outputFile ;
return osAction . install . action ( params , options , callback ) ;
}
] , done ) ;
}
} ;
} ) . call ( this ) ;