balena-cli
Version:
The official balena Command Line Interface
79 lines (77 loc) • 3.12 kB
JavaScript
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
;