UNPKG

balena-cli

Version:

The official balena Command Line Interface

109 lines (106 loc) 4.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@oclif/core"); const cf = require("../../utils/common-flags"); const errors_1 = require("../../errors"); const lazy_1 = require("../../utils/lazy"); const messages_1 = require("../../utils/messages"); class DeviceMoveCmd extends core_1.Command { async getDevices(balena, deviceUuids) { const deviceOptions = { $select: 'belongs_to__application', $expand: { is_of__device_type: { $select: 'is_of__cpu_architecture', $expand: { is_of__cpu_architecture: { $select: 'slug', }, }, }, }, }; const devices = await Promise.all(deviceUuids.map((uuid) => balena.models.device.get(uuid, deviceOptions))); return devices; } async run() { const { args: params, flags: options } = await this.parse(DeviceMoveCmd); const balena = (0, lazy_1.getBalenaSdk)(); const deviceUuids = params.uuid.split(','); const devices = await this.getDevices(balena, deviceUuids); const { getApplication } = await Promise.resolve().then(() => require('../../utils/sdk')); const application = options.fleet ? await getApplication(balena, options.fleet, { $select: ['id', 'slug'] }) : await this.interactivelySelectApplication(balena, devices); for (const uuid of deviceUuids) { try { await balena.models.device.move(uuid, application.id); console.info(`Device ${uuid} was moved to fleet ${application.slug}`); } catch (err) { console.info(`${err.message}, uuid: ${uuid}`); process.exitCode = 1; } } } async interactivelySelectApplication(balena, devices) { const deviceCpuArchs = Array.from(new Set(devices.map((d) => d.is_of__device_type[0].is_of__cpu_architecture[0].slug))); const allCpuArches = await balena.pine.get({ resource: 'cpu_architecture', options: { $select: ['id', 'slug'], }, }); const compatibleCpuArchIds = allCpuArches .filter((cpuArch) => { return deviceCpuArchs.every((deviceCpuArch) => balena.models.os.isArchitectureCompatibleWith(deviceCpuArch, cpuArch.slug)); }) .map((deviceType) => deviceType.id); const patterns = await Promise.resolve().then(() => require('../../utils/patterns')); try { const application = await patterns.selectApplication({ is_for__device_type: { $any: { $alias: 'dt', $expr: { dt: { is_of__cpu_architecture: { $in: compatibleCpuArchIds }, }, }, }, }, }, true); return application; } catch (err) { if (!compatibleCpuArchIds.length) { throw new errors_1.ExpectedError(`${err.message}\nDo all devices have a compatible architecture?`); } throw err; } } } DeviceMoveCmd.description = (0, lazy_1.stripIndent) ` Move one or more devices to another fleet. Move one or more devices to another fleet. If --fleet is omitted, the fleet will be prompted for interactively. ${messages_1.applicationIdInfo.split('\n').join('\n\t\t')} `; DeviceMoveCmd.examples = [ '$ balena device move 7cf02a6', '$ balena device move 7cf02a6,dc39e52', '$ balena device move 7cf02a6 --fleet MyNewFleet', '$ balena device move 7cf02a6 -f myorg/mynewfleet', ]; DeviceMoveCmd.args = { uuid: core_1.Args.string({ description: 'comma-separated list (no blank spaces) of device UUIDs to be moved', required: true, }), }; DeviceMoveCmd.flags = { fleet: cf.fleet, }; DeviceMoveCmd.authenticated = true; exports.default = DeviceMoveCmd; //# sourceMappingURL=move.js.map