mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 11:21:47 +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 {
|
for _, v := range validators {
|
||||||
warn, err := v.Validate(system.DefaultSysSpec)
|
warn, err := v.Validate(system.DefaultSysSpec)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errs = append(errs, err)
|
errs = append(errs, err...)
|
||||||
}
|
}
|
||||||
if warn != nil {
|
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",
|
importpath = "k8s.io/kubernetes/cmd/kubeadm/app/util/system",
|
||||||
deps = [
|
deps = [
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library",
|
|
||||||
"//vendor/github.com/blang/semver:go_default_library",
|
"//vendor/github.com/blang/semver:go_default_library",
|
||||||
"//vendor/github.com/pkg/errors:go_default_library",
|
"//vendor/github.com/pkg/errors:go_default_library",
|
||||||
],
|
],
|
||||||
|
@ -41,12 +41,15 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Validate is part of the system.Validator interface.
|
// 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()
|
subsystems, err := c.getCgroupSubsystems()
|
||||||
if err != nil {
|
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 {
|
func (c *CgroupsValidator) validateCgroupSubsystems(cgroupSpec, subsystems []string) error {
|
||||||
|
@ -51,7 +51,7 @@ const (
|
|||||||
|
|
||||||
// Validate is part of the system.Validator interface.
|
// Validate is part of the system.Validator interface.
|
||||||
// TODO(random-liu): Add more validating items.
|
// 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 spec.RuntimeSpec.DockerSpec == nil {
|
||||||
// If DockerSpec is not specified, assume current runtime is not
|
// If DockerSpec is not specified, assume current runtime is not
|
||||||
// docker, skip the docker configuration validation.
|
// docker, skip the docker configuration validation.
|
||||||
@ -62,10 +62,10 @@ func (d *DockerValidator) Validate(spec SysSpec) (error, error) {
|
|||||||
info := dockerInfo{}
|
info := dockerInfo{}
|
||||||
out, err := exec.Command("docker", "info", "--format", "{{json .}}").CombinedOutput()
|
out, err := exec.Command("docker", "info", "--format", "{{json .}}").CombinedOutput()
|
||||||
if err != nil {
|
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 {
|
if err := d.unmarshalDockerInfo(out, &info); err != nil {
|
||||||
return nil, err
|
return nil, []error{err}
|
||||||
}
|
}
|
||||||
|
|
||||||
// validate the resulted docker info object against the spec
|
// validate the resulted docker info object against the spec
|
||||||
@ -79,7 +79,7 @@ func (d *DockerValidator) unmarshalDockerInfo(b []byte, info *dockerInfo) error
|
|||||||
return nil
|
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.
|
// Validate docker version.
|
||||||
matched := false
|
matched := false
|
||||||
for _, v := range spec.Version {
|
for _, v := range spec.Version {
|
||||||
@ -101,10 +101,10 @@ func (d *DockerValidator) validateDockerInfo(spec *DockerSpec, info dockerInfo)
|
|||||||
info.ServerVersion,
|
info.ServerVersion,
|
||||||
latestValidatedDockerVersion,
|
latestValidatedDockerVersion,
|
||||||
)
|
)
|
||||||
return w, nil
|
return []error{w}, nil
|
||||||
}
|
}
|
||||||
d.Reporter.Report(dockerConfigPrefix+"VERSION", info.ServerVersion, bad)
|
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.
|
// Validate graph driver.
|
||||||
item := dockerConfigPrefix + "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)
|
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"
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
errorsutil "k8s.io/apimachinery/pkg/util/errors"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ Validator = &KernelValidator{}
|
var _ Validator = &KernelValidator{}
|
||||||
@ -63,20 +61,24 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Validate is part of the system.Validator interface.
|
// 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{}
|
helper := KernelValidatorHelperImpl{}
|
||||||
release, err := helper.GetKernelReleaseVersion()
|
release, err := helper.GetKernelReleaseVersion()
|
||||||
if err != nil {
|
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
|
k.kernelRelease = release
|
||||||
var errs []error
|
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)
|
// 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 {
|
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.
|
// validateKernelVersion validates the kernel version.
|
||||||
|
@ -36,12 +36,15 @@ func (o *OSValidator) Name() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Validate is part of the system.Validator interface.
|
// 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()
|
os, err := exec.Command("uname").CombinedOutput()
|
||||||
if err != nil {
|
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 {
|
func (o *OSValidator) validateOS(os, specOS string) error {
|
||||||
|
@ -24,8 +24,6 @@ import (
|
|||||||
|
|
||||||
"github.com/blang/semver"
|
"github.com/blang/semver"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
errorsutil "k8s.io/apimachinery/pkg/util/errors"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// semVerDotsCount is the number of dots in a valid semantic version.
|
// 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
|
// Validate checks packages and their versions against the spec using the
|
||||||
// package manager on the running machine, and returns an error on any
|
// package manager on the running machine, and returns an error on any
|
||||||
// package/version mismatch.
|
// package/version mismatch.
|
||||||
func (validator *packageValidator) Validate(spec SysSpec) (error, error) {
|
func (validator *packageValidator) Validate(spec SysSpec) ([]error, []error) {
|
||||||
if len(spec.PackageSpecs) == 0 {
|
if len(spec.PackageSpecs) == 0 {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
if validator.kernelRelease, err = getKernelRelease(); err != nil {
|
if validator.kernelRelease, err = getKernelRelease(); err != nil {
|
||||||
return nil, err
|
return nil, []error{err}
|
||||||
}
|
}
|
||||||
if validator.osDistro, err = getOSDistro(); err != nil {
|
if validator.osDistro, err = getOSDistro(); err != nil {
|
||||||
return nil, err
|
return nil, []error{err}
|
||||||
}
|
}
|
||||||
|
|
||||||
manager, err := newPackageManager()
|
manager, err := newPackageManager()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, []error{err}
|
||||||
}
|
}
|
||||||
specs := applyPackageSpecOverride(spec.PackageSpecs, spec.PackageSpecOverrides, validator.osDistro)
|
specs := applyPackageSpecOverride(spec.PackageSpecs, spec.PackageSpecOverrides, validator.osDistro)
|
||||||
return validator.validate(specs, manager)
|
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
|
// Validate checks packages and their versions against the packageSpecs using
|
||||||
// the packageManager, and returns an error on any package/version mismatch.
|
// 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
|
var errs []error
|
||||||
for _, spec := range packageSpecs {
|
for _, spec := range packageSpecs {
|
||||||
// Substitute variables in package name.
|
// Substitute variables in package name.
|
||||||
@ -155,7 +153,7 @@ func (validator *packageValidator) validate(packageSpecs []PackageSpec, manager
|
|||||||
validator.reporter.Report(nameWithVerRange, version, bad)
|
validator.reporter.Report(nameWithVerRange, version, bad)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil, errorsutil.NewAggregate(errs)
|
return nil, errs
|
||||||
}
|
}
|
||||||
|
|
||||||
// getKernelRelease returns the kernel release of the local machine.
|
// getKernelRelease returns the kernel release of the local machine.
|
||||||
|
@ -185,7 +185,7 @@ func TestValidatePackageVersion(t *testing.T) {
|
|||||||
for _, test := range []struct {
|
for _, test := range []struct {
|
||||||
desc string
|
desc string
|
||||||
specs []PackageSpec
|
specs []PackageSpec
|
||||||
err error
|
errs []error
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
desc: "all packages meet the spec",
|
desc: "all packages meet the spec",
|
||||||
@ -200,14 +200,18 @@ func TestValidatePackageVersion(t *testing.T) {
|
|||||||
{Name: "foo", VersionRange: ">=1.0"},
|
{Name: "foo", VersionRange: ">=1.0"},
|
||||||
{Name: "bar", VersionRange: ">=3.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",
|
desc: "package not installed",
|
||||||
specs: []PackageSpec{
|
specs: []PackageSpec{
|
||||||
{Name: "baz"},
|
{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",
|
desc: "use variable in package name",
|
||||||
@ -217,15 +221,21 @@ func TestValidatePackageVersion(t *testing.T) {
|
|||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(test.desc, func(t *testing.T) {
|
t.Run(test.desc, func(t *testing.T) {
|
||||||
_, err := v.validate(test.specs, manager)
|
_, errs := v.validate(test.specs, manager)
|
||||||
if test.err == nil && err != nil {
|
if len(test.errs) == 0 && len(errs) > 0 {
|
||||||
t.Errorf("%s: v.validate(): err = %s", test.desc, err)
|
t.Errorf("%s: v.validate(): err = %s", test.desc, errs)
|
||||||
}
|
}
|
||||||
if test.err != nil {
|
if len(test.errs) > 0 {
|
||||||
if err == nil {
|
if len(errs) == 0 {
|
||||||
t.Errorf("%s: v.validate() is expected to fail.", test.desc)
|
t.Errorf("%s: v.validate() is expected to fail.", test.desc)
|
||||||
} else if test.err.Error() != err.Error() {
|
} else if len(errs) != len(test.errs) {
|
||||||
t.Errorf("%s: v.validate(): err = %q, want = %q", test.desc, err, test.err)
|
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 (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
errorsutil "k8s.io/apimachinery/pkg/util/errors"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Validator is the interface for all validators.
|
// Validator is the interface for all validators.
|
||||||
@ -27,7 +25,7 @@ type Validator interface {
|
|||||||
// Name is the name of the validator.
|
// Name is the name of the validator.
|
||||||
Name() string
|
Name() string
|
||||||
// Validate is the validate function.
|
// Validate is the validate function.
|
||||||
Validate(SysSpec) (error, error)
|
Validate(SysSpec) ([]error, []error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reporter is the interface for the reporters for the validators.
|
// 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.
|
// 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 errs []error
|
||||||
var warns []error
|
var warns []error
|
||||||
|
|
||||||
for _, v := range validators {
|
for _, v := range validators {
|
||||||
fmt.Printf("Validating %s...\n", v.Name())
|
fmt.Printf("Validating %s...\n", v.Name())
|
||||||
warn, err := v.Validate(spec)
|
warn, err := v.Validate(spec)
|
||||||
errs = append(errs, err)
|
if len(err) != 0 {
|
||||||
warns = append(warns, warn)
|
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.
|
// 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.
|
// OS-level validators.
|
||||||
var osValidators = []Validator{
|
var osValidators = []Validator{
|
||||||
&OSValidator{Reporter: DefaultReporter},
|
&OSValidator{Reporter: DefaultReporter},
|
||||||
|
@ -125,7 +125,7 @@ func TestE2eNode(t *testing.T) {
|
|||||||
klog.Exitf("chroot %q failed: %v", rootfs, err)
|
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)
|
klog.Exitf("system validation failed: %v", err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
Loading…
Reference in New Issue
Block a user