UNPKG

@serve.zone/spark

Version:

A comprehensive tool for maintaining and configuring servers, integrating with Docker and supporting advanced task scheduling, targeted at the Servezone infrastructure and used by @serve.zone/cloudly as a cluster node server system manager.

68 lines 6.23 kB
import * as plugins from './spark.plugins.js'; import * as paths from './spark.paths.js'; import { Spark } from './spark.classes.spark.js'; import { logger } from './spark.logging.js'; /** * this class takes care of updating the services that are managed by spark */ export class SparkServicesManager { constructor(sparkrefArg) { /** * the services that are managed by spark */ this.services = []; this.sparkRef = sparkrefArg; this.dockerHost = new plugins.docker.DockerHost({}); this.smartupdate = new plugins.smartupdate.SmartUpdate(); } /** * start the instance */ async start() { await this.dockerHost.activateSwarm(); } async updateServices() { for (const service of this.services) { const existingService = await plugins.docker.DockerService.getServiceByName(this.dockerHost, service.name); const existingServiceSecret = await plugins.docker.DockerSecret.getSecretByName(this.dockerHost, `${service.name}Secret`); if (existingService) { const needsUpdate = await existingService.needsUpdate(); if (!needsUpdate) { logger.log('info', `service >>${service.name}<< not needing update.`); // we simply return here to end the functions return; } // continuing here means we need to update the service logger.log('ok', `${service.name} needs to be updated!`); await existingService.remove(); await existingServiceSecret.remove(); } if (!existingService && existingServiceSecret) { await existingServiceSecret.remove(); } const newServiceImage = await plugins.docker.DockerImage.createFromRegistry(this.dockerHost, { creationObject: { imageUrl: service.image, }, }); const newServiceSecret = await plugins.docker.DockerSecret.createSecret(this.dockerHost, { name: `${service.name}Secret`, contentArg: plugins.smartjson.stringify(service.secretJson), version: await newServiceImage.getVersion(), labels: {}, }); const newService = await plugins.docker.DockerService.createService(this.dockerHost, { image: newServiceImage, labels: {}, name: service.name, networkAlias: service.name, networks: [], secrets: [newServiceSecret], ports: [`${service.port}:${service.secretJson.SERVEZONE_PORT}`], }); logger.log('ok', `updated service >>${newService.Spec.Name}<<!`); } logger.log('success', `updated ${this.services.length} services!`); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcmsuY2xhc3Nlcy51cGRhdGVtYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc3BhcmsuY2xhc3Nlcy51cGRhdGVtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxLQUFLLEtBQUssTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9CQUFvQjtJQWlCL0IsWUFBWSxXQUFrQjtRQVo5Qjs7V0FFRztRQUNILGFBQVEsR0FPSCxFQUFFLENBQUM7UUFHTixJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLEtBQUs7UUFDaEIsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFTSxLQUFLLENBQUMsY0FBYztRQUN6QixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwQyxNQUFNLGVBQWUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUN6RSxJQUFJLENBQUMsVUFBVSxFQUNmLE9BQU8sQ0FBQyxJQUFJLENBQ2IsQ0FBQztZQUNGLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQzdFLElBQUksQ0FBQyxVQUFVLEVBQ2YsR0FBRyxPQUFPLENBQUMsSUFBSSxRQUFRLENBQ3hCLENBQUM7WUFDRixJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixNQUFNLFdBQVcsR0FBWSxNQUFNLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDakUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNqQixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxhQUFhLE9BQU8sQ0FBQyxJQUFJLHdCQUF3QixDQUFDLENBQUM7b0JBQ3RFLDZDQUE2QztvQkFDN0MsT0FBTztnQkFDVCxDQUFDO2dCQUNELHNEQUFzRDtnQkFDdEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxDQUFDO2dCQUN6RCxNQUFNLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGVBQWUsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO2dCQUM5QyxNQUFNLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZDLENBQUM7WUFFRCxNQUFNLGVBQWUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUN6RSxJQUFJLENBQUMsVUFBVSxFQUNmO2dCQUNFLGNBQWMsRUFBRTtvQkFDZCxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUs7aUJBQ3hCO2FBQ0YsQ0FDRixDQUFDO1lBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUN2RixJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxRQUFRO2dCQUM3QixVQUFVLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztnQkFDM0QsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDLFVBQVUsRUFBRTtnQkFDM0MsTUFBTSxFQUFFLEVBQUU7YUFDWCxDQUFDLENBQUM7WUFFSCxNQUFNLFVBQVUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNuRixLQUFLLEVBQUUsZUFBZTtnQkFDdEIsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dCQUNsQixZQUFZLEVBQUUsT0FBTyxDQUFDLElBQUk7Z0JBQzFCLFFBQVEsRUFBRSxFQUFFO2dCQUNaLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2dCQUMzQixLQUFLLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUNoRSxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxxQkFBcUIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxZQUFZLENBQUMsQ0FBQztJQUNyRSxDQUFDO0NBQ0YifQ==