feat: debug failed global helm chart installations by checking all pod logs

This commit is contained in:
Jose Diaz-Gonzalez
2025-07-23 16:32:21 -04:00
parent 7595351b1d
commit d33393d3fd
2 changed files with 48 additions and 0 deletions

View File

@@ -1605,6 +1605,25 @@ func installHelmCharts(ctx context.Context, clientset KubernetesClient, shouldIn
Wait: true,
})
if err != nil {
chartPods, err := clientset.ListPods(ctx, ListPodsInput{
Namespace: chart.Namespace,
})
if err != nil {
return fmt.Errorf("Error listing chart pods: %w", err)
}
for _, pod := range chartPods {
logs, err := clientset.GetLogs(ctx, GetLogsInput{
Name: pod.Name,
Namespace: pod.Namespace,
})
if err != nil {
return fmt.Errorf("Error getting chart pod logs: %w", err)
}
common.LogExclaim(fmt.Sprintf("Logs for %s/%s", pod.Namespace, pod.Name))
for _, log := range strings.Split(string(logs), "\n") {
common.LogInfo1(log)
}
}
return fmt.Errorf("Error installing chart %s: %w", chart.ChartPath, err)
}
}

View File

@@ -416,6 +416,35 @@ func (k KubernetesClient) ExecCommand(ctx context.Context, input ExecCommandInpu
})
}
// GetPodLogsInput contains all the information needed to get the logs for a Kubernetes pod
type GetLogsInput struct {
// Name is the Kubernetes pod name
Name string
// Namespace is the Kubernetes namespace
Namespace string
}
// GetLogs gets the logs for a Kubernetes pod
func (k KubernetesClient) GetLogs(ctx context.Context, input GetLogsInput) ([]byte, error) {
logOptions := corev1.PodLogOptions{}
request := k.Client.CoreV1().Pods(input.Namespace).GetLogs(input.Name, &logOptions)
readCloser, err := request.Stream(ctx)
if err != nil {
return nil, fmt.Errorf("failed to get logs: %w", err)
}
defer readCloser.Close()
bytes, err := io.ReadAll(readCloser)
if err != nil {
return nil, fmt.Errorf("failed to read logs: %w", err)
}
return bytes, nil
}
// GetNodeInput contains all the information needed to get a Kubernetes node
type GetNodeInput struct {
// Name is the Kubernetes node name