From cf06b6c5906e6b2756e29c9083414c4d638e0bfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cristian=20Pallar=C3=A9s?= Date: Tue, 16 Apr 2024 22:41:50 +0200 Subject: [PATCH] feat(sdk): add `volumes` prop to `sim.Container` Allows defining volume mount points for the container. --- libs/wingsdk/src/target-sim/container.inflight.ts | 5 +++++ libs/wingsdk/src/target-sim/container.ts | 8 ++++++++ libs/wingsdk/src/target-sim/schema-resources.ts | 1 + 3 files changed, 14 insertions(+) diff --git a/libs/wingsdk/src/target-sim/container.inflight.ts b/libs/wingsdk/src/target-sim/container.inflight.ts index 5fb95089b5e..c21e0fa4e16 100644 --- a/libs/wingsdk/src/target-sim/container.inflight.ts +++ b/libs/wingsdk/src/target-sim/container.inflight.ts @@ -75,6 +75,11 @@ export class Container implements IContainerClient, ISimulatorResourceInstance { } } + for (const volume of this.props.volumes ?? []) { + dockerRun.push("-v"); + dockerRun.push(volume); + } + dockerRun.push(this.imageTag); for (const a of this.props.args ?? []) { diff --git a/libs/wingsdk/src/target-sim/container.ts b/libs/wingsdk/src/target-sim/container.ts index 38d708881a1..5728c3e713b 100644 --- a/libs/wingsdk/src/target-sim/container.ts +++ b/libs/wingsdk/src/target-sim/container.ts @@ -40,6 +40,13 @@ export interface ContainerProps { */ readonly env?: Record; + /** + * Volume mount points. + * @default [] + * @example ['/host:/container'] + */ + readonly volumes?: string[]; + /** * Container arguments * @default [] @@ -105,6 +112,7 @@ export class Container extends Resource implements ISimulatorResource { imageTag: this.imageTag, containerPort: this.props.containerPort, env: this.props.env, + volumes: this.props.volumes, args: this.props.args, cwd: App.of(this).entrypointDir, }; diff --git a/libs/wingsdk/src/target-sim/schema-resources.ts b/libs/wingsdk/src/target-sim/schema-resources.ts index c84081f3ad6..91a56fc763f 100644 --- a/libs/wingsdk/src/target-sim/schema-resources.ts +++ b/libs/wingsdk/src/target-sim/schema-resources.ts @@ -256,6 +256,7 @@ export interface ContainerSchema { readonly image: string; readonly containerPort?: number; readonly env?: Record; + readonly volumes?: string[]; readonly args?: string[]; readonly cwd: string; }