Files
container/Sources/ContainerClient/Core/ContainerConfiguration.swift
T
Kathryn Baldauf 8e9670c8f8 Initial commit
Co-authored-by: Aditya Ramani <a_ramani@apple.com>
Co-authored-by: Agam Dua <agam_dua@apple.com>
Co-authored-by: Danny Canter <danny_canter@apple.com>
Co-authored-by: Dmitry Kovba <dkovba@apple.com>
Co-authored-by: Eric Ernst <eric_ernst@apple.com>
Co-authored-by: Evan Hazlett <ehazlett@apple.com>
Co-authored-by: Gilbert Song <gilbertsong@apple.com>
Co-authored-by: Hugh Bussell <hbussell@apple.com>
Co-authored-by: John Logan <john_logan@apple.com>
Co-authored-by: Kathryn Baldauf <k_baldauf@apple.com>
Co-authored-by: Madhu Venugopal <mvenugopal@apple.com>
Co-authored-by: Michael Crosby <michael_crosby@apple.com>
Co-authored-by: Sidhartha Mani <sidhartha_mani@apple.com>
Co-authored-by: Tanweer Noor <tnoor@apple.com>
Co-authored-by: Ximena Perez Diaz <xperez528@gmail.com>
Co-authored-by: Yibo Zhuang <yzhuang@apple.com>
2025-06-05 15:51:55 -07:00

90 lines
3.3 KiB
Swift

//===----------------------------------------------------------------------===//
// Copyright © 2025 Apple Inc. and the container project authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//===----------------------------------------------------------------------===//
import ContainerizationOCI
public struct ContainerConfiguration: Sendable, Codable {
/// Identifier for the container.
public var id: String
/// Image used to create the container.
public var image: ImageDescription
/// External mounts to add to the container.
public var mounts: [Filesystem] = []
/// Key/Value labels for the container.
public var labels: [String: String] = [:]
/// System controls for the container.
public var sysctls: [String: String] = [:]
/// The networks the container will be added to.
public var networks: [String] = []
/// The DNS configuration for the container.
public var dns: DNSConfiguration? = nil
/// Whether to enable rosetta x86-64 translation for the container.
public var rosetta: Bool = false
/// The hostname for the container.
public var hostname: String? = nil
/// Initial or main process of the container.
public var initProcess: ProcessConfiguration
/// Platform for the container
public var platform: ContainerizationOCI.Platform = .current
/// Resource values for the container.
public var resources: Resources = .init()
/// Name of the runtime that supports the container
public var runtimeHandler: String = "container-runtime-linux"
public struct DNSConfiguration: Sendable, Codable {
public static let defaultNameservers = ["1.1.1.1"]
public let nameservers: [String]
public let domain: String?
public let searchDomains: [String]
public let options: [String]
public init(
nameservers: [String] = defaultNameservers,
domain: String? = nil,
searchDomains: [String] = [],
options: [String] = []
) {
self.nameservers = nameservers
self.domain = domain
self.searchDomains = searchDomains
self.options = options
}
}
/// Resources like cpu, memory, and storage quota.
public struct Resources: Sendable, Codable {
/// Number of CPU cores allocated.
public var cpus: Int = 4
/// Memory in bytes allocated.
public var memoryInBytes: UInt64 = 1024.mib()
/// Storage quota/size in bytes.
public var storage: UInt64?
public init() {}
}
public init(
id: String,
image: ImageDescription,
process: ProcessConfiguration
) {
self.id = id
self.image = image
self.initProcess = process
}
}