feat: implement volume restoration functionality

- Added a new restoreVolume function to facilitate the restoration of Docker volumes from backups.
- Integrated service type handling for both application and compose, ensuring proper scaling and management of services during restoration.
- Enhanced command generation for restoring volumes, improving clarity and maintainability of the logic.
This commit is contained in:
Mauricio Siu
2025-06-30 01:38:39 -06:00
parent 2a2b947998
commit 46d84eaa71

View File

@@ -62,3 +62,48 @@ const backupVolume = async (
`;
}
};
export const restoreVolume = async (
volumeBackup: Awaited<ReturnType<typeof findVolumeBackupById>>,
) => {
const { serviceType, volumeName } = volumeBackup;
const baseCommand = `
docker volume rm ${volumeName} --force
docker run --rm \
-v ${volumeName}:/volume_data \
-v $(pwd):/backup \
ubuntu \
bash -c "cd /volume_data && tar xvf /backup/${volumeName}.tar ."
`;
if (serviceType === "application") {
return `
docker service scale ${volumeBackup.application?.appName}=0
${baseCommand}
ACTUAL_REPLICAS=$(docker service inspect ${volumeBackup.application?.appName} --format "{{.Spec.Mode.Replicated.Replicas}}")
docker service scale ${volumeBackup.application?.appName}=$ACTUAL_REPLICAS
`;
}
if (serviceType === "compose") {
const compose = await findComposeById(
volumeBackup.compose?.composeId || "",
);
if (compose.composeType === "stack") {
return `
ACTUAL_REPLICAS=$(docker service inspect ${compose.appName}_${volumeBackup.serviceName} --format "{{.Spec.Mode.Replicated.Replicas}}")
docker service scale ${compose.appName}_${volumeBackup.serviceName}=0
${baseCommand}
docker service scale ${compose.appName}_${volumeBackup.serviceName}=$ACTUAL_REPLICAS
`;
}
return `
ID=$(docker ps -q --filter "label=com.docker.compose.project=${compose.appName}" --filter "label=com.docker.compose.service=${volumeBackup.serviceName}")
docker stop $ID
${baseCommand}
docker start $ID
`;
}
};