Add containerName to Service interface

This allows to compare the current and target container names and
trigger an `updateMetadata` step if they are different. This allows us
to normalize the container name format with a new supervisor update.

Change-type: minor
This commit is contained in:
Felipe Lalanne 2023-11-15 14:32:51 -03:00
parent aedfd31dd0
commit f7ed27fb26
3 changed files with 14 additions and 3 deletions

View File

@ -658,7 +658,10 @@ export class App {
private generateContainerStep(current: Service, target: Service) { private generateContainerStep(current: Service, target: Service) {
// if the services release doesn't match, then rename the container... // if the services release doesn't match, then rename the container...
if (current.commit !== target.commit) { if (
current.commit !== target.commit ||
current.containerName !== target.containerName
) {
return generateStep('updateMetadata', { current, target }); return generateStep('updateMetadata', { current, target });
} else if (target.config.running !== current.config.running) { } else if (target.config.running !== current.config.running) {
if (target.config.running) { if (target.config.running) {

View File

@ -157,7 +157,7 @@ export async function updateMetadata(service: Service, target: Service) {
try { try {
await docker.getContainer(svc.containerId).rename({ await docker.getContainer(svc.containerId).rename({
name: `${service.serviceName}_${target.commit}`, name: target.containerName,
}); });
} catch (e) { } catch (e) {
if (isNotFoundError(e)) { if (isNotFoundError(e)) {

View File

@ -70,6 +70,7 @@ export class Service {
public serviceId: number; public serviceId: number;
public imageName: string | null; public imageName: string | null;
public containerId: string | null; public containerId: string | null;
public containerName: string;
public exitErrorMessage: string | null; public exitErrorMessage: string | null;
public dependsOn: string[] | null; public dependsOn: string[] | null;
@ -153,6 +154,9 @@ export class Service {
service.commit = appConfig.commit; service.commit = appConfig.commit;
service.appUuid = appConfig.appUuid; service.appUuid = appConfig.appUuid;
// The target container name
service.containerName = `${service.serviceName}_${service.commit}`;
// dependsOn is used by other parts of the step // dependsOn is used by other parts of the step
// calculation so we delete it from the composition // calculation so we delete it from the composition
service.dependsOn = appConfig.composition?.dependsOn || null; service.dependsOn = appConfig.composition?.dependsOn || null;
@ -636,6 +640,9 @@ export class Service {
); );
} }
// The current container name, minus the initial '/'
svc.containerName = container.Name.slice(1);
// If we have not renamed the service yet we can still use the image id // If we have not renamed the service yet we can still use the image id
svc.imageId = parseInt(nameMatch[1], 10); svc.imageId = parseInt(nameMatch[1], 10);
svc.releaseId = parseInt(nameMatch[2], 10); svc.releaseId = parseInt(nameMatch[2], 10);
@ -893,7 +900,8 @@ export class Service {
): boolean { ): boolean {
return ( return (
this.isEqualConfig(service, currentContainerIds) && this.isEqualConfig(service, currentContainerIds) &&
this.commit === service.commit this.commit === service.commit &&
this.containerName === service.containerName
); );
} }