fix: handle initial docker service deploys

This commit is contained in:
2026-04-28 16:57:54 +00:00
parent f8e8cc43c4
commit 0b74b91124
+30 -4
View File
@@ -19,6 +19,32 @@ export class ClusterManager {
this.coreflowRef = coreflowRefArg;
}
private async getDockerServiceByName(serviceNameArg: string): Promise<plugins.docker.DockerService | null> {
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,
);