mirror of
https://github.com/balena-io/balena-cli.git
synced 2025-03-21 11:35:54 +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')
|
||||
drive = require('../drive/drive')
|
||||
drivelist = require('drivelist')
|
||||
|
||||
exports.list =
|
||||
signature: 'drives'
|
||||
@ -12,7 +12,7 @@ exports.list =
|
||||
'''
|
||||
permission: 'user'
|
||||
action: (params, options, done) ->
|
||||
drive.listDrives (error, drives) ->
|
||||
drivelist.list (error, drives) ->
|
||||
return done(error) if error?
|
||||
|
||||
console.log visuals.widgets.table.horizontal drives, [
|
||||
|
@ -1,13 +1,11 @@
|
||||
os = require('os')
|
||||
fs = require('fs')
|
||||
_ = require('lodash-contrib')
|
||||
_ = require('lodash')
|
||||
async = require('async')
|
||||
|
||||
IS_WINDOWS = os.platform() is 'win32'
|
||||
|
||||
win32 = require('./win32')
|
||||
osx = require('./osx')
|
||||
linux = require('./linux')
|
||||
agnostic = require('./agnostic')
|
||||
|
||||
exports.writeImage = (devicePath, imagePath, options = {}, callback = _.noop) ->
|
||||
@ -57,11 +55,3 @@ exports.writeImage = (devicePath, imagePath, options = {}, callback = _.noop) ->
|
||||
delete error.code
|
||||
|
||||
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')
|
||||
path = require('path')
|
||||
_ = require('lodash-contrib')
|
||||
async = require('async')
|
||||
fs = require('fs')
|
||||
tableParser = require('table-parser')
|
||||
|
||||
scriptsPath = path.join(__dirname, 'scripts')
|
||||
diskpartRescanScriptPath = path.join(scriptsPath, 'diskpart_rescan')
|
||||
@ -36,23 +34,3 @@ exports.eraseMBR = (devicePath, callback) ->
|
||||
fs.close(fd, 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",
|
||||
"coffee-script": "~1.8.0",
|
||||
"conf.js": "^0.1.1",
|
||||
"drivelist": "^1.0.0",
|
||||
"git-cli": "~0.8.2",
|
||||
"lodash": "~2.4.1",
|
||||
"lodash-contrib": "~241.4.14",
|
||||
@ -58,7 +59,6 @@
|
||||
"progress-stream": "^0.5.0",
|
||||
"resin-cli-visuals": "0.0.3",
|
||||
"resin-sdk": "git+https://git@github.com/resin-io/resin-sdk.git",
|
||||
"table-parser": "0.0.3",
|
||||
"underscore.string": "~2.4.0"
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user