fix(service): Fix secret bundle and service management bugs
This commit is contained in:
@ -3,6 +3,6 @@
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@serve.zone/cloudly',
|
||||
version: '4.12.1',
|
||||
version: '4.12.2',
|
||||
description: 'A comprehensive tool for managing containerized applications across multiple cloud providers using Docker Swarmkit, featuring web, CLI, and API interfaces.'
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ for (let i = 0; i < demoSecretGroups.length; i++) {
|
||||
id: `configBundleId${i + 1}`,
|
||||
data: {
|
||||
name: `Demo Config Bundle ${i + 1}`,
|
||||
includedImages: [],
|
||||
imageClaims: [],
|
||||
type: 'external',
|
||||
description: 'Demo Purpose',
|
||||
includedSecretGroupIds: [secretGroup.id],
|
||||
|
@ -59,4 +59,16 @@ export class SecretBundle extends plugins.smartdata.SmartDataDbDoc<
|
||||
}
|
||||
return returnObject;
|
||||
}
|
||||
|
||||
public async getFlatKeyValueObject(environmentArg: string) {
|
||||
if (!environmentArg) {
|
||||
throw new Error('environment is required');
|
||||
}
|
||||
const secretGroups = await this.getSecretGroups();
|
||||
const returnObject = {};
|
||||
for (const secretGroup of secretGroups) {
|
||||
returnObject[secretGroup.data.key] = secretGroup.data.environments[environmentArg].value;
|
||||
}
|
||||
return returnObject;
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,4 @@
|
||||
import { SecretBundle } from 'ts/manager.secret/classes.secretbundle.js';
|
||||
import * as plugins from '../plugins.js';
|
||||
import { ServiceManager } from './classes.servicemanager.js';
|
||||
|
||||
@ -6,9 +7,51 @@ export class Service extends plugins.smartdata.SmartDataDbDoc<
|
||||
plugins.servezoneInterfaces.data.IService,
|
||||
ServiceManager
|
||||
> {
|
||||
// STATIC
|
||||
public static async getServiceById(serviceIdArg: string) {
|
||||
const service = await this.getInstance({
|
||||
id: serviceIdArg,
|
||||
});
|
||||
return service;
|
||||
}
|
||||
|
||||
public static async getServices() {
|
||||
const services = await this.getInstances({});
|
||||
return services;
|
||||
}
|
||||
|
||||
public static async createService(serviceDataArg: Partial<plugins.servezoneInterfaces.data.IService['data']>) {
|
||||
const service = new Service();
|
||||
service.id = await Service.getNewId();
|
||||
Object.assign(service, serviceDataArg);
|
||||
await service.save();
|
||||
return service;
|
||||
}
|
||||
|
||||
// INSTANCE
|
||||
@plugins.smartdata.svDb()
|
||||
public id: string;
|
||||
|
||||
@plugins.smartdata.svDb()
|
||||
public data: plugins.servezoneInterfaces.data.IService['data'];
|
||||
|
||||
/**
|
||||
* a service runs in a specific environment
|
||||
* so -> this method returns the secret bundles as a flat object accordingly.
|
||||
* in other words, it resolves secret groups for the relevant environment
|
||||
* @param environmentArg
|
||||
*/
|
||||
public async getSecretBundlesAsFlatObject(environmentArg: string = 'production') {
|
||||
const secreBundleIds = this.data.additionalSecretBundleIds || [];
|
||||
secreBundleIds.push(this.data.secretBundleId); // put this last, so it overwrites any other secret bundles.
|
||||
let finalFlatObject = {};
|
||||
for (const secretBundleId of secreBundleIds) {
|
||||
const secretBundle = await SecretBundle.getInstance({
|
||||
id: secretBundleId,
|
||||
});
|
||||
const flatObject = await secretBundle.getFlatKeyValueObject(environmentArg);
|
||||
Object.assign(finalFlatObject, flatObject);
|
||||
}
|
||||
return finalFlatObject;
|
||||
}
|
||||
}
|
||||
|
@ -35,5 +35,32 @@ export class ServiceManager {
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
this.typedrouter.addTypedHandler(
|
||||
new plugins.typedrequest.TypedHandler<plugins.servezoneInterfaces.requests.service.IRequest_Any_Cloudly_GetServiceSecretBundlesAsFlatObject>(
|
||||
'getServiceSecretBundlesAsFlatObject',
|
||||
async (dataArg) => {
|
||||
const service = await Service.getInstance({
|
||||
id: dataArg.serviceId,
|
||||
});
|
||||
const flatKeyValueObject = await service.getSecretBundlesAsFlatObject(dataArg.environment);
|
||||
return {
|
||||
flatKeyValueObject: flatKeyValueObject,
|
||||
};
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
this.typedrouter.addTypedHandler(
|
||||
new plugins.typedrequest.TypedHandler<plugins.servezoneInterfaces.requests.service.IRequest_Any_Cloudly_CreateService>(
|
||||
'createService',
|
||||
async (dataArg) => {
|
||||
const service = await Service.createService(dataArg.serviceData);
|
||||
return {
|
||||
service: await service.createSavableObject(),
|
||||
};
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user