mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 19:31:44 +00:00
Merge pull request #83090 from Klaven/rm_validator_errors
Removal of kubernetes error dependencies
This commit is contained in:
commit
c4108c9b4a
@ -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...)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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",
|
||||
],
|
||||
|
@ -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 {
|
||||
|
@ -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)}
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -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 {
|
||||
|
@ -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.
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -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...)
|
||||
}
|
||||
if len(warn) != 0 {
|
||||
warns = append(warns, warn...)
|
||||
}
|
||||
}
|
||||
return errorsutil.NewAggregate(warns), errorsutil.NewAggregate(errs)
|
||||
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},
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user