mirror of
https://github.com/replicatedhq/troubleshoot.git
synced 2026-02-14 18:29:53 +00:00
fix(support): add missing host collectors for ParseSupportBundle (#1656)
* fix(support): add missing host collectors for ParseSupportBundle * update * add host ananlyers
This commit is contained in:
@@ -16857,6 +16857,540 @@ spec:
|
||||
type: object
|
||||
type: object
|
||||
type: array
|
||||
hostCollectors:
|
||||
items:
|
||||
properties:
|
||||
blockDevices:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
type: object
|
||||
certificate:
|
||||
properties:
|
||||
certificatePath:
|
||||
type: string
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
keyPath:
|
||||
type: string
|
||||
required:
|
||||
- certificatePath
|
||||
- keyPath
|
||||
type: object
|
||||
certificatesCollection:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
paths:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
required:
|
||||
- paths
|
||||
type: object
|
||||
cgroups:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
mountPoint:
|
||||
type: string
|
||||
type: object
|
||||
copy:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
path:
|
||||
type: string
|
||||
required:
|
||||
- path
|
||||
type: object
|
||||
cpu:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
type: object
|
||||
diskUsage:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
path:
|
||||
type: string
|
||||
required:
|
||||
- path
|
||||
type: object
|
||||
dns:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
hostnames:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
required:
|
||||
- hostnames
|
||||
type: object
|
||||
filesystemPerformance:
|
||||
description: |-
|
||||
FilesystemPerformance benchmarks sequential write latency on a single file.
|
||||
The optional background IOPS feature attempts to mimic real-world conditions by running read and
|
||||
write workloads prior to and during benchmark execution.
|
||||
properties:
|
||||
backgroundIOPSWarmupSeconds:
|
||||
description: How long to run the background IOPS read and
|
||||
write workloads prior to starting the benchmarks.
|
||||
type: integer
|
||||
backgroundReadIOPS:
|
||||
description: |-
|
||||
The target read IOPS to run while benchmarking. This is a limit and there is no guarantee
|
||||
it will be reached. This is the total IOPS for all background read jobs.
|
||||
type: integer
|
||||
backgroundReadIOPSJobs:
|
||||
description: |-
|
||||
Number of threads to use for background read IOPS. This should be set high enough to reach
|
||||
the target specified in BackgrounReadIOPS.
|
||||
type: integer
|
||||
backgroundWriteIOPS:
|
||||
description: |-
|
||||
The target write IOPS to run while benchmarking. This is a limit and there is no guarantee
|
||||
it will be reached. This is the total IOPS for all background write jobs.
|
||||
type: integer
|
||||
backgroundWriteIOPSJobs:
|
||||
description: |-
|
||||
Number of threads to use for background write IOPS. This should be set high enough to reach
|
||||
the target specified in BackgroundWriteIOPS.
|
||||
Example: If BackgroundWriteIOPS is 100 and write latency is 10ms then a single job would
|
||||
barely be able to reach 100 IOPS so this should be at least 2.
|
||||
type: integer
|
||||
collectorName:
|
||||
type: string
|
||||
datasync:
|
||||
description: |-
|
||||
Whether to call datasync on the file after each write. Skipped if Sync is also true. Does not
|
||||
apply to background IOPS task.
|
||||
type: boolean
|
||||
directory:
|
||||
description: The directory where the benchmark will create
|
||||
files.
|
||||
type: string
|
||||
enableBackgroundIOPS:
|
||||
description: Enable the background IOPS feature.
|
||||
type: boolean
|
||||
exclude:
|
||||
type: BoolString
|
||||
fileSize:
|
||||
description: |-
|
||||
The size of the file used in the benchmark. The number of IO operations for the benchmark
|
||||
will be FileSize / OperationSizeBytes. Accepts valid Kubernetes resource units such as Mi.
|
||||
type: string
|
||||
operationSize:
|
||||
description: |-
|
||||
The size of each write operation performed while benchmarking. This does not apply to the
|
||||
background IOPS feature if enabled, since those must be fixed at 4096.
|
||||
format: int64
|
||||
type: integer
|
||||
runTime:
|
||||
description: |-
|
||||
Limit runtime. The test will run until it completes the configured I/O workload or until it
|
||||
has run for this specified amount of time, whichever occurs first. When the unit is omitted,
|
||||
the value is interpreted in seconds. Defaults to 120 seconds. Set to "0" to disable.
|
||||
type: string
|
||||
sync:
|
||||
description: Whether to call sync on the file after each
|
||||
write. Does not apply to background IOPS task.
|
||||
type: boolean
|
||||
timeout:
|
||||
description: Total timeout, including background IOPS setup
|
||||
and warmup if enabled.
|
||||
type: string
|
||||
required:
|
||||
- backgroundIOPSWarmupSeconds
|
||||
- backgroundReadIOPS
|
||||
- backgroundReadIOPSJobs
|
||||
- backgroundWriteIOPS
|
||||
- backgroundWriteIOPSJobs
|
||||
- enableBackgroundIOPS
|
||||
type: object
|
||||
hostOS:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
type: object
|
||||
hostServices:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
type: object
|
||||
http:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
get:
|
||||
properties:
|
||||
headers:
|
||||
additionalProperties:
|
||||
type: string
|
||||
type: object
|
||||
insecureSkipVerify:
|
||||
type: boolean
|
||||
timeout:
|
||||
description: |-
|
||||
Timeout is the time to wait for a server's response. Its a duration e.g 15s, 2h30m.
|
||||
Missing value or empty string or means no timeout.
|
||||
type: string
|
||||
url:
|
||||
type: string
|
||||
required:
|
||||
- url
|
||||
type: object
|
||||
post:
|
||||
properties:
|
||||
body:
|
||||
type: string
|
||||
headers:
|
||||
additionalProperties:
|
||||
type: string
|
||||
type: object
|
||||
insecureSkipVerify:
|
||||
type: boolean
|
||||
timeout:
|
||||
description: |-
|
||||
Timeout is the time to wait for a server's response. Its a duration e.g 15s, 2h30m.
|
||||
Missing value or empty string or means no timeout.
|
||||
type: string
|
||||
url:
|
||||
type: string
|
||||
required:
|
||||
- url
|
||||
type: object
|
||||
put:
|
||||
properties:
|
||||
body:
|
||||
type: string
|
||||
headers:
|
||||
additionalProperties:
|
||||
type: string
|
||||
type: object
|
||||
insecureSkipVerify:
|
||||
type: boolean
|
||||
timeout:
|
||||
description: |-
|
||||
Timeout is the time to wait for a server's response. Its a duration e.g 15s, 2h30m.
|
||||
Missing value or empty string or means no timeout.
|
||||
type: string
|
||||
url:
|
||||
type: string
|
||||
required:
|
||||
- url
|
||||
type: object
|
||||
type: object
|
||||
httpLoadBalancer:
|
||||
properties:
|
||||
address:
|
||||
type: string
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
path:
|
||||
type: string
|
||||
port:
|
||||
type: integer
|
||||
timeout:
|
||||
type: string
|
||||
required:
|
||||
- address
|
||||
- path
|
||||
- port
|
||||
type: object
|
||||
ipv4Interfaces:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
type: object
|
||||
journald:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
dmesg:
|
||||
type: boolean
|
||||
exclude:
|
||||
type: BoolString
|
||||
lines:
|
||||
type: integer
|
||||
output:
|
||||
type: string
|
||||
reverse:
|
||||
type: boolean
|
||||
since:
|
||||
type: string
|
||||
system:
|
||||
type: boolean
|
||||
timeout:
|
||||
type: string
|
||||
units:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
until:
|
||||
type: string
|
||||
utc:
|
||||
type: boolean
|
||||
type: object
|
||||
kernelConfigs:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
type: object
|
||||
kernelModules:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
type: object
|
||||
kubernetes:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
type: object
|
||||
memory:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
type: object
|
||||
run:
|
||||
properties:
|
||||
args:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
collectorName:
|
||||
type: string
|
||||
command:
|
||||
type: string
|
||||
env:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
exclude:
|
||||
type: BoolString
|
||||
ignoreParentEnvs:
|
||||
type: boolean
|
||||
inheritEnvs:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
input:
|
||||
additionalProperties:
|
||||
type: string
|
||||
type: object
|
||||
outputDir:
|
||||
type: string
|
||||
timeout:
|
||||
type: string
|
||||
required:
|
||||
- args
|
||||
- command
|
||||
type: object
|
||||
subnetAvailable:
|
||||
properties:
|
||||
CIDRRangeAlloc:
|
||||
type: string
|
||||
collectorName:
|
||||
type: string
|
||||
desiredCIDR:
|
||||
type: integer
|
||||
exclude:
|
||||
type: BoolString
|
||||
required:
|
||||
- CIDRRangeAlloc
|
||||
- desiredCIDR
|
||||
type: object
|
||||
systemPackages:
|
||||
properties:
|
||||
amzn:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
amzn2:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
centos:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
centos7:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
centos8:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
centos9:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
ol:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
ol7:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
ol8:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
ol9:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
rhel:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
rhel7:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
rhel8:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
rhel9:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
rocky:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
rocky8:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
rocky9:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
ubuntu:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
ubuntu16:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
ubuntu18:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
ubuntu20:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
type: object
|
||||
tcpConnect:
|
||||
properties:
|
||||
address:
|
||||
type: string
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
timeout:
|
||||
type: string
|
||||
required:
|
||||
- address
|
||||
type: object
|
||||
tcpLoadBalancer:
|
||||
properties:
|
||||
address:
|
||||
type: string
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
port:
|
||||
type: integer
|
||||
timeout:
|
||||
type: string
|
||||
required:
|
||||
- address
|
||||
- port
|
||||
type: object
|
||||
tcpPortStatus:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
interface:
|
||||
type: string
|
||||
port:
|
||||
type: integer
|
||||
required:
|
||||
- port
|
||||
type: object
|
||||
time:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
type: object
|
||||
udpPortStatus:
|
||||
properties:
|
||||
collectorName:
|
||||
type: string
|
||||
exclude:
|
||||
type: BoolString
|
||||
interface:
|
||||
type: string
|
||||
port:
|
||||
type: integer
|
||||
required:
|
||||
- port
|
||||
type: object
|
||||
type: object
|
||||
type: array
|
||||
uri:
|
||||
type: string
|
||||
type: object
|
||||
|
||||
@@ -34,6 +34,7 @@ type AfterCollection struct {
|
||||
// CollectorSpec defines the desired state of Collector
|
||||
type CollectorSpec struct {
|
||||
Collectors []*Collect `json:"collectors,omitempty" yaml:"collectors,omitempty"`
|
||||
HostCollectors []*HostCollect `json:"hostCollectors,omitempty" yaml:"hostCollectors,omitempty"`
|
||||
AfterCollection []*AfterCollection `json:"afterCollection,omitempty" yaml:"afterCollection,omitempty"`
|
||||
Uri string `json:"uri,omitempty" yaml:"uri,omitempty"`
|
||||
}
|
||||
|
||||
@@ -1094,6 +1094,17 @@ func (in *CollectorSpec) DeepCopyInto(out *CollectorSpec) {
|
||||
}
|
||||
}
|
||||
}
|
||||
if in.HostCollectors != nil {
|
||||
in, out := &in.HostCollectors, &out.HostCollectors
|
||||
*out = make([]*HostCollect, len(*in))
|
||||
for i := range *in {
|
||||
if (*in)[i] != nil {
|
||||
in, out := &(*in)[i], &(*out)[i]
|
||||
*out = new(HostCollect)
|
||||
(*in).DeepCopyInto(*out)
|
||||
}
|
||||
}
|
||||
}
|
||||
if in.AfterCollection != nil {
|
||||
in, out := &in.AfterCollection, &out.AfterCollection
|
||||
*out = make([]*AfterCollection, len(*in))
|
||||
|
||||
@@ -38,7 +38,6 @@ func GetSupportBundleFromURI(bundleURI string) (*troubleshootv1beta2.SupportBund
|
||||
}
|
||||
|
||||
// ParseSupportBundle parses a support bundle from a byte array into a SupportBundle object
|
||||
// We will deprecate this in favour of use loader.LoadSpecs once the new API is stable
|
||||
func ParseSupportBundle(doc []byte, followURI bool) (*troubleshootv1beta2.SupportBundle, error) {
|
||||
doc, err := docrewrite.ConvertToV1Beta2(doc)
|
||||
if err != nil {
|
||||
@@ -65,7 +64,9 @@ func ParseSupportBundle(doc []byte, followURI bool) (*troubleshootv1beta2.Suppor
|
||||
ObjectMeta: collector.ObjectMeta,
|
||||
Spec: troubleshootv1beta2.SupportBundleSpec{
|
||||
Collectors: collector.Spec.Collectors,
|
||||
HostCollectors: collector.Spec.HostCollectors,
|
||||
Analyzers: []*troubleshootv1beta2.Analyze{},
|
||||
HostAnalyzers: []*troubleshootv1beta2.HostAnalyze{},
|
||||
AfterCollection: collector.Spec.AfterCollection,
|
||||
},
|
||||
}
|
||||
|
||||
94
pkg/supportbundle/load_test.go
Normal file
94
pkg/supportbundle/load_test.go
Normal file
@@ -0,0 +1,94 @@
|
||||
package supportbundle
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
troubleshootv1beta2 "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta2"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
func Test_ParseSupportBundle(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
doc []byte
|
||||
followURI bool
|
||||
want *troubleshootv1beta2.SupportBundle
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "Parse Host Collectors",
|
||||
doc: []byte(`
|
||||
apiVersion: troubleshoot.sh/v1beta2
|
||||
kind: SupportBundle
|
||||
metadata:
|
||||
name: test
|
||||
spec:
|
||||
hostCollectors:
|
||||
- hostOS: {}
|
||||
`),
|
||||
followURI: false,
|
||||
want: &troubleshootv1beta2.SupportBundle{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
APIVersion: "troubleshoot.sh/v1beta2",
|
||||
Kind: "SupportBundle",
|
||||
},
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "test",
|
||||
},
|
||||
Spec: troubleshootv1beta2.SupportBundleSpec{
|
||||
HostCollectors: []*troubleshootv1beta2.HostCollect{
|
||||
{
|
||||
HostOS: &troubleshootv1beta2.HostOS{},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "Parse Collectors",
|
||||
doc: []byte(`
|
||||
apiVersion: troubleshoot.sh/v1beta2
|
||||
kind: SupportBundle
|
||||
metadata:
|
||||
name: test
|
||||
spec:
|
||||
collectors:
|
||||
- clusterInfo: {}
|
||||
`),
|
||||
followURI: false,
|
||||
want: &troubleshootv1beta2.SupportBundle{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
APIVersion: "troubleshoot.sh/v1beta2",
|
||||
Kind: "SupportBundle",
|
||||
},
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "test",
|
||||
},
|
||||
Spec: troubleshootv1beta2.SupportBundleSpec{
|
||||
Collectors: []*troubleshootv1beta2.Collect{
|
||||
{
|
||||
ClusterInfo: &troubleshootv1beta2.ClusterInfo{},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
wantErr: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got, err := ParseSupportBundle(tt.doc, tt.followURI)
|
||||
if (err != nil) != tt.wantErr {
|
||||
t.Errorf("ParseSupportBundle() error = %v, wantErr %v", err, tt.wantErr)
|
||||
return
|
||||
}
|
||||
if !reflect.DeepEqual(got, tt.want) {
|
||||
t.Errorf("ParseSupportBundle() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -14367,6 +14367,760 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"hostCollectors": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"blockDevices": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
}
|
||||
}
|
||||
},
|
||||
"certificate": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"certificatePath",
|
||||
"keyPath"
|
||||
],
|
||||
"properties": {
|
||||
"certificatePath": {
|
||||
"type": "string"
|
||||
},
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
},
|
||||
"keyPath": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"certificatesCollection": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"paths"
|
||||
],
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
},
|
||||
"paths": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"cgroups": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
},
|
||||
"mountPoint": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"copy": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"path"
|
||||
],
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
},
|
||||
"path": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"cpu": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
}
|
||||
}
|
||||
},
|
||||
"diskUsage": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"path"
|
||||
],
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
},
|
||||
"path": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dns": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"hostnames"
|
||||
],
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
},
|
||||
"hostnames": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"filesystemPerformance": {
|
||||
"description": "FilesystemPerformance benchmarks sequential write latency on a single file.\nThe optional background IOPS feature attempts to mimic real-world conditions by running read and\nwrite workloads prior to and during benchmark execution.",
|
||||
"type": "object",
|
||||
"required": [
|
||||
"backgroundIOPSWarmupSeconds",
|
||||
"backgroundReadIOPS",
|
||||
"backgroundReadIOPSJobs",
|
||||
"backgroundWriteIOPS",
|
||||
"backgroundWriteIOPSJobs",
|
||||
"enableBackgroundIOPS"
|
||||
],
|
||||
"properties": {
|
||||
"backgroundIOPSWarmupSeconds": {
|
||||
"description": "How long to run the background IOPS read and write workloads prior to starting the benchmarks.",
|
||||
"type": "integer"
|
||||
},
|
||||
"backgroundReadIOPS": {
|
||||
"description": "The target read IOPS to run while benchmarking. This is a limit and there is no guarantee\nit will be reached. This is the total IOPS for all background read jobs.",
|
||||
"type": "integer"
|
||||
},
|
||||
"backgroundReadIOPSJobs": {
|
||||
"description": "Number of threads to use for background read IOPS. This should be set high enough to reach\nthe target specified in BackgrounReadIOPS.",
|
||||
"type": "integer"
|
||||
},
|
||||
"backgroundWriteIOPS": {
|
||||
"description": "The target write IOPS to run while benchmarking. This is a limit and there is no guarantee\nit will be reached. This is the total IOPS for all background write jobs.",
|
||||
"type": "integer"
|
||||
},
|
||||
"backgroundWriteIOPSJobs": {
|
||||
"description": "Number of threads to use for background write IOPS. This should be set high enough to reach\nthe target specified in BackgroundWriteIOPS.\nExample: If BackgroundWriteIOPS is 100 and write latency is 10ms then a single job would\nbarely be able to reach 100 IOPS so this should be at least 2.",
|
||||
"type": "integer"
|
||||
},
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"datasync": {
|
||||
"description": "Whether to call datasync on the file after each write. Skipped if Sync is also true. Does not\napply to background IOPS task.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"directory": {
|
||||
"description": "The directory where the benchmark will create files.",
|
||||
"type": "string"
|
||||
},
|
||||
"enableBackgroundIOPS": {
|
||||
"description": "Enable the background IOPS feature.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
},
|
||||
"fileSize": {
|
||||
"description": "The size of the file used in the benchmark. The number of IO operations for the benchmark\nwill be FileSize / OperationSizeBytes. Accepts valid Kubernetes resource units such as Mi.",
|
||||
"type": "string"
|
||||
},
|
||||
"operationSize": {
|
||||
"description": "The size of each write operation performed while benchmarking. This does not apply to the\nbackground IOPS feature if enabled, since those must be fixed at 4096.",
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
},
|
||||
"runTime": {
|
||||
"description": "Limit runtime. The test will run until it completes the configured I/O workload or until it\nhas run for this specified amount of time, whichever occurs first. When the unit is omitted,\nthe value is interpreted in seconds. Defaults to 120 seconds. Set to \"0\" to disable.",
|
||||
"type": "string"
|
||||
},
|
||||
"sync": {
|
||||
"description": "Whether to call sync on the file after each write. Does not apply to background IOPS task.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"timeout": {
|
||||
"description": "Total timeout, including background IOPS setup and warmup if enabled.",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"hostOS": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
}
|
||||
}
|
||||
},
|
||||
"hostServices": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
}
|
||||
}
|
||||
},
|
||||
"http": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
},
|
||||
"get": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"url"
|
||||
],
|
||||
"properties": {
|
||||
"headers": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"insecureSkipVerify": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"timeout": {
|
||||
"description": "Timeout is the time to wait for a server's response. Its a duration e.g 15s, 2h30m.\nMissing value or empty string or means no timeout.",
|
||||
"type": "string"
|
||||
},
|
||||
"url": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"post": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"url"
|
||||
],
|
||||
"properties": {
|
||||
"body": {
|
||||
"type": "string"
|
||||
},
|
||||
"headers": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"insecureSkipVerify": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"timeout": {
|
||||
"description": "Timeout is the time to wait for a server's response. Its a duration e.g 15s, 2h30m.\nMissing value or empty string or means no timeout.",
|
||||
"type": "string"
|
||||
},
|
||||
"url": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"put": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"url"
|
||||
],
|
||||
"properties": {
|
||||
"body": {
|
||||
"type": "string"
|
||||
},
|
||||
"headers": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"insecureSkipVerify": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"timeout": {
|
||||
"description": "Timeout is the time to wait for a server's response. Its a duration e.g 15s, 2h30m.\nMissing value or empty string or means no timeout.",
|
||||
"type": "string"
|
||||
},
|
||||
"url": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"httpLoadBalancer": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"address",
|
||||
"path",
|
||||
"port"
|
||||
],
|
||||
"properties": {
|
||||
"address": {
|
||||
"type": "string"
|
||||
},
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
},
|
||||
"path": {
|
||||
"type": "string"
|
||||
},
|
||||
"port": {
|
||||
"type": "integer"
|
||||
},
|
||||
"timeout": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"ipv4Interfaces": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
}
|
||||
}
|
||||
},
|
||||
"journald": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"dmesg": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
},
|
||||
"lines": {
|
||||
"type": "integer"
|
||||
},
|
||||
"output": {
|
||||
"type": "string"
|
||||
},
|
||||
"reverse": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"since": {
|
||||
"type": "string"
|
||||
},
|
||||
"system": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"timeout": {
|
||||
"type": "string"
|
||||
},
|
||||
"units": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"until": {
|
||||
"type": "string"
|
||||
},
|
||||
"utc": {
|
||||
"type": "boolean"
|
||||
}
|
||||
}
|
||||
},
|
||||
"kernelConfigs": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
}
|
||||
}
|
||||
},
|
||||
"kernelModules": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
}
|
||||
}
|
||||
},
|
||||
"kubernetes": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
}
|
||||
}
|
||||
},
|
||||
"memory": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
}
|
||||
}
|
||||
},
|
||||
"run": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"args",
|
||||
"command"
|
||||
],
|
||||
"properties": {
|
||||
"args": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"command": {
|
||||
"type": "string"
|
||||
},
|
||||
"env": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
},
|
||||
"ignoreParentEnvs": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"inheritEnvs": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"input": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"outputDir": {
|
||||
"type": "string"
|
||||
},
|
||||
"timeout": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"subnetAvailable": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"CIDRRangeAlloc",
|
||||
"desiredCIDR"
|
||||
],
|
||||
"properties": {
|
||||
"CIDRRangeAlloc": {
|
||||
"type": "string"
|
||||
},
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"desiredCIDR": {
|
||||
"type": "integer"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
}
|
||||
}
|
||||
},
|
||||
"systemPackages": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"amzn": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"amzn2": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"centos": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"centos7": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"centos8": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"centos9": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
},
|
||||
"ol": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"ol7": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"ol8": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"ol9": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"rhel": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"rhel7": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"rhel8": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"rhel9": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"rocky": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"rocky8": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"rocky9": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"ubuntu": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"ubuntu16": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"ubuntu18": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"ubuntu20": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"tcpConnect": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"address"
|
||||
],
|
||||
"properties": {
|
||||
"address": {
|
||||
"type": "string"
|
||||
},
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
},
|
||||
"timeout": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tcpLoadBalancer": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"address",
|
||||
"port"
|
||||
],
|
||||
"properties": {
|
||||
"address": {
|
||||
"type": "string"
|
||||
},
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
},
|
||||
"port": {
|
||||
"type": "integer"
|
||||
},
|
||||
"timeout": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tcpPortStatus": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"port"
|
||||
],
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
},
|
||||
"interface": {
|
||||
"type": "string"
|
||||
},
|
||||
"port": {
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
},
|
||||
"time": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
}
|
||||
}
|
||||
},
|
||||
"udpPortStatus": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"port"
|
||||
],
|
||||
"properties": {
|
||||
"collectorName": {
|
||||
"type": "string"
|
||||
},
|
||||
"exclude": {
|
||||
"oneOf": [{"type": "string"},{"type": "boolean"}]
|
||||
},
|
||||
"interface": {
|
||||
"type": "string"
|
||||
},
|
||||
"port": {
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"uri": {
|
||||
"type": "string"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user