e2e/framework: capture logs only from pods that actually started

Attempting to retrieve logs for a container that hasn't started yet
may have been the reason for the "the server does not allow this
method on the requested resource" error that showed up on the GCE CI
test cluster (issue #70888).

If we wait with retrieving logs until the pod is running or has
terminated, then we might be able to avoid that error. It's the right
thing to do either way and not complicated to implement.
This commit is contained in:
Patrick Ohly 2018-11-19 14:55:10 +01:00
parent 7ba79c3183
commit a4fc58cc98

View File

@ -99,9 +99,15 @@ func CopyAllLogs(ctx context.Context, cs clientset.Interface, ns string, to LogO
}
for _, pod := range pods.Items {
for _, c := range pod.Spec.Containers {
for i, c := range pod.Spec.Containers {
name := pod.ObjectMeta.Name + "/" + c.Name
if logging[name] {
if logging[name] ||
// sanity check, array should have entry for each container
len(pod.Status.ContainerStatuses) <= i ||
// Don't attempt to get logs for a container unless it is running or has terminated.
// Trying to get a log would just end up with an error that we would have to suppress.
(pod.Status.ContainerStatuses[i].State.Running == nil &&
pod.Status.ContainerStatuses[i].State.Terminated == nil) {
continue
}
readCloser, err := LogsForPod(ctx, cs, ns, pod.ObjectMeta.Name,