ssh: add --noninteractive flag not to suggest devices to connect to

The suggestion happens if the UUID supplied is not found. Because
of that function, it's impossible to do an atomic connect to a device
in non-interactive mode. The auto-suggestion results connecting to
the first available device, which is likely not the intended action.
The current workaround is running a `balena device UUID` and check
its exit code before running `balena ssh UUID`, but since these
are independent steps, still can connect to another device, if between
the two commands anything changes. With this flag used, one could never
connect accidentally to the wrong device due to suggestions.

Change-type: minor
Signed-off-by: Gergely Imreh <gergely@balena.io>
This commit is contained in:
Gergely Imreh 2019-03-11 18:54:22 +00:00
parent bf566b7bb7
commit b4439b7d78
No known key found for this signature in database
GPG Key ID: 2159E9E41D38A9EB
2 changed files with 13 additions and 0 deletions

@ -975,6 +975,7 @@ Examples:
$ balena ssh 7cf02a6 --port 8080
$ balena ssh 7cf02a6 -v
$ balena ssh 7cf02a6 -s
$ balena ssh 7cf02a6 --noninteractive
### Options
@ -994,6 +995,10 @@ access host OS (for devices with balenaOS >= 2.0.0+rev1)
don't use the proxy configuration for this connection. Only makes sense if you've configured proxy globally.
#### --noninteractive
run command non-interactively, do not automatically suggest devices to connect to if UUID not found
# Notes
## note &#60;|note&#62;

@ -35,6 +35,7 @@ module.exports =
$ balena ssh 7cf02a6 --port 8080
$ balena ssh 7cf02a6 -v
$ balena ssh 7cf02a6 -s
$ balena ssh 7cf02a6 --noninteractive
'''
permission: 'user'
primary: true
@ -53,6 +54,10 @@ module.exports =
boolean: true
description: "don't use the proxy configuration for this connection.
Only makes sense if you've configured proxy globally."
,
signature: 'noninteractive'
boolean: true
description: 'run command non-interactively, do not automatically suggest devices to connect to if UUID not found'
]
action: (params, options, done) ->
normalizeUuidProp(params)
@ -103,6 +108,9 @@ module.exports =
return balena.models.device.has(params.uuid)
.then (uuidExists) ->
return params.uuid if uuidExists
if options.noninteractive
console.error("Could not find device: #{params.uuid}")
process.exit(1)
return patterns.inferOrSelectDevice()
.then (uuid) ->
console.info("Connecting to: #{uuid}")