Merge pull request #83090 from Klaven/rm_validator_errors

Removal of kubernetes error dependencies
This commit is contained in:
Kubernetes Prow Robot 2019-10-07 23:35:25 -07:00 committed by GitHub
commit c4108c9b4a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 67 additions and 50 deletions

View File

@ -546,10 +546,10 @@ func (sysver SystemVerificationCheck) Check() (warnings, errorList []error) {
for _, v := range validators {
warn, err := v.Validate(system.DefaultSysSpec)
if err != nil {
errs = append(errs, err)
errs = append(errs, err...)
}
if warn != nil {
warns = append(warns, warn)
warns = append(warns, warn...)
}
}

View File

@ -23,7 +23,6 @@ go_library(
],
importpath = "k8s.io/kubernetes/cmd/kubeadm/app/util/system",
deps = [
"//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library",
"//vendor/github.com/blang/semver:go_default_library",
"//vendor/github.com/pkg/errors:go_default_library",
],

View File

@ -41,12 +41,15 @@ const (
)
// Validate is part of the system.Validator interface.
func (c *CgroupsValidator) Validate(spec SysSpec) (error, error) {
func (c *CgroupsValidator) Validate(spec SysSpec) ([]error, []error) {
subsystems, err := c.getCgroupSubsystems()
if err != nil {
return nil, errors.Wrap(err, "failed to get cgroup subsystems")
return nil, []error{errors.Wrap(err, "failed to get cgroup subsystems")}
}
return nil, c.validateCgroupSubsystems(spec.Cgroups, subsystems)
if err = c.validateCgroupSubsystems(spec.Cgroups, subsystems); err != nil {
return nil, []error{err}
}
return nil, nil
}
func (c *CgroupsValidator) validateCgroupSubsystems(cgroupSpec, subsystems []string) error {

View File

@ -51,7 +51,7 @@ const (
// Validate is part of the system.Validator interface.
// TODO(random-liu): Add more validating items.
func (d *DockerValidator) Validate(spec SysSpec) (error, error) {
func (d *DockerValidator) Validate(spec SysSpec) ([]error, []error) {
if spec.RuntimeSpec.DockerSpec == nil {
// If DockerSpec is not specified, assume current runtime is not
// docker, skip the docker configuration validation.
@ -62,10 +62,10 @@ func (d *DockerValidator) Validate(spec SysSpec) (error, error) {
info := dockerInfo{}
out, err := exec.Command("docker", "info", "--format", "{{json .}}").CombinedOutput()
if err != nil {
return nil, errors.Errorf(`failed executing "docker info --format '{{json .}}'"\noutput: %s\nerror: %v`, string(out), err)
return nil, []error{errors.Errorf(`failed executing "docker info --format '{{json .}}'"\noutput: %s\nerror: %v`, string(out), err)}
}
if err := d.unmarshalDockerInfo(out, &info); err != nil {
return nil, err
return nil, []error{err}
}
// validate the resulted docker info object against the spec
@ -79,7 +79,7 @@ func (d *DockerValidator) unmarshalDockerInfo(b []byte, info *dockerInfo) error
return nil
}
func (d *DockerValidator) validateDockerInfo(spec *DockerSpec, info dockerInfo) (error, error) {
func (d *DockerValidator) validateDockerInfo(spec *DockerSpec, info dockerInfo) ([]error, []error) {
// Validate docker version.
matched := false
for _, v := range spec.Version {
@ -101,10 +101,10 @@ func (d *DockerValidator) validateDockerInfo(spec *DockerSpec, info dockerInfo)
info.ServerVersion,
latestValidatedDockerVersion,
)
return w, nil
return []error{w}, nil
}
d.Reporter.Report(dockerConfigPrefix+"VERSION", info.ServerVersion, bad)
return nil, errors.Errorf("unsupported docker version: %s", info.ServerVersion)
return nil, []error{errors.Errorf("unsupported docker version: %s", info.ServerVersion)}
}
// Validate graph driver.
item := dockerConfigPrefix + "GRAPH_DRIVER"
@ -115,5 +115,5 @@ func (d *DockerValidator) validateDockerInfo(spec *DockerSpec, info dockerInfo)
}
}
d.Reporter.Report(item, info.Driver, bad)
return nil, errors.Errorf("unsupported graph driver: %s", info.Driver)
return nil, []error{errors.Errorf("unsupported graph driver: %s", info.Driver)}
}

View File

@ -30,8 +30,6 @@ import (
"strings"
"github.com/pkg/errors"
errorsutil "k8s.io/apimachinery/pkg/util/errors"
)
var _ Validator = &KernelValidator{}
@ -63,20 +61,24 @@ const (
)
// Validate is part of the system.Validator interface.
func (k *KernelValidator) Validate(spec SysSpec) (error, error) {
func (k *KernelValidator) Validate(spec SysSpec) ([]error, []error) {
helper := KernelValidatorHelperImpl{}
release, err := helper.GetKernelReleaseVersion()
if err != nil {
return nil, errors.Wrap(err, "failed to get kernel release")
return nil, []error{errors.Wrap(err, "failed to get kernel release")}
}
k.kernelRelease = release
var errs []error
errs = append(errs, k.validateKernelVersion(spec.KernelSpec))
if err = k.validateKernelVersion(spec.KernelSpec); err != nil {
errs = append(errs, err)
}
// only validate kernel config when necessary (currently no kernel config for windows)
if len(spec.KernelSpec.Required) > 0 || len(spec.KernelSpec.Forbidden) > 0 || len(spec.KernelSpec.Optional) > 0 {
errs = append(errs, k.validateKernelConfig(spec.KernelSpec))
if err = k.validateKernelConfig(spec.KernelSpec); err != nil {
errs = append(errs, err)
}
return nil, errorsutil.NewAggregate(errs)
}
return nil, errs
}
// validateKernelVersion validates the kernel version.

View File

@ -36,12 +36,15 @@ func (o *OSValidator) Name() string {
}
// Validate is part of the system.Validator interface.
func (o *OSValidator) Validate(spec SysSpec) (error, error) {
func (o *OSValidator) Validate(spec SysSpec) ([]error, []error) {
os, err := exec.Command("uname").CombinedOutput()
if err != nil {
return nil, errors.Wrap(err, "failed to get os name")
return nil, []error{errors.Wrap(err, "failed to get os name")}
}
return nil, o.validateOS(strings.TrimSpace(string(os)), spec.OS)
if err = o.validateOS(strings.TrimSpace(string(os)), spec.OS); err != nil {
return nil, []error{err}
}
return nil, nil
}
func (o *OSValidator) validateOS(os, specOS string) error {

View File

@ -24,8 +24,6 @@ import (
"github.com/blang/semver"
"github.com/pkg/errors"
errorsutil "k8s.io/apimachinery/pkg/util/errors"
)
// semVerDotsCount is the number of dots in a valid semantic version.
@ -92,22 +90,22 @@ func (validator *packageValidator) Name() string {
// Validate checks packages and their versions against the spec using the
// package manager on the running machine, and returns an error on any
// package/version mismatch.
func (validator *packageValidator) Validate(spec SysSpec) (error, error) {
func (validator *packageValidator) Validate(spec SysSpec) ([]error, []error) {
if len(spec.PackageSpecs) == 0 {
return nil, nil
}
var err error
if validator.kernelRelease, err = getKernelRelease(); err != nil {
return nil, err
return nil, []error{err}
}
if validator.osDistro, err = getOSDistro(); err != nil {
return nil, err
return nil, []error{err}
}
manager, err := newPackageManager()
if err != nil {
return nil, err
return nil, []error{err}
}
specs := applyPackageSpecOverride(spec.PackageSpecs, spec.PackageSpecOverrides, validator.osDistro)
return validator.validate(specs, manager)
@ -115,7 +113,7 @@ func (validator *packageValidator) Validate(spec SysSpec) (error, error) {
// Validate checks packages and their versions against the packageSpecs using
// the packageManager, and returns an error on any package/version mismatch.
func (validator *packageValidator) validate(packageSpecs []PackageSpec, manager packageManager) (error, error) {
func (validator *packageValidator) validate(packageSpecs []PackageSpec, manager packageManager) ([]error, []error) {
var errs []error
for _, spec := range packageSpecs {
// Substitute variables in package name.
@ -155,7 +153,7 @@ func (validator *packageValidator) validate(packageSpecs []PackageSpec, manager
validator.reporter.Report(nameWithVerRange, version, bad)
}
}
return nil, errorsutil.NewAggregate(errs)
return nil, errs
}
// getKernelRelease returns the kernel release of the local machine.

View File

@ -185,7 +185,7 @@ func TestValidatePackageVersion(t *testing.T) {
for _, test := range []struct {
desc string
specs []PackageSpec
err error
errs []error
}{
{
desc: "all packages meet the spec",
@ -200,14 +200,18 @@ func TestValidatePackageVersion(t *testing.T) {
{Name: "foo", VersionRange: ">=1.0"},
{Name: "bar", VersionRange: ">=3.0"},
},
err: errors.New("package \"bar 2.1.0\" does not meet the spec \"bar (>=3.0)\""),
errs: []error{
errors.New("package \"bar 2.1.0\" does not meet the spec \"bar (>=3.0)\""),
},
},
{
desc: "package not installed",
specs: []PackageSpec{
{Name: "baz"},
},
err: errors.New("package \"baz\" does not exist"),
errs: []error{
errors.New("package \"baz\" does not exist"),
},
},
{
desc: "use variable in package name",
@ -217,15 +221,21 @@ func TestValidatePackageVersion(t *testing.T) {
},
} {
t.Run(test.desc, func(t *testing.T) {
_, err := v.validate(test.specs, manager)
if test.err == nil && err != nil {
t.Errorf("%s: v.validate(): err = %s", test.desc, err)
_, errs := v.validate(test.specs, manager)
if len(test.errs) == 0 && len(errs) > 0 {
t.Errorf("%s: v.validate(): err = %s", test.desc, errs)
}
if test.err != nil {
if err == nil {
if len(test.errs) > 0 {
if len(errs) == 0 {
t.Errorf("%s: v.validate() is expected to fail.", test.desc)
} else if test.err.Error() != err.Error() {
t.Errorf("%s: v.validate(): err = %q, want = %q", test.desc, err, test.err)
} else if len(errs) != len(test.errs) {
t.Errorf("%s: v.validate(): errs = %q, want = %q", test.desc, errs, test.errs)
} else {
for i, v := range test.errs {
if v.Error() != errs[i].Error() {
t.Errorf("%s: v.validate(): errs = %q, want = %q", test.desc, errs, test.errs)
}
}
}
}
})

View File

@ -18,8 +18,6 @@ package system
import (
"fmt"
errorsutil "k8s.io/apimachinery/pkg/util/errors"
)
// Validator is the interface for all validators.
@ -27,7 +25,7 @@ type Validator interface {
// Name is the name of the validator.
Name() string
// Validate is the validate function.
Validate(SysSpec) (error, error)
Validate(SysSpec) ([]error, []error)
}
// Reporter is the interface for the reporters for the validators.
@ -37,21 +35,25 @@ type Reporter interface {
}
// Validate uses validators to validate the system and returns a warning or error.
func Validate(spec SysSpec, validators []Validator) (error, error) {
func Validate(spec SysSpec, validators []Validator) ([]error, []error) {
var errs []error
var warns []error
for _, v := range validators {
fmt.Printf("Validating %s...\n", v.Name())
warn, err := v.Validate(spec)
errs = append(errs, err)
warns = append(warns, warn)
if len(err) != 0 {
errs = append(errs, err...)
}
return errorsutil.NewAggregate(warns), errorsutil.NewAggregate(errs)
if len(warn) != 0 {
warns = append(warns, warn...)
}
}
return warns, errs
}
// ValidateSpec uses all default validators to validate the system and writes to stdout.
func ValidateSpec(spec SysSpec, runtime string) (error, error) {
func ValidateSpec(spec SysSpec, runtime string) ([]error, []error) {
// OS-level validators.
var osValidators = []Validator{
&OSValidator{Reporter: DefaultReporter},

View File

@ -125,7 +125,7 @@ func TestE2eNode(t *testing.T) {
klog.Exitf("chroot %q failed: %v", rootfs, err)
}
}
if _, err := system.ValidateSpec(*spec, framework.TestContext.ContainerRuntime); err != nil {
if _, err := system.ValidateSpec(*spec, framework.TestContext.ContainerRuntime); len(err) != 0 {
klog.Exitf("system validation failed: %v", err)
}
return