UNPKG

balena-cli

Version:

The official balena Command Line Interface

84 lines (82 loc) 3.54 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 { resolveDeviceUuidsParam } = await Promise.resolve().then(() => require('../../utils/sdk')); const fullDeviceUuids = await resolveDeviceUuidsParam(params.uuid.split(',')); const serviceNames = params.service.split(','); for (const uuid of fullDeviceUuids) { ux.action.start(`Starting services on device ${uuid}`); await this.startServices(balena, uuid, serviceNames); ux.action.stop(); } } async startServices(balena, deviceFullUuid, 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(deviceFullUuid, { $expand: { belongs_to__application: { $select: 'slug' }, is_running__release: { $select: 'commit' }, }, }); const activeReleaseCommit = getExpandedProp(device.is_running__release, 'commit'); const fleetSlug = device.belongs_to__application[0].slug; const serviceInfos = serviceNames.map((serviceName) => { var _a; const serviceInfo = (_a = device.current_services_by_app[fleetSlug]) === null || _a === void 0 ? void 0 : _a[serviceName]; if (serviceInfo == null) { throw new ExpectedError(`Service ${serviceName} not found on device ${deviceFullUuid}.`); } return serviceInfo; }); const startPromises = []; for (const service of serviceInfos) { const serviceContainer = service.find((s) => { return s.commit === activeReleaseCommit; }); if (serviceContainer) { startPromises.push(balena.models.device.startService(deviceFullUuid, serviceContainer.image_id)); } } try { await Promise.all(startPromises); } catch (e) { if (e.message.toLowerCase().includes('no online device')) { throw new ExpectedError(`Device ${deviceFullUuid} 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