diff --git a/core/src/main/java/io/kestra/core/tasks/scripts/AbstractBash.java b/core/src/main/java/io/kestra/core/tasks/scripts/AbstractBash.java index 80b40ba798..5757addd7e 100644 --- a/core/src/main/java/io/kestra/core/tasks/scripts/AbstractBash.java +++ b/core/src/main/java/io/kestra/core/tasks/scripts/AbstractBash.java @@ -425,5 +425,23 @@ public static class DockerOptions { @PluginProperty(dynamic = false) @Builder.Default protected Boolean pullImage = true; + + @Schema( + title = "A list of request for devices to be sent to device drivers" + ) + @PluginProperty(dynamic = false) + protected List deviceRequests; + + @SuperBuilder + @NoArgsConstructor + @Getter + @Introspected + public static class DeviceRequest { + private String driver; + private Integer count; + private List deviceIds; + private List> capabilities; + private Map options; + } } } diff --git a/core/src/main/java/io/kestra/core/tasks/scripts/runners/DockerScriptRunner.java b/core/src/main/java/io/kestra/core/tasks/scripts/runners/DockerScriptRunner.java index fb333b6da8..3f3594128e 100644 --- a/core/src/main/java/io/kestra/core/tasks/scripts/runners/DockerScriptRunner.java +++ b/core/src/main/java/io/kestra/core/tasks/scripts/runners/DockerScriptRunner.java @@ -194,6 +194,21 @@ public RunResult run( ); } + if (abstractBash.getDockerOptions().getDeviceRequests() != null) { + hostConfig.withDeviceRequests(abstractBash.getDockerOptions() + .getDeviceRequests() + .stream() + .map(throwFunction(deviceRequest -> new DeviceRequest() + .withDriver(runContext.render(deviceRequest.getDriver())) + .withCount(deviceRequest.getCount()) + .withDeviceIds(deviceRequest.getDeviceIds()) + .withCapabilities(deviceRequest.getCapabilities()) + .withOptions(deviceRequest.getOptions()) + )) + .collect(Collectors.toList()) + ); + } + if (abstractBash.getDockerOptions().getNetworkMode() != null) { hostConfig.withNetworkMode(runContext.render(abstractBash.getDockerOptions().getNetworkMode(), additionalVars)); }