popeye

package
v0.4.0-alpha1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 29, 2022 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// LevelToIssueSeverity maps Popeye's <Level> type to Zora's
	// <ClusterIssueSeverity>.
	LevelToIssueSeverity = [4]zorav1a1.ClusterIssueSeverity{
		zorav1a1.SeverityUnknown,
		zorav1a1.SeverityLow,
		zorav1a1.SeverityMedium,
		zorav1a1.SeverityHigh,
	}

	// IssueIDtoGenericMsg maps Popeye's issue codes to generic versions of the
	// issue description. The original issues can be found on Popeye's source
	// file <internal/issues/assets/codes.yml>. The codes do not contain the
	// "POP-" preffix.
	IssueIDtoGenericMsg = map[string]string{

		"105": "Unnamed probe port in use",
		"108": "Unnamed port",
		"109": "CPU reached request threshold",
		"110": "Memory reached request threshold",
		"111": "CPU reached user threshold",
		"112": "Memory reached user threshold",
		"113": "Container image not hosted on an allowed docker registry",

		"200": "Pod is terminating",
		"201": "Pod is terminating a process",
		"202": "Pod is waiting",
		"203": "Pod is waiting a process",
		"204": "Pod is not ready",
		"205": "Pod was restarted",
		"207": "Pod is in an unhappy phase",

		"304": "ServiceAccount references a secret which does not exist",
		"305": "ServiceAccount references a docker-image pull secret which does not exist",

		"401": "Unable to locate key reference",
		"402": "No metric-server detected",
		"403": "Deprecated API group",
		"404": "Deprecation check failed",

		"501": "Unhealthy, mismatch between desired and available state",
		"503": "At current load, CPU under allocated",
		"504": "At current load, CPU over allocated",
		"505": "At current load, Memory under allocated",
		"506": "At current load, Memory over allocated",
		"507": "Deployment references ServiceAccount which does not exist",

		"600": "HPA references a Deployment which does not exist",
		"601": "HPA references a StatefulSet which does not exist",
		"602": "Replicas at burst will match or exceed cluster CPU capacity",
		"603": "Replicas at burst will match or exceed cluster memory capacity",
		"604": "If ALL HPAs are triggered, cluster CPU capacity will match or exceed threshold",
		"605": "If ALL HPAs are triggered, cluster memory capacity will match or exceed threshold",

		"700": "Found taint that no pod can tolerate",
		"704": "Insufficient memory on Node (MemoryPressure condition)",
		"705": "Insufficient disk space on Node (DiskPressure condition)",
		"706": "Insufficient PIDs on Node (PIDPressure condition)",
		"707": "No network configured on Node (NetworkUnavailable condition)",
		"709": "Node CPU threshold reached",
		"710": "Node Memory threshold reached",

		"901": "MinAvailable is greater than the number of pods currently running",

		"1101": "Skip ports check. No explicit ports detected on pod",
		"1102": "Unnamed service port in use",
		"1106": "No target ports match service port",

		"1120": "Unhealthy ReplicaSet",

		"1200": "No pods match pod selector",
		"1201": "No namespaces match namespace selector",

		"1300": "References a role which does not exist",
	}

	// IssueIDtoUrl maps Popeye's issue codes to urls for wiki pages, blog
	// posts and other sources documenting the issue. The codes do not contain
	// the "POP-" preffix.
	IssueIDtoUrl = map[string]string{

		"100": "https://kubernetes.io/docs/concepts/containers/images/#image-names",
		"101": "https://kubernetes.io/docs/concepts/containers/images/#image-names",
		"102": "https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/",
		"103": "https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/",
		"104": "https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-readiness-probes",
		"105": "",
		"106": "https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
		"107": "https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
		"108": "",
		"109": "https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
		"110": "https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
		"111": "https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
		"112": "https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
		"113": "",

		"200": "https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle",
		"201": "https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle",
		"202": "https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle",
		"203": "https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle",
		"204": "https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle",
		"205": "https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle",
		"206": "https://kubernetes.io/docs/concepts/workloads/pods/disruptions",
		"207": "https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle",
		"208": "https://kubernetes.io/docs/concepts/configuration/overview/#naked-pods-vs-replicasets-deployments-and-jobs",

		"300": "https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/",
		"301": "https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/",
		"302": "https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted",
		"303": "https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/",
		"304": "https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#add-imagepullsecrets-to-a-service-account",
		"305": "https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#add-imagepullsecrets-to-a-service-account",
		"306": "https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted",

		"400": "",
		"401": "",
		"402": "https://kubernetes.io/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/#metrics-server",
		"403": "https://kubernetes.io/docs/reference/using-api/deprecation-guide",
		"404": "https://kubernetes.io/docs/reference/using-api/deprecation-guide",
		"405": "https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/",
		"406": "https://kubernetes.io/releases/",

		"500": "https://kubernetes.io/docs/concepts/workloads/",
		"501": "https://kubernetes.io/docs/concepts/workloads/",
		"503": "https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
		"504": "https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
		"505": "https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
		"506": "https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
		"507": "https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/",

		"600": "https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/",
		"601": "https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/",
		"602": "https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/",
		"603": "https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/",
		"604": "https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/",
		"605": "https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/",

		"700": "https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/",
		"701": "https://kubernetes.io/docs/concepts/architecture/nodes/#node-status",
		"702": "https://kubernetes.io/docs/concepts/architecture/nodes/#node-status",
		"703": "https://kubernetes.io/docs/concepts/architecture/nodes/#node-status",
		"704": "https://kubernetes.io/docs/concepts/architecture/nodes/#node-status",
		"705": "https://kubernetes.io/docs/concepts/architecture/nodes/#node-status",
		"706": "https://kubernetes.io/docs/concepts/architecture/nodes/#node-status",
		"707": "https://kubernetes.io/docs/concepts/architecture/nodes/#node-status",
		"708": "https://kubernetes.io/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/",
		"709": "https://kubernetes.io/docs/concepts/architecture/nodes/",
		"710": "https://kubernetes.io/docs/concepts/architecture/nodes/",
		"711": "https://kubernetes.io/docs/concepts/architecture/nodes/#manual-node-administration",
		"712": "https://kubernetes.io/docs/concepts/overview/components/",

		"800": "https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/",

		"900": "https://kubernetes.io/docs/concepts/workloads/pods/disruptions/",
		"901": "https://kubernetes.io/docs/concepts/workloads/pods/disruptions/",

		"1000": "https://kubernetes.io/docs/concepts/storage/persistent-volumes/",
		"1001": "https://kubernetes.io/docs/concepts/storage/persistent-volumes/",
		"1002": "https://kubernetes.io/docs/concepts/storage/persistent-volumes/",
		"1003": "https://kubernetes.io/docs/concepts/storage/persistent-volumes/",
		"1004": "https://kubernetes.io/docs/concepts/storage/persistent-volumes/",

		"1100": "https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service",
		"1101": "https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service",
		"1102": "https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service",
		"1103": "https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer",
		"1104": "https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport",
		"1105": "https://kubernetes.io/docs/concepts/services-networking/service/#services-without-selectors",
		"1106": "https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service",
		"1107": "https://kubernetes.io/docs/concepts/services-networking/service/#external-traffic-policy",
		"1108": "https://kubernetes.io/docs/concepts/services-networking/service/#external-traffic-policy",
		"1109": "https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service",

		"1120": "https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/",

		"1200": "https://kubernetes.io/docs/concepts/services-networking/network-policies/#networkpolicy-resource",
		"1201": "https://kubernetes.io/docs/concepts/services-networking/network-policies/#networkpolicy-resource",

		"1300": "https://kubernetes.io/docs/reference/access-authn-authz/rbac/#rolebinding-and-clusterrolebinding",
	}
)

Functions

func Parse

func Parse(log logr.Logger, popr []byte) ([]*zorav1a1.ClusterIssueSpec, error)

Parse transforms a Popeye report into a slice of <ClusterIssueSpec>. This function is called by the <report> package when a Popeye plugin is used.

Types

type Issue

type Issue struct {
	Level   Level  `json:"level"`
	Message string `json:"message"`
}

Issue represents a Popeye sanitizer issue.

type Level

type Level int

Level tracks lint check level.

const (
	// OkLevel denotes no linting issues.
	OkLevel Level = iota
	// InfoLevel denotes FIY linting issues.
	InfoLevel
	// WarnLevel denotes a warning issue.
	WarnLevel
	// ErrorLevel denotes a serious issue.
	ErrorLevel
)

The <Level> type and enum were imported from Popeye's <config> package, whose import path is <github.com/derailed/popeye/pkg/config>.

type Popeye

type Popeye struct {
	Sanitizers []*Sanitizer `json:"sanitizers"`
}

Popeye represents a Popeye report.

type Report

type Report struct {
	Popeye *Popeye `json:"popeye"`
}

Report wraps a Popeye report.

type Sanitizer

type Sanitizer struct {
	Sanitizer string              `json:"sanitizer"`
	GVR       string              `json:"gvr"`
	Issues    map[string][]*Issue `json:"issues"`
}

Sanitizer represents a Popeye sanitizer.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL