mirror of
https://github.com/balena-io/balena-cli.git
synced 2024-12-22 06:57:48 +00:00
64c8420c9d
Support for all devices. Tested in the following ones: - Intel Edison. - Raspberry Pi 2. - Parallella.
166 lines
5.3 KiB
CoffeeScript
166 lines
5.3 KiB
CoffeeScript
Promise = require('bluebird')
|
|
_ = require('lodash')
|
|
resin = require('resin-sdk')
|
|
visuals = require('resin-cli-visuals')
|
|
events = require('resin-cli-events')
|
|
commandOptions = require('./command-options')
|
|
patterns = require('../utils/patterns')
|
|
|
|
exports.list =
|
|
signature: 'envs'
|
|
description: 'list all environment variables'
|
|
help: '''
|
|
Use this command to list all environment variables for
|
|
a particular application or device.
|
|
|
|
This command lists all custom environment variables.
|
|
If you want to see all environment variables, including private
|
|
ones used by resin, use the verbose option.
|
|
|
|
Example:
|
|
|
|
$ resin envs --application MyApp
|
|
$ resin envs --application MyApp --verbose
|
|
$ resin envs --device 7cf02a62a3a84440b1bb5579a3d57469148943278630b17e7fc6c4f7b465c9
|
|
'''
|
|
options: [
|
|
commandOptions.optionalApplication
|
|
commandOptions.optionalDevice
|
|
|
|
{
|
|
signature: 'verbose'
|
|
description: 'show private environment variables'
|
|
boolean: true
|
|
alias: 'v'
|
|
}
|
|
]
|
|
permission: 'user'
|
|
action: (params, options, done) ->
|
|
Promise.try ->
|
|
if options.application?
|
|
return resin.models.environmentVariables.getAllByApplication(options.application)
|
|
else if options.device?
|
|
return resin.models.environmentVariables.device.getAll(options.device)
|
|
else
|
|
throw new Error('You must specify an application or device')
|
|
|
|
.tap (environmentVariables) ->
|
|
if _.isEmpty(environmentVariables)
|
|
throw new Error('No environment variables found')
|
|
if not options.verbose
|
|
isSystemVariable = resin.models.environmentVariables.isSystemVariable
|
|
environmentVariables = _.reject(environmentVariables, isSystemVariable)
|
|
|
|
console.log visuals.table.horizontal environmentVariables, [
|
|
'id'
|
|
'name'
|
|
'value'
|
|
]
|
|
.nodeify(done)
|
|
|
|
exports.remove =
|
|
signature: 'env rm <id>'
|
|
description: 'remove an environment variable'
|
|
help: '''
|
|
Use this command to remove an environment variable from an application.
|
|
|
|
Don't remove resin specific variables, as things might not work as expected.
|
|
|
|
Notice this command asks for confirmation interactively.
|
|
You can avoid this by passing the `--yes` boolean option.
|
|
|
|
If you want to eliminate a device environment variable, pass the `--device` boolean option.
|
|
|
|
Examples:
|
|
|
|
$ resin env rm 215
|
|
$ resin env rm 215 --yes
|
|
$ resin env rm 215 --device
|
|
'''
|
|
options: [
|
|
commandOptions.yes
|
|
commandOptions.booleanDevice
|
|
]
|
|
permission: 'user'
|
|
action: (params, options, done) ->
|
|
patterns.confirm(options.yes, 'Are you sure you want to delete the environment variable?').then ->
|
|
if options.device
|
|
resin.models.environmentVariables.device.remove(params.id)
|
|
events.send('deviceEnvironmentVariable.delete', id: params.id)
|
|
else
|
|
resin.models.environmentVariables.remove(params.id)
|
|
events.send('environmentVariable.delete', id: params.id)
|
|
.nodeify(done)
|
|
|
|
exports.add =
|
|
signature: 'env add <key> [value]'
|
|
description: 'add an environment variable'
|
|
help: '''
|
|
Use this command to add an enviroment variable to an application.
|
|
|
|
If value is omitted, the tool will attempt to use the variable's value
|
|
as defined in your host machine.
|
|
|
|
Use the `--device` option if you want to assign the environment variable
|
|
to a specific device.
|
|
|
|
If the value is grabbed from the environment, a warning message will be printed.
|
|
Use `--quiet` to remove it.
|
|
|
|
Examples:
|
|
|
|
$ resin env add EDITOR vim --application MyApp
|
|
$ resin env add TERM --application MyApp
|
|
$ resin env add EDITOR vim --device 7cf02a62a3a84440b1bb5579a3d57469148943278630b17e7fc6c4f7b465c9
|
|
'''
|
|
options: [
|
|
commandOptions.optionalApplication
|
|
commandOptions.optionalDevice
|
|
]
|
|
permission: 'user'
|
|
action: (params, options, done) ->
|
|
Promise.try ->
|
|
if not params.value?
|
|
params.value = process.env[params.key]
|
|
|
|
if not params.value?
|
|
throw new Error("Environment value not found for key: #{params.key}")
|
|
else
|
|
console.info("Warning: using #{params.key}=#{params.value} from host environment")
|
|
|
|
if options.application?
|
|
resin.models.environmentVariables.create(options.application, params.key, params.value).then ->
|
|
resin.models.application.get(options.application).then (application) ->
|
|
events.send('environmentVariable.create', application: application.id)
|
|
else if options.device?
|
|
resin.models.environmentVariables.device.create(options.device, params.key, params.value).then ->
|
|
events.send('deviceEnvironmentVariable.create', device: options.device)
|
|
else
|
|
throw new Error('You must specify an application or device')
|
|
.nodeify(done)
|
|
|
|
exports.rename =
|
|
signature: 'env rename <id> <value>'
|
|
description: 'rename an environment variable'
|
|
help: '''
|
|
Use this command to rename an enviroment variable from an application.
|
|
|
|
Pass the `--device` boolean option if you want to rename a device environment variable.
|
|
|
|
Examples:
|
|
|
|
$ resin env rename 376 emacs
|
|
$ resin env rename 376 emacs --device
|
|
'''
|
|
permission: 'user'
|
|
options: [ commandOptions.booleanDevice ]
|
|
action: (params, options, done) ->
|
|
Promise.try ->
|
|
if options.device
|
|
resin.models.environmentVariables.device.update(params.id, params.value).then ->
|
|
events.send('deviceEnvironmentVariable.edit', id: params.id)
|
|
else
|
|
resin.models.environmentVariables.update(params.id, params.value).then ->
|
|
events.send('environmentVariable.edit', id: params.id)
|
|
.nodeify(done)
|