balena-cli/lib/actions/environment-variables.coffee

166 lines
5.3 KiB
CoffeeScript
Raw Normal View History

Promise = require('bluebird')
2015-08-12 12:17:46 +00:00
_ = require('lodash')
2015-01-08 12:04:37 +00:00
resin = require('resin-sdk')
visuals = require('resin-cli-visuals')
2015-08-31 21:39:48 +00:00
events = require('resin-cli-events')
commandOptions = require('./command-options')
patterns = require('../utils/patterns')
2014-11-24 16:12:12 +00:00
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
2014-11-24 17:00:36 +00:00
{
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)
2015-08-31 21:39:48 +00:00
events.send('deviceEnvironmentVariable.delete', id: params.id)
else
resin.models.environmentVariables.remove(params.id)
2015-08-31 21:39:48 +00:00
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?
2015-08-31 21:39:48 +00:00
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?
2015-08-31 21:39:48 +00:00
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)
2014-12-19 18:07:53 +00:00
exports.rename =
signature: 'env rename <id> <value>'
description: 'rename an environment variable'
help: '''
Use this command to rename an enviroment variable from an application.
2014-12-19 18:28:03 +00:00
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
2015-08-31 21:39:48 +00:00
resin.models.environmentVariables.device.update(params.id, params.value).then ->
events.send('deviceEnvironmentVariable.edit', id: params.id)
else
2015-08-31 21:39:48 +00:00
resin.models.environmentVariables.update(params.id, params.value).then ->
events.send('environmentVariable.edit', id: params.id)
.nodeify(done)