func dumpDebugInfo(c clientset.Interface, ns string) { pl, _ := c.Core().Pods(ns).List(v1.ListOptions{LabelSelector: labels.Everything().String()}) for _, p := range pl.Items { desc, _ := framework.RunKubectl("describe", "po", p.Name, fmt.Sprintf("--namespace=%v", ns)) framework.Logf("\nOutput of kubectl describe %v:\n%v", p.Name, desc) l, _ := framework.RunKubectl("logs", p.Name, fmt.Sprintf("--namespace=%v", ns), "--tail=100") framework.Logf("\nLast 100 log lines of %v:\n%v", p.Name, l) } }
func kubectlExecWithRetries(args ...string) (out string) { var err error for i := 0; i < 3; i++ { if out, err = framework.RunKubectl(args...); err == nil { return } framework.Logf("Retrying %v:\nerror %v\nstdout %v", args, err, out) } framework.Failf("Failed to execute \"%v\" with retries: %v", args, err) return }
// diagnoseMissingEndpoints prints debug information about the endpoints that // are NOT in the given list of foundEndpoints. These are the endpoints we // expected a response from. func (config *NetworkingTestConfig) diagnoseMissingEndpoints(foundEndpoints sets.String) { for _, e := range config.EndpointPods { if foundEndpoints.Has(e.Name) { continue } framework.Logf("\nOutput of kubectl describe pod %v/%v:\n", e.Namespace, e.Name) desc, _ := framework.RunKubectl( "describe", "pod", e.Name, fmt.Sprintf("--namespace=%v", e.Namespace)) framework.Logf(desc) } }
// kubectlLogLBController logs kubectl debug output for the L7 controller pod. func kubectlLogLBController(c *client.Client, ns string) { selector := labels.SelectorFromSet(labels.Set(controllerLabels)) options := api.ListOptions{LabelSelector: selector} podList, err := c.Pods(api.NamespaceAll).List(options) if err != nil { framework.Logf("Cannot log L7 controller output, error listing pods %v", err) return } if len(podList.Items) == 0 { framework.Logf("Loadbalancer controller pod not found") return } for _, p := range podList.Items { framework.Logf("\nLast 100 log lines of %v\n", p.Name) l, _ := framework.RunKubectl("logs", p.Name, fmt.Sprintf("--namespace=%v", ns), "-c", lbContainerName, "--tail=100") framework.Logf(l) } }
func describeIng(ns string) { framework.Logf("\nOutput of kubectl describe ing:\n") desc, _ := framework.RunKubectl( "describe", "ing", fmt.Sprintf("--namespace=%v", ns)) framework.Logf(desc) }
c: client, } ingController.init() // If we somehow get the same namespace uid as someone else in this // gce project, just back off. Expect(ingController.Cleanup(false)).NotTo(HaveOccurred()) responseTimes = []time.Duration{} creationTimes = []time.Duration{} }) AfterEach(func() { framework.Logf("Average creation time %+v, health check time %+v", creationTimes, responseTimes) if CurrentGinkgoTestDescription().Failed { kubectlLogLBController(client, ns) framework.Logf("\nOutput of kubectl describe ing:\n") desc, _ := framework.RunKubectl("describe", "ing", fmt.Sprintf("--namespace=%v", ns)) framework.Logf(desc) } // Delete all Ingress, then wait for the controller to cleanup. ings, err := client.Extensions().Ingress(ns).List(api.ListOptions{}) if err != nil { framework.Logf("WARNING: Failed to list ingress: %+v", err) } else { for _, ing := range ings.Items { framework.Logf("Deleting ingress %v/%v", ing.Namespace, ing.Name) if err := client.Extensions().Ingress(ns).Delete(ing.Name, nil); err != nil { framework.Logf("WARNING: Failed to delete ingress %v: %v", ing.Name, err) } } } pollErr := wait.Poll(5*time.Second, lbCleanupTimeout, func() (bool, error) {
// podExec wraps RunKubectl to execute a bash cmd in target pod func podExec(pod *v1.Pod, bashExec string) (string, error) { return framework.RunKubectl("exec", fmt.Sprintf("--namespace=%s", pod.Namespace), pod.Name, "--", "/bin/sh", "-c", bashExec) }