diff --git a/ts/coreflow.classes.clustermanager.ts b/ts/coreflow.classes.clustermanager.ts index ab20b7c..33ee8be 100644 --- a/ts/coreflow.classes.clustermanager.ts +++ b/ts/coreflow.classes.clustermanager.ts @@ -19,6 +19,32 @@ export class ClusterManager { this.coreflowRef = coreflowRefArg; } + private async getDockerServiceByName(serviceNameArg: string): Promise { + try { + return await this.coreflowRef.dockerHost.getServiceByName(serviceNameArg); + } catch (error) { + if ((error as Error).message === `Service not found: ${serviceNameArg}`) { + return null; + } + throw error; + } + } + + private getDockerSafeName(valueArg: string, maxLengthArg = 64) { + const safeName = valueArg + .replace(/[^a-zA-Z0-9_.-]+/g, '-') + .replace(/^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$/g, '') + .slice(0, maxLengthArg) + .replace(/[^a-zA-Z0-9]+$/g, ''); + return safeName || 'resource'; + } + + private getWorkloadSecretName(serviceArgFromCloudly: plugins.servezoneInterfaces.data.IService) { + const serviceName = this.getDockerSafeName(serviceArgFromCloudly.data.name, 36); + const serviceId = this.getDockerSafeName(serviceArgFromCloudly.id, 20); + return this.getDockerSafeName(`${serviceName}-${serviceId}-secret`); + } + private getWorkloadServiceDeploymentLabels( serviceArgFromCloudly: plugins.servezoneInterfaces.data.IService, containerImageFromCloudly: plugins.servezoneInterfaces.data.IImage, @@ -158,7 +184,7 @@ export class ClusterManager { // lets deploy the base services // coretraffic let coretrafficService: plugins.docker.DockerService | null; - coretrafficService = await this.coreflowRef.dockerHost.getServiceByName( + coretrafficService = await this.getDockerServiceByName( 'coretraffic', ); @@ -192,7 +218,7 @@ export class ClusterManager { // corelog let corelogService: plugins.docker.DockerService | null; - corelogService = await this.coreflowRef.dockerHost.getServiceByName( + corelogService = await this.getDockerServiceByName( 'corelog', ); @@ -293,12 +319,12 @@ export class ClusterManager { throw new Error('Invalid image location'); } - let containerService: plugins.docker.DockerService | null = await this.coreflowRef.dockerHost.getServiceByName( + let containerService: plugins.docker.DockerService | null = await this.getDockerServiceByName( serviceArgFromCloudly.data.name, ); this.coreflowRef.cloudlyConnector.cloudlyApiClient; - const dockerSecretName = `${serviceArgFromCloudly.id}_${serviceArgFromCloudly.data.name}_Secret`; + const dockerSecretName = this.getWorkloadSecretName(serviceArgFromCloudly); let containerSecret: plugins.docker.DockerSecret | undefined | null = await this.coreflowRef.dockerHost.getSecretByName( dockerSecretName, );