架构和内部设计
kompose
有 3 个阶段:加载程序、转换器和输出程序。每个阶段都应具有定义良好的界面,以便轻松编写新的加载程序、转换器或输出程序并将其插入。目前,仅定义了加载程序和转换器的界面。
加载程序
加载程序读取输入文件(目前 kompose
支持 Compose v1、v2)并将其转换为 KomposeObject。
加载程序由加载程序界面表示
type Loader interface {
LoadFile(file string) kobject.KomposeObject
}
每个加载程序“实现”都应置于 kompose/pkg/loader
(如 compose)中。未来将支持更多输入格式。更多详细信息,请访问
KomposeObject
KomposeObject
是 Kompose 加载自输入文件的所有容器的内部表示。第一版本的 KomposeObject
如下所示(源代码:kobject.go)
// KomposeObject holds the generic struct of Kompose transformation
type KomposeObject struct {
ServiceConfigs map[string]ServiceConfig
}
// ServiceConfig holds the basic struct of a container
type ServiceConfig struct {
ContainerName string
Image string
Environment []EnvVar
Port []Ports
Command []string
WorkingDir string
Args []string
Volumes []string
Network []string
Labels map[string]string
Annotations map[string]string
CPUSet string
CPUShares int64
CPUQuota int64
CapAdd []string
CapDrop []string
Entrypoint []string
Expose []string
Privileged bool
Restart string
User string
}
转换器
转换器获取 KomposeObject 并将其转换为目标/输出格式(目前有一组 Kubernetes/OpenShift 对象)。与加载程序类似,转换器由转换器界面表示
type Transformer interface {
Transform(kobject.KomposeObject, kobject.ConvertOptions) []runtime.Object
}
如果你希望添加包含不同类型对象的更多提供程序,则可将转换器作为重点。目前,Kompose 支持 Kubernetes(默认)和 OpenShift 提供程序。有关详细信息,请访问
输出程序
输出程序获取转换器结果并在给定动作上执行动作。例如,动作可将结果显示到 stdout 或直接将制品部署到 Kubernetes/OpenShift。