UNPKG

balena-cli

Version:

The official balena Command Line Interface

79 lines (77 loc) 3.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@oclif/core"); const lazy_1 = require("../../utils/lazy"); class DeviceStartServiceCmd extends core_1.Command { async run() { const { args: params } = await this.parse(DeviceStartServiceCmd); const balena = (0, lazy_1.getBalenaSdk)(); const ux = (0, lazy_1.getCliUx)(); const deviceUuids = params.uuid.split(','); const serviceNames = params.service.split(','); for (const uuid of deviceUuids) { ux.action.start(`Starting services on device ${uuid}`); await this.startServices(balena, uuid, serviceNames); ux.action.stop(); } } async startServices(balena, deviceUuid, serviceNames) { const { ExpectedError } = await Promise.resolve().then(() => require('../../errors')); const { getExpandedProp } = await Promise.resolve().then(() => require('../../utils/pine')); const device = await balena.models.device.getWithServiceDetails(deviceUuid, { $expand: { is_running__release: { $select: 'commit' }, }, }); const activeReleaseCommit = getExpandedProp(device.is_running__release, 'commit'); serviceNames.forEach((service) => { if (!device.current_services[service]) { throw new ExpectedError(`Service ${service} not found on device ${deviceUuid}.`); } }); const startPromises = []; for (const serviceName of serviceNames) { const service = device.current_services[serviceName]; const serviceContainer = service.find((s) => { return s.commit === activeReleaseCommit; }); if (serviceContainer) { startPromises.push(balena.models.device.startService(deviceUuid, serviceContainer.image_id)); } } try { await Promise.all(startPromises); } catch (e) { if (e.message.toLowerCase().includes('no online device')) { throw new ExpectedError(`Device ${deviceUuid} is not online.`); } else { throw e; } } } } DeviceStartServiceCmd.description = (0, lazy_1.stripIndent) ` Start containers on a device. Start containers on a device. Multiple devices and services may be specified with a comma-separated list of values (no spaces). `; DeviceStartServiceCmd.examples = [ '$ balena device start-service 23c73a1 myService', '$ balena device start-service 23c73a1 myService1,myService2', ]; DeviceStartServiceCmd.args = { uuid: core_1.Args.string({ description: 'comma-separated list (no blank spaces) of device UUIDs', required: true, }), service: core_1.Args.string({ description: 'comma-separated list (no blank spaces) of service names', required: true, }), }; DeviceStartServiceCmd.authenticated = true; exports.default = DeviceStartServiceCmd; //# sourceMappingURL=start-service.js.map