Introduction to the analyze phase
Analyzers are YAML specifications that define a set of criteria and operations to run against data collected in a preflight check or support bundle. Each analyzer included will result in either 0 or 1 outcomes. If an analyzer produces zero outcomes, it will not be displayed in the results.
Analyzers are specified inside either a Preflight or a SupportBundle YAML file. To build a set of analyzers, start with a Kubernetes YAML file:
apiVersion: troubleshoot.sh/v1beta2 kind: Preflight metadata: name: my-application-name spec: analyzers: 
apiVersion: troubleshoot.sh/v1beta2 kind: SupportBundle metadata: name: my-application-name spec: analyzers: 
troubleshoot.sh/v1beta2was introduced in preflight and support-bundle krew plugin version 0.9.39 and Kots version 1.19.0. Kots vendors should read the guide to maintain backwards compatibility. Also note: Previously, Analyzers could be specified in a standalone file, with
Kind: Analyzer, however this syntax is deprecated in Kots 1.19.0 and not supported at all in the krew plugins.
The above files contain all of the necessary scaffolding and structure needed to write analyzers, but don't contain any analyzers. Given this analyzer definition, there will be nothing on the analysis page.
The troubleshoot project defines a number of built-in and easy-to-use analyzers, and many helper functions to build custom analyzers.
To add additional analyzers to a manifest, read the docs in this section to understand each one, and add them as an array item below
For example, a complete Preflight check might be:
apiVersion: troubleshoot.sh/v1beta2 kind: Preflight metadata: name: my-application-name spec: analyzers: - imagePullSecret: checkName: Has Access to Quay.io registryName: quay.io outcomes: - fail: message: Cannot pull from quay.io - pass: message: Found credentials to pull from quay.io - clusterVersion: outcomes: - fail: when: "< 1.13.0" message: Sorry, my-application-name requires at least Kubernetes 1.14.0. Please update your Kubernetes cluster before installing. uri: https://enterprise.my-application.com/install/requirements/kubernetes - warn: when: "< 1.15.0" message: The version of Kubernetes you are running meets the minimum requirements to run my-application-name. It's recommended to run Kubernetes 1.15.0 or later. uri: https://enterprise.my-application.com/install/requirements/kubernetes - pass: message: The version of Kubernetes you have installed meets the required and recommended versions. - storageClass: checkName: Required storage classes storageClassName: "microk8s-hostpath" outcomes: - fail: message: The required storage class was not found in the cluster. - pass: message: The required storage class was found in the cluster. - customResourceDefinition: customResourceDefinitionName: cephclusters.ceph.rook.io outcomes: - fail: message: Rook is required for my-application. Rook was not found in the cluster. - pass: message: Found a supported version of Rook installed and running in the cluster.
The following properties are supported on all analyzers:
Optionally, an analyzer can specify the
For analyzer that are optional, based on runtime available configuration, the conditional can be specified in the
This is useful for deployment techniques that allow templating for optional components (Helm and KOTS).
When this value is
false, the analyzer will not be called.