config.go
首先,定义了版本常量和Config结构体。
在结构体中Flags Resources Sharing都使用了omitempty选项,如果该值为空在序列化为JSON或YAML时该字段将被忽略
1 |
|
NewConfig
通过配置文件或命令行Flags创建Config struct,创建时的优先级为命令行、环境变量、配置文件
在代码实现时,先使用配置文件更新Config struct再使用命令行更新,这样保证了上面说到的优先级
parseConfig
parseConfig 将配置文件解析为 JSON 的 YAML,并将其解组为 Config 结构。
使用os.Open打开配置文件,然后调用parseConfigFrom解析配置文件
parseConfigFrom
先将配置文件读出来,然后通过yaml.Unmarshal函数转换成config对象
consts.go
定义了一些常量
duration.go
Duration 将 time.Duration 函数封装为一个自定义 JSON marshaling/unmarshaling 函数
MarshalJSON函数可以将Duration struct转换成bytes数组
UnmarshalJSON函数可以将bytes数组转换成Duration struct
flags.go
ptr函数返回变量的引用
replicas.go
TimeSlicing 定义了要为 timeSlicing 可用资源制作的副本集。
ReplicatedResource 表示要复制的资源。
ReplicatedDevices 封装了应复制给定资源的设备集。该结构体应被视为一个 “联合体”,任何时候都只能设置该结构体中的一个字段。
IsGPUIndex
函数用来检查ReplicatedDeviceRef是否是full GPU index
IsUUID()
通过调用IsGpuUUID()
和IsMigUUID()
来判断是否是UUID
IsGpuUUID
GPU UUID形如GPU-b1028956-cfa2-0990-bf4a-5da9abb51763
IsMigUUID
MIG UUID形如MIG-b1028956-cfa2-0990-bf4a-5da9abb51763或MIG-GPU-b1028956-cfa2-0990-bf4a-5da9abb51763/3/0
除此之外还实现了三个UnmarshalJSON和一个MarshalJSON函数。三个UnmarshalJSON函数的返回值类型分别是*ReplicatedDevices,*ReplicatedResource,*TimeSlicing
resources.go
1 |
|