Files
container/Sources/Plugins/K8s/KubeConfig.swift
T
jshi991andGitHub 0d111be4c6 K8s plugin (#2044)
- closes #2043 
- introduces the k8s plugin, allowing users to make single
  node clusters with the kind base image 
- other functionality is included as well such as creation,
  deletion, and loading custom images
2026-08-05 19:25:27 -07:00

169 lines
4.6 KiB
Swift

//===----------------------------------------------------------------------===//
// Copyright © 2026 Apple Inc. and the container project authors.
//
// 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 Foundation
// MARK: - KubeConfig
struct KubeConfig: Codable {
enum CodingKeys: String, CodingKey {
case apiVersion, kind, clusters, contexts, users
case currentContext = "current-context"
}
var apiVersion: String = "v1"
var kind: String = "Config"
var clusters: [NamedCluster] = []
var contexts: [NamedContext] = []
var users: [NamedAuthInfo] = []
var currentContext: String?
init() {}
init(from decoder: Decoder) throws {
let c = try decoder.container(keyedBy: CodingKeys.self)
apiVersion = try c.decodeIfPresent(String.self, forKey: .apiVersion) ?? "v1"
kind = try c.decodeIfPresent(String.self, forKey: .kind) ?? "Config"
clusters = try c.decodeIfPresent([NamedCluster].self, forKey: .clusters) ?? []
contexts = try c.decodeIfPresent([NamedContext].self, forKey: .contexts) ?? []
users = try c.decodeIfPresent([NamedAuthInfo].self, forKey: .users) ?? []
currentContext = try c.decodeIfPresent(String.self, forKey: .currentContext)
}
static let empty = KubeConfig()
}
// MARK: - NamedCluster
struct NamedCluster: Codable {
var name: String
var cluster: Cluster
}
// MARK: - Cluster
struct Cluster: Codable {
enum CodingKeys: String, CodingKey {
case server
case tlsServerName = "tls-server-name"
case insecureSkipTLSVerify = "insecure-skip-tls-verify"
case certificateAuthority = "certificate-authority"
case certificateAuthorityData = "certificate-authority-data"
case proxyURL = "proxy-url"
}
var server: String
var tlsServerName: String?
var insecureSkipTLSVerify: Bool?
var certificateAuthority: String?
var certificateAuthorityData: String?
var proxyURL: String?
}
// MARK: - NamedContext
struct NamedContext: Codable {
var name: String
var context: Context
}
// MARK: - Context
struct Context: Codable {
var cluster: String
var user: String
var namespace: String?
}
// MARK: - NamedAuthInfo
struct NamedAuthInfo: Codable {
enum CodingKeys: String, CodingKey {
case name
case authInfo = "user"
}
var name: String
var authInfo: AuthInfo
}
// MARK: - AuthInfo
struct AuthInfo: Codable {
enum CodingKeys: String, CodingKey {
case clientCertificate = "client-certificate"
case clientCertificateData = "client-certificate-data"
case clientKey = "client-key"
case clientKeyData = "client-key-data"
case token
case tokenFile = "token-file"
case impersonate
case impersonateGroups = "impersonate-groups"
case impersonateUserExtra = "impersonate-user-extra"
case username
case password
case authProvider = "auth-provider"
case exec
}
var clientCertificate: String?
var clientCertificateData: String?
var clientKey: String?
var clientKeyData: String?
var token: String?
var tokenFile: String?
var impersonate: String?
var impersonateGroups: [String]?
var impersonateUserExtra: [String: String]?
var username: String?
var password: String?
var authProvider: AuthProviderConfig?
var exec: ExecConfig?
}
// MARK: - AuthProviderConfig
struct AuthProviderConfig: Codable {
var name: String
var config: [String: String]?
}
// MARK: - ExecConfig
struct ExecConfig: Codable {
enum CodingKeys: String, CodingKey {
case command, args, env, apiVersion
case installHint = "installHint"
case provideClusterInfo = "provideClusterInfo"
case interactiveMode = "interactiveMode"
}
var command: String
var args: [String]?
var env: [ExecEnvVar]?
var apiVersion: String
var installHint: String?
var provideClusterInfo: Bool?
var interactiveMode: String?
}
// MARK: - ExecEnvVar
struct ExecEnvVar: Codable {
var name: String
var value: String
}