From f5cd3375f26f302cfdad95324a0966a824d24f4d Mon Sep 17 00:00:00 2001 From: Kostas Lekkas Date: Wed, 8 Mar 2017 18:46:28 +0000 Subject: [PATCH] Implement 'resin local promote' --- lib/actions/local/index.coffee | 1 + lib/actions/local/promote.coffee | 78 ++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 lib/actions/local/promote.coffee diff --git a/lib/actions/local/index.coffee b/lib/actions/local/index.coffee index dc9c25e8..992b0f8a 100644 --- a/lib/actions/local/index.coffee +++ b/lib/actions/local/index.coffee @@ -17,3 +17,4 @@ limitations under the License. exports.configure = require('./configure') exports.flash = require('./flash') exports.logs = require('./logs') +exports.promote = require('./promote') diff --git a/lib/actions/local/promote.coffee b/lib/actions/local/promote.coffee new file mode 100644 index 00000000..f182ca8f --- /dev/null +++ b/lib/actions/local/promote.coffee @@ -0,0 +1,78 @@ +### +Copyright 2017 Resin.io + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +### + +module.exports = + signature: 'local promote [deviceIp]' + description: 'Promote a resinOS device' + help: ''' + Warning: 'resin promote' requires an openssh-compatible client to be correctly + installed in your shell environment. For more information (including Windows + support) please check the README here: https://github.com/resin-io/resin-cli + + Use this command to promote your device. + + Promoting a device will provision it onto the Resin platform, + converting it from an unmanaged device to a managed device. + + Examples: + + $ resin local promote + $ resin local promote --port 22222 + $ resin local promote --verbose + ''' + options: [ + signature: 'verbose' + boolean: true + description: 'increase verbosity' + alias: 'v' + , + signature: 'port' + parameter: 'port' + description: 'ssh port number (default: 22222)' + alias: 'p' + ] + action: (params, options, done) -> + child_process = require('child_process') + Promise = require 'bluebird' + _ = require('lodash') + + { forms } = require('resin-sync') + { getSubShellCommand } = require('./common') + + options.port ?= 22222 + + verbose = if options.verbose then '-vvv' else '' + + Promise.try -> + return params.deviceIp ?= forms.selectLocalResinOsDevice() + .then (deviceIp) -> + _.assign(options, { deviceIp }) + + command = "ssh \ + #{verbose} \ + -t \ + -p #{options.port} \ + -o LogLevel=ERROR \ + -o StrictHostKeyChecking=no \ + -o UserKnownHostsFile=/dev/null \ + -o ControlMaster=no \ + root@#{options.deviceIp} \ + -- \"resin-provision interactive\"" + + subShellCommand = getSubShellCommand(command) + child_process.spawn subShellCommand.program, subShellCommand.args, + stdio: 'inherit' + .nodeify(done)