Skip to content

Commit fa00ddd

Browse files
author
Ravi Sankar Penta
committed
Print more details when network diagnostics test setup fails
Currently when network diags fails, it only informs how many test pods failed but doesn't provide why those pods failed. This change will fetch logs for the pods in case of setup failure.
1 parent 6e87701 commit fa00ddd

File tree

1 file changed

+42
-1
lines changed

1 file changed

+42
-1
lines changed

pkg/diagnostics/network/setup.go

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
kerrs "k8s.io/apimachinery/pkg/api/errors"
1111
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1212
kerrors "k8s.io/apimachinery/pkg/util/errors"
13+
"k8s.io/apimachinery/pkg/util/sets"
1314
"k8s.io/apimachinery/pkg/util/wait"
1415
"k8s.io/apiserver/pkg/storage/names"
1516
kclientcmd "k8s.io/client-go/tools/clientcmd"
@@ -66,7 +67,12 @@ func (d *NetworkDiagnostic) TestSetup() error {
6667
}
6768
// Wait for test pods and services to be up and running on all valid nodes
6869
if err = d.waitForTestPodAndService(nsList); err != nil {
69-
return fmt.Errorf("Failed to run network diags test pod and service: %v", err)
70+
logData, er := d.getPodLogs(nsList)
71+
if er != nil {
72+
return fmt.Errorf("Failed to run network diags test pod and service: %v, fetching logs failed: %v", err, er)
73+
} else {
74+
return fmt.Errorf("Failed to run network diags test pod and service: %v, details: %s", err, logData)
75+
}
7076
}
7177
return nil
7278
}
@@ -169,6 +175,41 @@ func (d *NetworkDiagnostic) waitForTestPodAndService(nsList []string) error {
169175
return kerrors.NewAggregate(errList)
170176
}
171177

178+
func (d *NetworkDiagnostic) getPodLogs(nsList []string) (string, error) {
179+
logData := sets.String{}
180+
errList := []error{}
181+
limit := int64(1024)
182+
183+
for _, name := range nsList {
184+
podList, err := d.getPodList(name, util.NetworkDiagTestPodNamePrefix)
185+
if err != nil {
186+
return "", err
187+
}
188+
189+
for _, pod := range podList.Items {
190+
opts := &kapi.PodLogOptions{
191+
TypeMeta: pod.TypeMeta,
192+
Container: pod.Name,
193+
Follow: true,
194+
LimitBytes: &limit,
195+
}
196+
197+
req, err := d.Factory.LogsForObject(&pod, opts, 10*time.Second)
198+
if err != nil {
199+
errList = append(errList, err)
200+
continue
201+
}
202+
data, err := req.DoRaw()
203+
if err != nil {
204+
errList = append(errList, err)
205+
continue
206+
}
207+
logData.Insert(string(data[:]))
208+
}
209+
}
210+
return strings.Join(logData.List(), ", "), kerrors.NewAggregate(errList)
211+
}
212+
172213
func (d *NetworkDiagnostic) getCountOfTestPods(nsList []string) (int, int, error) {
173214
totalPodCount := 0
174215
runningPodCount := 0

0 commit comments

Comments
 (0)