跳到主要内容

30.validate

PR #326

First piece ofn actual validation [校验雏形]

在 api 目录下 添加 validate.go 进行校验

func isSupportedManifestVersion(value string) bool {
switch value {
case "v1beta1", "v1beta2":
return true
}
return false
}

func isInvalid(field string, value interface{}) error {
return fmt.Errorf("%s is invalid: '%v'", field, value)
}

func isNotSupported(field string, value interface{}) error {
return fmt.Errorf("%s is not supported: '%v'", field, value)
}

// ValidateManifest tests that the specified ContainerManifest has valid data.
// This includes checking formatting and uniqueness. It also canonicalizes the
// structure by setting default values and implementing any backwards-compatibility
// tricks.
func ValidateManifest(manifest *ContainerManifest) error {
if len(manifest.Version) == 0 {
return isInvalid("ContainerManifest.Version", manifest.Version)
}
if !isSupportedManifestVersion(manifest.Version) {
return isNotSupported("ContainerManifest.Version", manifest.Version)
}
if len(manifest.ID) > 255 || !util.IsDNSSubdomain(manifest.ID) {
return isInvalid("ContainerManifest.ID", manifest.ID)
}
// TODO(thockin): finish validation.
return nil
}

isSupportedManifestVersion(value string) bool:这个函数用于检查输入的版本值是否为支持的版本。如果输入的版本值为 "v1beta1" 或者 "v1beta2",则返回 true,否则返回 false。

isInvalid(field string, value interface{}) error:这个函数用于生成一个表示指定字段无效的错误信息。

isNotSupported(field string, value interface{}) error:这个函数用于生成一个表示指定字段不被支持的错误信息。

ValidateManifest(manifest *ContainerManifest) error:这个函数用于验证输入的 ContainerManifest 对象是否有效。包括以下步骤:

检查 Version 字段是否为空,如果为空,则返回一个表示 "ContainerManifest.Version" 无效的错误。 检查 Version 字段是否为支持的版本,如果不是支持的版本,则返回一个表示 "ContainerManifest.Version" 不被支持的错误。 检查 ID 字段的长度是否超过 255,或者 ID 字段是否为 DNS 子域,如果 ID 字段的长度超过 255 或者 ID 字段不是 DNS 子域,则返回一个表示 "ContainerManifest.ID" 无效的错误。 如果所有的验证都通过,则返回 nil,表示 ContainerManifest 对象有效。

PR #318

kubelet 不再返回 container 信息,而是返回 pod信息

PR #343

Use structured errors during validation [使用结构化 error]