Skip to content

Commit aa17d46

Browse files
poetryofcodeclaude
andauthored
Warn user when a named volume is auto-created (apple#1108)
- Implemented the TODO at ContainerAPIService/Client/Utility.swift:358 — warn the user when a named volume is auto-created. - This only triggers for named volumes (not anonymous ones), matching Docker's behavior of informing users about implicit resource creation. Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
1 parent adb3c44 commit aa17d46

3 files changed

Lines changed: 14 additions & 6 deletions

File tree

Sources/ContainerCommands/Container/ContainerCreate.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ extension Application {
7878
resource: resourceFlags,
7979
registry: registryFlags,
8080
imageFetch: imageFetchFlags,
81-
progressUpdate: progress.handler
81+
progressUpdate: progress.handler,
82+
log: log
8283
)
8384

8485
let options = ContainerCreateOptions(autoRemove: managementFlags.remove)

Sources/ContainerCommands/Container/ContainerRun.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ extension Application {
103103
resource: resourceFlags,
104104
registry: registryFlags,
105105
imageFetch: imageFetchFlags,
106-
progressUpdate: progress.handler
106+
progressUpdate: progress.handler,
107+
log: log
107108
)
108109

109110
progress.set(description: "Starting container")

Sources/Services/ContainerAPIService/Client/Utility.swift

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import ContainerizationError
2121
import ContainerizationExtras
2222
import ContainerizationOCI
2323
import Foundation
24+
import Logging
2425
import TerminalProgress
2526

2627
public struct Utility {
@@ -81,7 +82,8 @@ public struct Utility {
8182
resource: Flags.Resource,
8283
registry: Flags.Registry,
8384
imageFetch: Flags.ImageFetch,
84-
progressUpdate: @escaping ProgressUpdateHandler
85+
progressUpdate: @escaping ProgressUpdateHandler,
86+
log: Logger
8587
) async throws -> (ContainerConfiguration, Kernel) {
8688
var requestedPlatform = Parser.platform(os: management.os, arch: management.arch)
8789
// Prefer --platform
@@ -173,7 +175,7 @@ public struct Utility {
173175
case .filesystem(let fs):
174176
resolvedMounts.append(fs)
175177
case .volume(let parsed):
176-
let volume = try await getOrCreateVolume(parsed: parsed)
178+
let volume = try await getOrCreateVolume(parsed: parsed, log: log)
177179
let volumeMount = Filesystem.volume(
178180
name: parsed.name,
179181
format: volume.format,
@@ -343,17 +345,19 @@ public struct Utility {
343345

344346
/// Gets an existing volume or creates it if it doesn't exist.
345347
/// Shows a warning for named volumes when auto-creating.
346-
private static func getOrCreateVolume(parsed: ParsedVolume) async throws -> Volume {
348+
private static func getOrCreateVolume(parsed: ParsedVolume, log: Logger) async throws -> Volume {
347349
let labels = parsed.isAnonymous ? [Volume.anonymousLabel: ""] : [:]
348350

349351
let volume: Volume
352+
var wasCreated = false
350353
do {
351354
volume = try await ClientVolume.create(
352355
name: parsed.name,
353356
driver: "local",
354357
driverOpts: [:],
355358
labels: labels
356359
)
360+
wasCreated = true
357361
} catch let error as VolumeError {
358362
guard case .volumeAlreadyExists = error else {
359363
throw error
@@ -368,7 +372,9 @@ public struct Utility {
368372
volume = try await ClientVolume.inspect(parsed.name)
369373
}
370374

371-
// TODO: Warn user if named volume was auto-created
375+
if wasCreated && !parsed.isAnonymous {
376+
log.warning("named volume was automatically created", metadata: ["volume": "\(parsed.name)"])
377+
}
372378

373379
return volume
374380
}

0 commit comments

Comments
 (0)