Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
dacec687
Commit
dacec687
authored
Nov 12, 2016
by
Lucas Käldström
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add a reporter to the system verification check
parent
35094195
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
96 additions
and
51 deletions
+96
-51
e2e_node_suite_test.go
test/e2e_node/e2e_node_suite_test.go
+1
-1
BUILD
test/e2e_node/system/BUILD
+1
-1
cgroup_validator.go
test/e2e_node/system/cgroup_validator.go
+5
-3
cgroup_validator_test.go
test/e2e_node/system/cgroup_validator_test.go
+3
-1
docker_validator.go
test/e2e_node/system/docker_validator.go
+9
-7
docker_validator_test.go
test/e2e_node/system/docker_validator_test.go
+3
-1
kernel_validator.go
test/e2e_node/system/kernel_validator.go
+8
-7
kernel_validator_test.go
test/e2e_node/system/kernel_validator_test.go
+9
-3
os_validator.go
test/e2e_node/system/os_validator.go
+10
-8
os_validator_test.go
test/e2e_node/system/os_validator_test.go
+3
-1
report.go
test/e2e_node/system/report.go
+26
-10
validators.go
test/e2e_node/system/validators.go
+18
-8
No files found.
test/e2e_node/e2e_node_suite_test.go
View file @
dacec687
...
@@ -93,7 +93,7 @@ func TestE2eNode(t *testing.T) {
...
@@ -93,7 +93,7 @@ func TestE2eNode(t *testing.T) {
glog
.
Exitf
(
"chroot %q failed: %v"
,
rootfs
,
err
)
glog
.
Exitf
(
"chroot %q failed: %v"
,
rootfs
,
err
)
}
}
}
}
if
err
:=
system
.
Validate
();
err
!=
nil
{
if
err
:=
system
.
Validate
Default
();
err
!=
nil
{
glog
.
Exitf
(
"system validation failed: %v"
,
err
)
glog
.
Exitf
(
"system validation failed: %v"
,
err
)
}
}
return
return
...
...
test/e2e_node/system/BUILD
View file @
dacec687
...
@@ -17,8 +17,8 @@ go_library(
...
@@ -17,8 +17,8 @@ go_library(
"docker_validator.go",
"docker_validator.go",
"kernel_validator.go",
"kernel_validator.go",
"os_validator.go",
"os_validator.go",
"report.go",
"types.go",
"types.go",
"util.go",
"validators.go",
"validators.go",
],
],
tags = ["automanaged"],
tags = ["automanaged"],
...
...
test/e2e_node/system/cgroup_validator.go
View file @
dacec687
...
@@ -25,7 +25,9 @@ import (
...
@@ -25,7 +25,9 @@ import (
var
_
Validator
=
&
CgroupsValidator
{}
var
_
Validator
=
&
CgroupsValidator
{}
type
CgroupsValidator
struct
{}
type
CgroupsValidator
struct
{
Reporter
Reporter
}
func
(
c
*
CgroupsValidator
)
Name
()
string
{
func
(
c
*
CgroupsValidator
)
Name
()
string
{
return
"cgroups"
return
"cgroups"
...
@@ -55,9 +57,9 @@ func (c *CgroupsValidator) validateCgroupSubsystems(cgroupSpec, subsystems []str
...
@@ -55,9 +57,9 @@ func (c *CgroupsValidator) validateCgroupSubsystems(cgroupSpec, subsystems []str
}
}
item
:=
cgroupsConfigPrefix
+
strings
.
ToUpper
(
cgroup
)
item
:=
cgroupsConfigPrefix
+
strings
.
ToUpper
(
cgroup
)
if
found
{
if
found
{
r
eport
(
item
,
"enabled"
,
good
)
c
.
Reporter
.
R
eport
(
item
,
"enabled"
,
good
)
}
else
{
}
else
{
r
eport
(
item
,
"missing"
,
bad
)
c
.
Reporter
.
R
eport
(
item
,
"missing"
,
bad
)
missing
=
append
(
missing
,
cgroup
)
missing
=
append
(
missing
,
cgroup
)
}
}
}
}
...
...
test/e2e_node/system/cgroup_validator_test.go
View file @
dacec687
...
@@ -23,7 +23,9 @@ import (
...
@@ -23,7 +23,9 @@ import (
)
)
func
TestValidateCgroupSubsystem
(
t
*
testing
.
T
)
{
func
TestValidateCgroupSubsystem
(
t
*
testing
.
T
)
{
v
:=
&
CgroupsValidator
{}
v
:=
&
CgroupsValidator
{
Reporter
:
DefaultReporter
,
}
cgroupSpec
:=
[]
string
{
"system1"
,
"system2"
}
cgroupSpec
:=
[]
string
{
"system1"
,
"system2"
}
for
desc
,
test
:=
range
map
[
string
]
struct
{
for
desc
,
test
:=
range
map
[
string
]
struct
{
cgroupSpec
[]
string
cgroupSpec
[]
string
...
...
test/e2e_node/system/docker_validator.go
View file @
dacec687
...
@@ -28,7 +28,9 @@ import (
...
@@ -28,7 +28,9 @@ import (
var
_
Validator
=
&
DockerValidator
{}
var
_
Validator
=
&
DockerValidator
{}
// DockerValidator validates docker configuration.
// DockerValidator validates docker configuration.
type
DockerValidator
struct
{}
type
DockerValidator
struct
{
Reporter
Reporter
}
func
(
d
*
DockerValidator
)
Name
()
string
{
func
(
d
*
DockerValidator
)
Name
()
string
{
return
"docker"
return
"docker"
...
@@ -63,22 +65,22 @@ func (d *DockerValidator) validateDockerInfo(spec *DockerSpec, info types.Info)
...
@@ -63,22 +65,22 @@ func (d *DockerValidator) validateDockerInfo(spec *DockerSpec, info types.Info)
for
_
,
v
:=
range
spec
.
Version
{
for
_
,
v
:=
range
spec
.
Version
{
r
:=
regexp
.
MustCompile
(
v
)
r
:=
regexp
.
MustCompile
(
v
)
if
r
.
MatchString
(
info
.
ServerVersion
)
{
if
r
.
MatchString
(
info
.
ServerVersion
)
{
r
eport
(
dockerConfigPrefix
+
"VERSION"
,
info
.
ServerVersion
,
good
)
d
.
Reporter
.
R
eport
(
dockerConfigPrefix
+
"VERSION"
,
info
.
ServerVersion
,
good
)
matched
=
true
matched
=
true
}
}
}
}
if
!
matched
{
if
!
matched
{
r
eport
(
dockerConfigPrefix
+
"VERSION"
,
info
.
ServerVersion
,
bad
)
d
.
Reporter
.
R
eport
(
dockerConfigPrefix
+
"VERSION"
,
info
.
ServerVersion
,
bad
)
return
fmt
.
Errorf
(
"unsupported docker version: %s"
,
info
.
ServerVersion
)
return
fmt
.
Errorf
(
"unsupported docker version: %s"
,
info
.
ServerVersion
)
}
}
// Validate graph driver.
// Validate graph driver.
item
:=
dockerConfigPrefix
+
"GRAPH_DRIVER"
item
:=
dockerConfigPrefix
+
"GRAPH_DRIVER"
for
_
,
d
:=
range
spec
.
GraphDriver
{
for
_
,
g
d
:=
range
spec
.
GraphDriver
{
if
info
.
Driver
==
d
{
if
info
.
Driver
==
g
d
{
r
eport
(
item
,
info
.
Driver
,
good
)
d
.
Reporter
.
R
eport
(
item
,
info
.
Driver
,
good
)
return
nil
return
nil
}
}
}
}
r
eport
(
item
,
info
.
Driver
,
bad
)
d
.
Reporter
.
R
eport
(
item
,
info
.
Driver
,
bad
)
return
fmt
.
Errorf
(
"unsupported graph driver: %s"
,
info
.
Driver
)
return
fmt
.
Errorf
(
"unsupported graph driver: %s"
,
info
.
Driver
)
}
}
test/e2e_node/system/docker_validator_test.go
View file @
dacec687
...
@@ -24,7 +24,9 @@ import (
...
@@ -24,7 +24,9 @@ import (
)
)
func
TestValidateDockerInfo
(
t
*
testing
.
T
)
{
func
TestValidateDockerInfo
(
t
*
testing
.
T
)
{
v
:=
&
DockerValidator
{}
v
:=
&
DockerValidator
{
Reporter
:
DefaultReporter
,
}
spec
:=
&
DockerSpec
{
spec
:=
&
DockerSpec
{
Version
:
[]
string
{
`1\.(9|\d{2,})\..*`
},
Version
:
[]
string
{
`1\.(9|\d{2,})\..*`
},
GraphDriver
:
[]
string
{
"driver_1"
,
"driver_2"
},
GraphDriver
:
[]
string
{
"driver_1"
,
"driver_2"
},
...
...
test/e2e_node/system/kernel_validator.go
View file @
dacec687
...
@@ -39,6 +39,7 @@ var _ Validator = &KernelValidator{}
...
@@ -39,6 +39,7 @@ var _ Validator = &KernelValidator{}
// and kernel configuration.
// and kernel configuration.
type
KernelValidator
struct
{
type
KernelValidator
struct
{
kernelRelease
string
kernelRelease
string
Reporter
Reporter
}
}
func
(
k
*
KernelValidator
)
Name
()
string
{
func
(
k
*
KernelValidator
)
Name
()
string
{
...
@@ -60,11 +61,11 @@ const (
...
@@ -60,11 +61,11 @@ const (
)
)
func
(
k
*
KernelValidator
)
Validate
(
spec
SysSpec
)
error
{
func
(
k
*
KernelValidator
)
Validate
(
spec
SysSpec
)
error
{
out
,
err
:=
exec
.
Command
(
"uname"
,
"-r"
)
.
CombinedOutput
()
release
,
err
:=
exec
.
Command
(
"uname"
,
"-r"
)
.
CombinedOutput
()
if
err
!=
nil
{
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to get kernel release: %v"
,
err
)
return
fmt
.
Errorf
(
"failed to get kernel release: %v"
,
err
)
}
}
k
.
kernelRelease
=
strings
.
TrimSpace
(
string
(
out
))
k
.
kernelRelease
=
strings
.
TrimSpace
(
string
(
release
))
var
errs
[]
error
var
errs
[]
error
errs
=
append
(
errs
,
k
.
validateKernelVersion
(
spec
.
KernelSpec
))
errs
=
append
(
errs
,
k
.
validateKernelVersion
(
spec
.
KernelSpec
))
errs
=
append
(
errs
,
k
.
validateKernelConfig
(
spec
.
KernelSpec
))
errs
=
append
(
errs
,
k
.
validateKernelConfig
(
spec
.
KernelSpec
))
...
@@ -78,11 +79,11 @@ func (k *KernelValidator) validateKernelVersion(kSpec KernelSpec) error {
...
@@ -78,11 +79,11 @@ func (k *KernelValidator) validateKernelVersion(kSpec KernelSpec) error {
for
_
,
versionRegexp
:=
range
versionRegexps
{
for
_
,
versionRegexp
:=
range
versionRegexps
{
r
:=
regexp
.
MustCompile
(
versionRegexp
)
r
:=
regexp
.
MustCompile
(
versionRegexp
)
if
r
.
MatchString
(
k
.
kernelRelease
)
{
if
r
.
MatchString
(
k
.
kernelRelease
)
{
r
eport
(
"KERNEL_VERSION"
,
k
.
kernelRelease
,
good
)
k
.
Reporter
.
R
eport
(
"KERNEL_VERSION"
,
k
.
kernelRelease
,
good
)
return
nil
return
nil
}
}
}
}
r
eport
(
"KERNEL_VERSION"
,
k
.
kernelRelease
,
bad
)
k
.
Reporter
.
R
eport
(
"KERNEL_VERSION"
,
k
.
kernelRelease
,
bad
)
return
fmt
.
Errorf
(
"unsupported kernel release: %s"
,
k
.
kernelRelease
)
return
fmt
.
Errorf
(
"unsupported kernel release: %s"
,
k
.
kernelRelease
)
}
}
...
@@ -101,7 +102,7 @@ func (k *KernelValidator) validateCachedKernelConfig(allConfig map[string]kConfi
...
@@ -101,7 +102,7 @@ func (k *KernelValidator) validateCachedKernelConfig(allConfig map[string]kConfi
badConfigs
:=
[]
string
{}
badConfigs
:=
[]
string
{}
// reportAndRecord is a helper function to record bad config when
// reportAndRecord is a helper function to record bad config when
// report.
// report.
reportAndRecord
:=
func
(
name
,
msg
,
desc
string
,
result
r
esultType
)
{
reportAndRecord
:=
func
(
name
,
msg
,
desc
string
,
result
ValidationR
esultType
)
{
if
result
==
bad
{
if
result
==
bad
{
badConfigs
=
append
(
badConfigs
,
name
)
badConfigs
=
append
(
badConfigs
,
name
)
}
}
...
@@ -109,7 +110,7 @@ func (k *KernelValidator) validateCachedKernelConfig(allConfig map[string]kConfi
...
@@ -109,7 +110,7 @@ func (k *KernelValidator) validateCachedKernelConfig(allConfig map[string]kConfi
if
result
!=
good
&&
desc
!=
""
{
if
result
!=
good
&&
desc
!=
""
{
msg
=
msg
+
" - "
+
desc
msg
=
msg
+
" - "
+
desc
}
}
r
eport
(
name
,
msg
,
result
)
k
.
Reporter
.
R
eport
(
name
,
msg
,
result
)
}
}
const
(
const
(
required
=
iota
required
=
iota
...
@@ -117,7 +118,7 @@ func (k *KernelValidator) validateCachedKernelConfig(allConfig map[string]kConfi
...
@@ -117,7 +118,7 @@ func (k *KernelValidator) validateCachedKernelConfig(allConfig map[string]kConfi
forbidden
forbidden
)
)
validateOpt
:=
func
(
config
KernelConfig
,
expect
int
)
{
validateOpt
:=
func
(
config
KernelConfig
,
expect
int
)
{
var
found
,
missing
r
esultType
var
found
,
missing
ValidationR
esultType
switch
expect
{
switch
expect
{
case
required
:
case
required
:
found
,
missing
=
good
,
bad
found
,
missing
=
good
,
bad
...
...
test/e2e_node/system/kernel_validator_test.go
View file @
dacec687
...
@@ -24,7 +24,9 @@ import (
...
@@ -24,7 +24,9 @@ import (
)
)
func
TestValidateKernelVersion
(
t
*
testing
.
T
)
{
func
TestValidateKernelVersion
(
t
*
testing
.
T
)
{
v
:=
&
KernelValidator
{}
v
:=
&
KernelValidator
{
Reporter
:
DefaultReporter
,
}
// Currently, testRegex is align with DefaultSysSpec.KernelVersion, but in the future
// Currently, testRegex is align with DefaultSysSpec.KernelVersion, but in the future
// they may be different.
// they may be different.
// This is fine, because the test mainly tests the kernel version validation logic,
// This is fine, because the test mainly tests the kernel version validation logic,
...
@@ -69,7 +71,9 @@ func TestValidateKernelVersion(t *testing.T) {
...
@@ -69,7 +71,9 @@ func TestValidateKernelVersion(t *testing.T) {
}
}
func
TestValidateCachedKernelConfig
(
t
*
testing
.
T
)
{
func
TestValidateCachedKernelConfig
(
t
*
testing
.
T
)
{
v
:=
&
KernelValidator
{}
v
:=
&
KernelValidator
{
Reporter
:
DefaultReporter
,
}
testKernelSpec
:=
KernelSpec
{
testKernelSpec
:=
KernelSpec
{
Required
:
[]
KernelConfig
{{
Name
:
"REQUIRED_1"
},
{
Name
:
"REQUIRED_2"
,
Aliases
:
[]
string
{
"ALIASE_REQUIRED_2"
}}},
Required
:
[]
KernelConfig
{{
Name
:
"REQUIRED_1"
},
{
Name
:
"REQUIRED_2"
,
Aliases
:
[]
string
{
"ALIASE_REQUIRED_2"
}}},
Optional
:
[]
KernelConfig
{{
Name
:
"OPTIONAL_1"
},
{
Name
:
"OPTIONAL_2"
}},
Optional
:
[]
KernelConfig
{{
Name
:
"OPTIONAL_1"
},
{
Name
:
"OPTIONAL_2"
}},
...
@@ -184,7 +188,9 @@ CONFIG_3=n`
...
@@ -184,7 +188,9 @@ CONFIG_3=n`
"CONFIG_2"
:
asModule
,
"CONFIG_2"
:
asModule
,
"CONFIG_3"
:
leftOut
,
"CONFIG_3"
:
leftOut
,
}
}
v
:=
&
KernelValidator
{}
v
:=
&
KernelValidator
{
Reporter
:
DefaultReporter
,
}
got
,
err
:=
v
.
parseKernelConfig
(
bytes
.
NewReader
([]
byte
(
config
)))
got
,
err
:=
v
.
parseKernelConfig
(
bytes
.
NewReader
([]
byte
(
config
)))
assert
.
Nil
(
t
,
err
,
"Expect error not to occur when parse kernel configuration %q"
,
config
)
assert
.
Nil
(
t
,
err
,
"Expect error not to occur when parse kernel configuration %q"
,
config
)
assert
.
Equal
(
t
,
expected
,
got
)
assert
.
Equal
(
t
,
expected
,
got
)
...
...
test/e2e_node/system/os_validator.go
View file @
dacec687
...
@@ -24,25 +24,27 @@ import (
...
@@ -24,25 +24,27 @@ import (
var
_
Validator
=
&
OSValidator
{}
var
_
Validator
=
&
OSValidator
{}
type
OSValidator
struct
{}
type
OSValidator
struct
{
Reporter
Reporter
}
func
(
c
*
OSValidator
)
Name
()
string
{
func
(
o
*
OSValidator
)
Name
()
string
{
return
"os"
return
"os"
}
}
func
(
c
*
OSValidator
)
Validate
(
spec
SysSpec
)
error
{
func
(
o
*
OSValidator
)
Validate
(
spec
SysSpec
)
error
{
o
ut
,
err
:=
exec
.
Command
(
"uname"
)
.
CombinedOutput
()
o
s
,
err
:=
exec
.
Command
(
"uname"
)
.
CombinedOutput
()
if
err
!=
nil
{
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to get os name: %v"
,
err
)
return
fmt
.
Errorf
(
"failed to get os name: %v"
,
err
)
}
}
return
c
.
validateOS
(
strings
.
TrimSpace
(
string
(
out
)),
spec
.
OS
)
return
o
.
validateOS
(
strings
.
TrimSpace
(
string
(
os
)),
spec
.
OS
)
}
}
func
(
c
*
OSValidator
)
validateOS
(
os
,
specOS
string
)
error
{
func
(
o
*
OSValidator
)
validateOS
(
os
,
specOS
string
)
error
{
if
os
!=
specOS
{
if
os
!=
specOS
{
r
eport
(
"OS"
,
os
,
bad
)
o
.
Reporter
.
R
eport
(
"OS"
,
os
,
bad
)
return
fmt
.
Errorf
(
"unsupported operating system: %s"
,
os
)
return
fmt
.
Errorf
(
"unsupported operating system: %s"
,
os
)
}
}
r
eport
(
"OS"
,
os
,
good
)
o
.
Reporter
.
R
eport
(
"OS"
,
os
,
good
)
return
nil
return
nil
}
}
test/e2e_node/system/os_validator_test.go
View file @
dacec687
...
@@ -23,7 +23,9 @@ import (
...
@@ -23,7 +23,9 @@ import (
)
)
func
TestValidateOS
(
t
*
testing
.
T
)
{
func
TestValidateOS
(
t
*
testing
.
T
)
{
v
:=
&
OSValidator
{}
v
:=
&
OSValidator
{
Reporter
:
DefaultReporter
,
}
specOS
:=
"Linux"
specOS
:=
"Linux"
for
_
,
test
:=
range
[]
struct
{
for
_
,
test
:=
range
[]
struct
{
os
string
os
string
...
...
test/e2e_node/system/
util
.go
→
test/e2e_node/system/
report
.go
View file @
dacec687
...
@@ -18,20 +18,22 @@ package system
...
@@ -18,20 +18,22 @@ package system
import
(
import
(
"fmt"
"fmt"
"io"
"os"
)
)
//
r
esultType is type of the validation result. Different validation results
//
ValidationR
esultType is type of the validation result. Different validation results
// corresponds to different colors.
// corresponds to different colors.
type
resultType
int
type
ValidationResultType
int32
const
(
const
(
good
r
esultType
=
iota
good
ValidationR
esultType
=
iota
bad
bad
warn
warn
)
)
// color is the color of the message.
// color is the color of the message.
type
color
int
type
color
int
32
const
(
const
(
red
color
=
31
red
color
=
31
...
@@ -40,15 +42,19 @@ const (
...
@@ -40,15 +42,19 @@ const (
white
=
37
white
=
37
)
)
func
wrap
(
s
string
,
c
color
)
string
{
func
colorize
(
s
string
,
c
color
)
string
{
return
fmt
.
Sprintf
(
"
\0
33[0;%dm%s
\0
33[0m"
,
c
,
s
)
return
fmt
.
Sprintf
(
"
\0
33[0;%dm%s
\0
33[0m"
,
c
,
s
)
}
}
// report reports "item: r". item is white, and the color of r depends on the
// The default reporter for the system verification test
// result type.
type
StreamReporter
struct
{
func
report
(
item
,
r
string
,
t
resultType
)
{
// The stream that this reporter is writing to
WriteStream
io
.
Writer
}
func
(
dr
*
StreamReporter
)
Report
(
key
,
value
string
,
resultType
ValidationResultType
)
error
{
var
c
color
var
c
color
switch
t
{
switch
resultType
{
case
good
:
case
good
:
c
=
green
c
=
green
case
bad
:
case
bad
:
...
@@ -58,5 +64,15 @@ func report(item, r string, t resultType) {
...
@@ -58,5 +64,15 @@ func report(item, r string, t resultType) {
default
:
default
:
c
=
white
c
=
white
}
}
fmt
.
Printf
(
"%s: %s
\n
"
,
wrap
(
item
,
white
),
wrap
(
r
,
c
))
if
dr
.
WriteStream
==
nil
{
return
fmt
.
Errorf
(
"WriteStream has to be defined for this reporter"
)
}
fmt
.
Fprintf
(
dr
.
WriteStream
,
"%s: %s
\n
"
,
colorize
(
key
,
white
),
colorize
(
value
,
c
))
return
nil
}
// DefaultReporter is the default Reporter
var
DefaultReporter
=
&
StreamReporter
{
WriteStream
:
os
.
Stdout
,
}
}
test/e2e_node/system/validators.go
View file @
dacec687
...
@@ -29,21 +29,31 @@ type Validator interface {
...
@@ -29,21 +29,31 @@ type Validator interface {
Validate
(
SysSpec
)
error
Validate
(
SysSpec
)
error
}
}
// validators are all the validators.
// Reporter is the interface for the reporters for the validators.
var
validators
=
[]
Validator
{
type
Reporter
interface
{
&
OSValidator
{},
// Report reports the results of the system verification
&
KernelValidator
{},
Report
(
string
,
string
,
ValidationResultType
)
error
&
CgroupsValidator
{},
&
DockerValidator
{},
}
}
// Validate uses all validators to validate the system.
// Validate uses all validators to validate the system.
func
Validate
()
error
{
func
Validate
(
spec
SysSpec
,
report
Reporter
)
error
{
var
errs
[]
error
var
errs
[]
error
spec
:=
DefaultSysSpec
// validators are all the validators.
var
validators
=
[]
Validator
{
&
OSValidator
{
Reporter
:
report
},
&
KernelValidator
{
Reporter
:
report
},
&
CgroupsValidator
{
Reporter
:
report
},
&
DockerValidator
{
Reporter
:
report
},
}
for
_
,
v
:=
range
validators
{
for
_
,
v
:=
range
validators
{
glog
.
Infof
(
"Validating %s..."
,
v
.
Name
())
glog
.
Infof
(
"Validating %s..."
,
v
.
Name
())
errs
=
append
(
errs
,
v
.
Validate
(
spec
))
errs
=
append
(
errs
,
v
.
Validate
(
spec
))
}
}
return
errors
.
NewAggregate
(
errs
)
return
errors
.
NewAggregate
(
errs
)
}
}
// ValidateDefault uses all default validators to validate the system and writes to stdout.
func
ValidateDefault
()
error
{
return
Validate
(
DefaultSysSpec
,
DefaultReporter
)
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment