Files
Evans MungaiandGitHub 53113c0170 feat: goldpinger collector and analyser (#1398)
* feat: goldpinger analyser

Analyser to generate a report from goldpinger results

* Add goldpinger testdata

* Goldpinger collector

* Improvements after running tests

* More minor updates after further testing

* Better error message if a container fails to start

* A few more updates

* Add goldpinger e2e test

* Update schemas

* Clean up help installs in e2e tests

* Add resource limits to goldpinger pods

* Some minor improvements

* Some more changes noted when writing docs

* Update schemas

* A few more updates when testing with kURL

* Log goldpinger tests

* Tests before exit code
2023-12-12 11:02:41 +00:00

78 lines
2.0 KiB
Go

package collect
import (
"context"
troubleshootv1beta2 "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta2"
corev1 "k8s.io/api/core/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
)
type CollectRun struct {
Collector *troubleshootv1beta2.Run
BundlePath string
Namespace string
ClientConfig *rest.Config
Client kubernetes.Interface
Context context.Context
RBACErrors
}
func (c *CollectRun) Title() string {
return getCollectorName(c)
}
func (c *CollectRun) IsExcluded() (bool, error) {
return isExcluded(c.Collector.Exclude)
}
func (c *CollectRun) Collect(progressChan chan<- interface{}) (CollectorResult, error) {
pullPolicy := corev1.PullIfNotPresent
if c.Collector.ImagePullPolicy != "" {
pullPolicy = corev1.PullPolicy(c.Collector.ImagePullPolicy)
}
namespace := "default"
if c.Collector.Namespace != "" {
namespace = c.Collector.Namespace
}
serviceAccountName := "default"
if c.Collector.ServiceAccountName != "" {
serviceAccountName = c.Collector.ServiceAccountName
}
if err := checkForExistingServiceAccount(c.Context, c.Client, namespace, serviceAccountName); err != nil {
return nil, err
}
runPodSpec := &troubleshootv1beta2.RunPod{
CollectorMeta: troubleshootv1beta2.CollectorMeta{
CollectorName: c.Collector.CollectorName,
},
Name: c.Collector.Name,
Namespace: namespace,
Timeout: c.Collector.Timeout,
ImagePullSecret: c.Collector.ImagePullSecret,
PodSpec: corev1.PodSpec{
RestartPolicy: corev1.RestartPolicyNever,
ServiceAccountName: serviceAccountName,
Containers: []corev1.Container{
{
Image: c.Collector.Image,
ImagePullPolicy: pullPolicy,
Name: "collector",
Command: c.Collector.Command,
Args: c.Collector.Args,
},
},
},
}
rbacErrors := c.GetRBACErrors()
runPodCollector := &CollectRunPod{runPodSpec, c.BundlePath, c.Namespace, c.ClientConfig, c.Client, c.Context, rbacErrors}
return runPodCollector.Collect(progressChan)
}