import Docker from 'dockerode';
import { DockerClient } from '../docker/client.js';
export interface VolumeCreateOptions {
Name?: string;
Driver?: string;
DriverOpts?: Record<string, string>;
Labels?: Record<string, string>;
}
export class VolumeManager {
constructor(private dockerClient: DockerClient) {}
private getDocker(): Docker {
return this.dockerClient.getDocker();
}
async listVolumes(options: { filters?: Record<string, string[]> } = {}): Promise<any> {
const docker = this.getDocker();
return await docker.listVolumes({
filters: options.filters ? JSON.stringify(options.filters) : undefined,
});
}
async createVolume(options: VolumeCreateOptions = {}): Promise<any> {
const docker = this.getDocker();
const volume = await docker.createVolume(options);
return volume;
}
async getVolume(name: string): Promise<Docker.Volume> {
const docker = this.getDocker();
return docker.getVolume(name);
}
async removeVolume(name: string, options?: { force?: boolean }): Promise<void> {
const volume = await this.getVolume(name);
await volume.remove({
force: options?.force ?? false,
});
}
async inspectVolume(name: string): Promise<Docker.VolumeInspectInfo> {
const volume = await this.getVolume(name);
return await volume.inspect();
}
}