mirror of
https://github.com/balena-io/balena-cli.git
synced 2025-06-04 08:50:42 +00:00
Make use of published drivelist
This commit is contained in:
parent
fd7d9858a9
commit
fc6dda5d22
@ -1,5 +1,5 @@
|
|||||||
visuals = require('resin-cli-visuals')
|
visuals = require('resin-cli-visuals')
|
||||||
drive = require('../drive/drive')
|
drivelist = require('drivelist')
|
||||||
|
|
||||||
exports.list =
|
exports.list =
|
||||||
signature: 'drives'
|
signature: 'drives'
|
||||||
@ -12,7 +12,7 @@ exports.list =
|
|||||||
'''
|
'''
|
||||||
permission: 'user'
|
permission: 'user'
|
||||||
action: (params, options, done) ->
|
action: (params, options, done) ->
|
||||||
drive.listDrives (error, drives) ->
|
drivelist.list (error, drives) ->
|
||||||
return done(error) if error?
|
return done(error) if error?
|
||||||
|
|
||||||
console.log visuals.widgets.table.horizontal drives, [
|
console.log visuals.widgets.table.horizontal drives, [
|
||||||
|
@ -1,13 +1,11 @@
|
|||||||
os = require('os')
|
os = require('os')
|
||||||
fs = require('fs')
|
fs = require('fs')
|
||||||
_ = require('lodash-contrib')
|
_ = require('lodash')
|
||||||
async = require('async')
|
async = require('async')
|
||||||
|
|
||||||
IS_WINDOWS = os.platform() is 'win32'
|
IS_WINDOWS = os.platform() is 'win32'
|
||||||
|
|
||||||
win32 = require('./win32')
|
win32 = require('./win32')
|
||||||
osx = require('./osx')
|
|
||||||
linux = require('./linux')
|
|
||||||
agnostic = require('./agnostic')
|
agnostic = require('./agnostic')
|
||||||
|
|
||||||
exports.writeImage = (devicePath, imagePath, options = {}, callback = _.noop) ->
|
exports.writeImage = (devicePath, imagePath, options = {}, callback = _.noop) ->
|
||||||
@ -57,11 +55,3 @@ exports.writeImage = (devicePath, imagePath, options = {}, callback = _.noop) ->
|
|||||||
delete error.code
|
delete error.code
|
||||||
|
|
||||||
return callback(error)
|
return callback(error)
|
||||||
|
|
||||||
exports.listDrives = (callback) ->
|
|
||||||
switch os.platform()
|
|
||||||
when 'darwin' then osx.list(callback)
|
|
||||||
when 'win32' then win32.list(callback)
|
|
||||||
when 'linux' then linux.list(callback)
|
|
||||||
else
|
|
||||||
throw new Error('Your OS is not supported by this module')
|
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
_ = require('lodash')
|
|
||||||
os = require('os')
|
|
||||||
childProcess = require('child_process')
|
|
||||||
tableParser = require('table-parser')
|
|
||||||
|
|
||||||
exports.list = (callback) ->
|
|
||||||
childProcess.exec 'lsblk -d --output NAME,MODEL,SIZE', {}, (error, stdout, stderr) ->
|
|
||||||
return callback(error) if error?
|
|
||||||
|
|
||||||
if not _.isEmpty(stderr)
|
|
||||||
return callback(new Error(stderr))
|
|
||||||
|
|
||||||
result = tableParser.parse(stdout)
|
|
||||||
|
|
||||||
result = _.map result, (row) ->
|
|
||||||
return {
|
|
||||||
device: "/dev/#{_.first(row.NAME)}"
|
|
||||||
description: row.MODEL.join(' ')
|
|
||||||
size: _.first(row.SIZE).replace(/,/g, '.')
|
|
||||||
}
|
|
||||||
|
|
||||||
return callback(null, result)
|
|
@ -1,46 +0,0 @@
|
|||||||
chai = require('chai')
|
|
||||||
expect = chai.expect
|
|
||||||
sinon = require('sinon')
|
|
||||||
chai.use(require('sinon-chai'))
|
|
||||||
childProcess = require('child_process')
|
|
||||||
linux = require('./linux')
|
|
||||||
|
|
||||||
describe 'Drive LINUX:', ->
|
|
||||||
|
|
||||||
describe 'given correct output from lsblk', ->
|
|
||||||
|
|
||||||
beforeEach ->
|
|
||||||
@childProcessStub = sinon.stub(childProcess, 'exec')
|
|
||||||
@childProcessStub.yields null, '''
|
|
||||||
NAME MODEL SIZE
|
|
||||||
sda WDC WD10JPVX-75J 931,5G
|
|
||||||
sdb STORAGE DEVICE 14,7G
|
|
||||||
sr0 DVD+-RW GU90N 1024M
|
|
||||||
''', undefined
|
|
||||||
|
|
||||||
afterEach ->
|
|
||||||
@childProcessStub.restore()
|
|
||||||
|
|
||||||
it 'should extract the necessary information', (done) ->
|
|
||||||
linux.list (error, drives) ->
|
|
||||||
expect(error).to.not.exist
|
|
||||||
|
|
||||||
expect(drives).to.deep.equal [
|
|
||||||
{
|
|
||||||
device: '/dev/sda'
|
|
||||||
description: 'WDC WD10JPVX-75J'
|
|
||||||
size: '931.5G'
|
|
||||||
}
|
|
||||||
{
|
|
||||||
device: '/dev/sdb'
|
|
||||||
description: 'STORAGE DEVICE'
|
|
||||||
size: '14.7G'
|
|
||||||
}
|
|
||||||
{
|
|
||||||
device: '/dev/sr0'
|
|
||||||
description: 'DVD+-RW GU90N'
|
|
||||||
size: '1024M'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
return done()
|
|
@ -1,36 +0,0 @@
|
|||||||
_ = require('lodash')
|
|
||||||
os = require('os')
|
|
||||||
childProcess = require('child_process')
|
|
||||||
tableParser = require('table-parser')
|
|
||||||
|
|
||||||
exports.list = (callback) ->
|
|
||||||
childProcess.exec 'diskutil list', {}, (error, stdout, stderr) ->
|
|
||||||
return callback(error) if error?
|
|
||||||
|
|
||||||
if not _.isEmpty(stderr)
|
|
||||||
return callback(new Error(stderr))
|
|
||||||
|
|
||||||
result = tableParser.parse(stdout)
|
|
||||||
|
|
||||||
result = _.map result, (row) ->
|
|
||||||
return _.compact _.flatten _.values(row)
|
|
||||||
|
|
||||||
result = _.filter result, (row) ->
|
|
||||||
return row[0] is '0:'
|
|
||||||
|
|
||||||
result = _.map result, (row) ->
|
|
||||||
return _.rest(row)
|
|
||||||
|
|
||||||
result = _.map result, (row) ->
|
|
||||||
|
|
||||||
device = row.pop()
|
|
||||||
sizeMeasure = row.pop()
|
|
||||||
size = row.pop()
|
|
||||||
|
|
||||||
return {
|
|
||||||
device: "/dev/#{device}"
|
|
||||||
size: "#{size} #{sizeMeasure}"
|
|
||||||
description: row.join(' ')
|
|
||||||
}
|
|
||||||
|
|
||||||
return callback(null, result)
|
|
@ -1,57 +0,0 @@
|
|||||||
chai = require('chai')
|
|
||||||
expect = chai.expect
|
|
||||||
sinon = require('sinon')
|
|
||||||
chai.use(require('sinon-chai'))
|
|
||||||
childProcess = require('child_process')
|
|
||||||
osx = require('./osx')
|
|
||||||
|
|
||||||
describe 'Drive OSX:', ->
|
|
||||||
|
|
||||||
describe 'given correct output from diskdrive', ->
|
|
||||||
|
|
||||||
beforeEach ->
|
|
||||||
@childProcessStub = sinon.stub(childProcess, 'exec')
|
|
||||||
@childProcessStub.yields null, '''
|
|
||||||
/dev/disk0
|
|
||||||
#: TYPE NAME SIZE IDENTIFIER
|
|
||||||
0: GUID_partition_scheme *750.2 GB disk0
|
|
||||||
1: EFI EFI 209.7 MB disk0s1
|
|
||||||
2: Apple_CoreStorage 749.3 GB disk0s2
|
|
||||||
3: Apple_Boot Recovery HD 650.0 MB disk0s3
|
|
||||||
/dev/disk1
|
|
||||||
#: TYPE NAME SIZE IDENTIFIER
|
|
||||||
0: Apple_HFS Macintosh HD *748.9 GB disk1
|
|
||||||
Logical Volume on disk0s2
|
|
||||||
3D74D961-80FB-4DB1-808F-8B5800C53E3A
|
|
||||||
Unlocked Encrypted
|
|
||||||
/dev/disk2
|
|
||||||
#: TYPE NAME SIZE IDENTIFIER
|
|
||||||
0: elementary OS *15.7 GB disk2
|
|
||||||
''', undefined
|
|
||||||
|
|
||||||
afterEach ->
|
|
||||||
@childProcessStub.restore()
|
|
||||||
|
|
||||||
it 'should extract the necessary information', (done) ->
|
|
||||||
osx.list (error, drives) ->
|
|
||||||
expect(error).to.not.exist
|
|
||||||
|
|
||||||
expect(drives).to.deep.equal [
|
|
||||||
{
|
|
||||||
device: '/dev/disk0'
|
|
||||||
description: 'GUID_partition_scheme'
|
|
||||||
size: '*750.2 GB'
|
|
||||||
}
|
|
||||||
{
|
|
||||||
device: '/dev/disk1'
|
|
||||||
description: 'Apple_HFS Macintosh HD'
|
|
||||||
size: '*748.9 GB'
|
|
||||||
}
|
|
||||||
{
|
|
||||||
device: '/dev/disk2'
|
|
||||||
description: 'elementary OS'
|
|
||||||
size: '*15.7 GB'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
return done()
|
|
@ -1,10 +1,8 @@
|
|||||||
os = require('os')
|
|
||||||
childProcess = require('child_process')
|
childProcess = require('child_process')
|
||||||
path = require('path')
|
path = require('path')
|
||||||
_ = require('lodash-contrib')
|
_ = require('lodash-contrib')
|
||||||
async = require('async')
|
async = require('async')
|
||||||
fs = require('fs')
|
fs = require('fs')
|
||||||
tableParser = require('table-parser')
|
|
||||||
|
|
||||||
scriptsPath = path.join(__dirname, 'scripts')
|
scriptsPath = path.join(__dirname, 'scripts')
|
||||||
diskpartRescanScriptPath = path.join(scriptsPath, 'diskpart_rescan')
|
diskpartRescanScriptPath = path.join(scriptsPath, 'diskpart_rescan')
|
||||||
@ -36,23 +34,3 @@ exports.eraseMBR = (devicePath, callback) ->
|
|||||||
fs.close(fd, callback)
|
fs.close(fd, callback)
|
||||||
|
|
||||||
], callback)
|
], callback)
|
||||||
|
|
||||||
exports.list = (callback) ->
|
|
||||||
childProcess.exec 'wmic diskdrive get DeviceID, Caption, Size', {}, (error, stdout, stderr) ->
|
|
||||||
return callback(error) if error?
|
|
||||||
|
|
||||||
if not _.isEmpty(stderr)
|
|
||||||
return callback(new Error(stderr))
|
|
||||||
|
|
||||||
result = tableParser.parse(stdout)
|
|
||||||
|
|
||||||
result = _.map result, (row) ->
|
|
||||||
size = _.parseInt(row.Size[0]) / 1e+9
|
|
||||||
|
|
||||||
return {
|
|
||||||
device: _.first(row.DeviceID)
|
|
||||||
size: "#{Math.floor(size)} GB"
|
|
||||||
description: row.Caption.join(' ')
|
|
||||||
}
|
|
||||||
|
|
||||||
return callback(null, result)
|
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
chai = require('chai')
|
|
||||||
expect = chai.expect
|
|
||||||
sinon = require('sinon')
|
|
||||||
chai.use(require('sinon-chai'))
|
|
||||||
childProcess = require('child_process')
|
|
||||||
win32 = require('./win32')
|
|
||||||
|
|
||||||
describe 'Drive WIN32:', ->
|
|
||||||
|
|
||||||
describe 'given correct output from wmic', ->
|
|
||||||
|
|
||||||
beforeEach ->
|
|
||||||
@childProcessStub = sinon.stub(childProcess, 'exec')
|
|
||||||
@childProcessStub.yields null, '''
|
|
||||||
Caption DeviceID Size
|
|
||||||
WDC WD10JPVX-75JC3T0 \\\\.\\PHYSICALDRIVE0 1000202273280
|
|
||||||
Generic STORAGE DEVICE USB Device \\\\.\\PHYSICALDRIVE1 15718510080
|
|
||||||
''', undefined
|
|
||||||
|
|
||||||
afterEach ->
|
|
||||||
@childProcessStub.restore()
|
|
||||||
|
|
||||||
it 'should extract the necessary information', (done) ->
|
|
||||||
win32.list (error, drives) ->
|
|
||||||
expect(error).to.not.exist
|
|
||||||
|
|
||||||
expect(drives).to.deep.equal [
|
|
||||||
{
|
|
||||||
device: '\\\\.\\PHYSICALDRIVE0'
|
|
||||||
description: 'WDC WD10JPVX-75JC3T0'
|
|
||||||
size: '1000 GB'
|
|
||||||
}
|
|
||||||
{
|
|
||||||
device: '\\\\.\\PHYSICALDRIVE1'
|
|
||||||
description: 'Generic STORAGE DEVICE USB Device'
|
|
||||||
size: '15 GB'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
return done()
|
|
@ -49,6 +49,7 @@
|
|||||||
"capitano": "~1.3.0",
|
"capitano": "~1.3.0",
|
||||||
"coffee-script": "~1.8.0",
|
"coffee-script": "~1.8.0",
|
||||||
"conf.js": "^0.1.1",
|
"conf.js": "^0.1.1",
|
||||||
|
"drivelist": "^1.0.0",
|
||||||
"git-cli": "~0.8.2",
|
"git-cli": "~0.8.2",
|
||||||
"lodash": "~2.4.1",
|
"lodash": "~2.4.1",
|
||||||
"lodash-contrib": "~241.4.14",
|
"lodash-contrib": "~241.4.14",
|
||||||
@ -58,7 +59,6 @@
|
|||||||
"progress-stream": "^0.5.0",
|
"progress-stream": "^0.5.0",
|
||||||
"resin-cli-visuals": "0.0.3",
|
"resin-cli-visuals": "0.0.3",
|
||||||
"resin-sdk": "git+https://git@github.com/resin-io/resin-sdk.git",
|
"resin-sdk": "git+https://git@github.com/resin-io/resin-sdk.git",
|
||||||
"table-parser": "0.0.3",
|
|
||||||
"underscore.string": "~2.4.0"
|
"underscore.string": "~2.4.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user