Commit e9cf3a7a authored by Brad Davidson's avatar Brad Davidson Committed by Brad Davidson

Tail journald logs into report on suite failure

parent 45195e26
...@@ -195,7 +195,9 @@ var _ = AfterEach(func() { ...@@ -195,7 +195,9 @@ var _ = AfterEach(func() {
}) })
var _ = AfterSuite(func() { var _ = AfterSuite(func() {
if !failed { if failed {
AddReportEntry("journald-logs", e2e.TailJournalLogs(1000, append(serverNodeNames, agentNodeNames...)))
} else {
Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed()) Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed())
} }
if !failed || *ci { if !failed || *ci {
......
...@@ -146,7 +146,9 @@ var _ = AfterEach(func() { ...@@ -146,7 +146,9 @@ var _ = AfterEach(func() {
}) })
var _ = AfterSuite(func() { var _ = AfterSuite(func() {
if !failed { if failed {
AddReportEntry("journald-logs", e2e.TailJournalLogs(1000, append(serverNodeNames, agentNodeNames...)))
} else {
Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed()) Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed())
} }
if !failed || *ci { if !failed || *ci {
......
...@@ -165,7 +165,9 @@ var _ = AfterEach(func() { ...@@ -165,7 +165,9 @@ var _ = AfterEach(func() {
}) })
var _ = AfterSuite(func() { var _ = AfterSuite(func() {
if !failed { if failed {
AddReportEntry("journald-logs", e2e.TailJournalLogs(1000, append(serverNodeNames, agentNodeNames...)))
} else {
Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed()) Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed())
} }
if !failed || *ci { if !failed || *ci {
......
...@@ -149,8 +149,9 @@ var _ = AfterEach(func() { ...@@ -149,8 +149,9 @@ var _ = AfterEach(func() {
}) })
var _ = AfterSuite(func() { var _ = AfterSuite(func() {
if failed {
if !failed { AddReportEntry("journald-logs", e2e.TailJournalLogs(1000, append(serverNodeNames, agentNodeNames...)))
} else {
Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed()) Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed())
} }
if !failed || *ci { if !failed || *ci {
......
...@@ -167,7 +167,9 @@ var _ = AfterEach(func() { ...@@ -167,7 +167,9 @@ var _ = AfterEach(func() {
}) })
var _ = AfterSuite(func() { var _ = AfterSuite(func() {
if !failed { if failed {
AddReportEntry("journald-logs", e2e.TailJournalLogs(1000, serverNodeNames))
} else {
Expect(e2e.GetCoverageReport(serverNodeNames)).To(Succeed()) Expect(e2e.GetCoverageReport(serverNodeNames)).To(Succeed())
} }
if !failed || *ci { if !failed || *ci {
......
...@@ -138,7 +138,9 @@ var _ = AfterEach(func() { ...@@ -138,7 +138,9 @@ var _ = AfterEach(func() {
}) })
var _ = AfterSuite(func() { var _ = AfterSuite(func() {
if !failed { if failed {
AddReportEntry("journald-logs", e2e.TailJournalLogs(1000, append(serverNodeNames, agentNodeNames...)))
} else {
Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed()) Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed())
} }
if !failed || *ci { if !failed || *ci {
......
...@@ -175,8 +175,9 @@ var _ = AfterEach(func() { ...@@ -175,8 +175,9 @@ var _ = AfterEach(func() {
}) })
var _ = AfterSuite(func() { var _ = AfterSuite(func() {
if failed {
if !failed { AddReportEntry("journald-logs", e2e.TailJournalLogs(1000, append(serverNodeNames, agentNodeNames...)))
} else {
Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed()) Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed())
} }
if !failed || *ci { if !failed || *ci {
......
...@@ -221,7 +221,9 @@ var _ = AfterEach(func() { ...@@ -221,7 +221,9 @@ var _ = AfterEach(func() {
}) })
var _ = AfterSuite(func() { var _ = AfterSuite(func() {
if !failed { if failed {
AddReportEntry("journald-logs", e2e.TailJournalLogs(1000, serverNodeNames))
} else {
Expect(e2e.GetCoverageReport(serverNodeNames)).To(Succeed()) Expect(e2e.GetCoverageReport(serverNodeNames)).To(Succeed())
} }
if !failed || *ci { if !failed || *ci {
......
...@@ -306,7 +306,9 @@ var _ = AfterEach(func() { ...@@ -306,7 +306,9 @@ var _ = AfterEach(func() {
}) })
var _ = AfterSuite(func() { var _ = AfterSuite(func() {
if !failed { if failed {
AddReportEntry("journald-logs", e2e.TailJournalLogs(1000, append(serverNodeNames, agentNodeNames...)))
} else {
Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed()) Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed())
} }
if !failed || *ci { if !failed || *ci {
......
...@@ -283,9 +283,11 @@ var _ = AfterEach(func() { ...@@ -283,9 +283,11 @@ var _ = AfterEach(func() {
}) })
var _ = AfterSuite(func() { var _ = AfterSuite(func() {
if !failed { allNodes := append(cpNodeNames, etcdNodeNames...)
allNodes := append(cpNodeNames, etcdNodeNames...) allNodes = append(allNodes, agentNodeNames...)
allNodes = append(allNodes, agentNodeNames...) if failed {
AddReportEntry("journald-logs", e2e.TailJournalLogs(1000, allNodes))
} else {
Expect(e2e.GetCoverageReport(allNodes)).To(Succeed()) Expect(e2e.GetCoverageReport(allNodes)).To(Succeed())
} }
if !failed || *ci { if !failed || *ci {
......
...@@ -310,7 +310,9 @@ var _ = AfterEach(func() { ...@@ -310,7 +310,9 @@ var _ = AfterEach(func() {
}) })
var _ = AfterSuite(func() { var _ = AfterSuite(func() {
if !failed { if failed {
AddReportEntry("journald-logs", e2e.TailJournalLogs(1000, append(serverNodeNames, agentNodeNames...)))
} else {
Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed()) Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed())
} }
if !failed || *ci { if !failed || *ci {
......
...@@ -128,7 +128,7 @@ var _ = Describe("Verify Services Traffic policies and firewall config", Ordered ...@@ -128,7 +128,7 @@ var _ = Describe("Verify Services Traffic policies and firewall config", Ordered
Eventually(func(g Gomega) { Eventually(func(g Gomega) {
externalIPs, _ := e2e.FetchExternalIPs(kubeConfigFile, lbSvcExt) externalIPs, _ := e2e.FetchExternalIPs(kubeConfigFile, lbSvcExt)
g.Expect(externalIPs).To(HaveLen(1), "more than 1 exernalIP found") g.Expect(externalIPs).To(HaveLen(1), "more than 1 exernalIP found")
g.Expect(externalIPs[0]).To(Equal(serverNodeIP),"external IP does not match servernodeIP") g.Expect(externalIPs[0]).To(Equal(serverNodeIP), "external IP does not match servernodeIP")
}, "25s", "5s").Should(Succeed()) }, "25s", "5s").Should(Succeed())
}) })
...@@ -154,7 +154,6 @@ var _ = Describe("Verify Services Traffic policies and firewall config", Ordered ...@@ -154,7 +154,6 @@ var _ = Describe("Verify Services Traffic policies and firewall config", Ordered
return e2e.RunCommand(cmd) return e2e.RunCommand(cmd)
}, "25s", "5s").ShouldNot(ContainSubstring("10.42")) }, "25s", "5s").ShouldNot(ContainSubstring("10.42"))
// Verify connectivity to the other nodeIP does not work because of external traffic policy=local // Verify connectivity to the other nodeIP does not work because of external traffic policy=local
for _, externalIP := range lbSvcExternalIPs { for _, externalIP := range lbSvcExternalIPs {
if externalIP == lbSvcExtExternalIPs[0] { if externalIP == lbSvcExtExternalIPs[0] {
...@@ -250,7 +249,7 @@ var _ = Describe("Verify Services Traffic policies and firewall config", Ordered ...@@ -250,7 +249,7 @@ var _ = Describe("Verify Services Traffic policies and firewall config", Ordered
)) ))
// Check the non working command fails because of internal traffic policy=local // Check the non working command fails because of internal traffic policy=local
Eventually(func() (bool) { Eventually(func() bool {
_, err := e2e.RunCommand(nonWorkingCmd) _, err := e2e.RunCommand(nonWorkingCmd)
if err != nil && strings.Contains(err.Error(), "exit status") { if err != nil && strings.Contains(err.Error(), "exit status") {
// Treat exit status as a successful condition // Treat exit status as a successful condition
...@@ -348,7 +347,9 @@ var _ = AfterEach(func() { ...@@ -348,7 +347,9 @@ var _ = AfterEach(func() {
}) })
var _ = AfterSuite(func() { var _ = AfterSuite(func() {
if !failed { if failed {
AddReportEntry("journald-logs", e2e.TailJournalLogs(1000, append(serverNodeNames, agentNodeNames...)))
} else {
Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed()) Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed())
} }
if !failed || *ci { if !failed || *ci {
......
...@@ -118,7 +118,9 @@ var _ = AfterEach(func() { ...@@ -118,7 +118,9 @@ var _ = AfterEach(func() {
}) })
var _ = AfterSuite(func() { var _ = AfterSuite(func() {
if !failed { if failed {
AddReportEntry("journald-logs", e2e.TailJournalLogs(1000, append(serverNodeNames, agentNodeNames...)))
} else {
Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed()) Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed())
} }
if !failed || *ci { if !failed || *ci {
......
...@@ -48,7 +48,7 @@ type NodeError struct { ...@@ -48,7 +48,7 @@ type NodeError struct {
type SvcExternalIP struct { type SvcExternalIP struct {
IP string `json:"ip"` IP string `json:"ip"`
ipMode string `json:"ipMode"` IPMode string `json:"ipMode"`
} }
type ObjIP struct { type ObjIP struct {
...@@ -364,6 +364,19 @@ func GetJournalLogs(node string) (string, error) { ...@@ -364,6 +364,19 @@ func GetJournalLogs(node string) (string, error) {
return RunCmdOnNode(cmd, node) return RunCmdOnNode(cmd, node)
} }
func TailJournalLogs(lines int, nodes []string) string {
logs := &strings.Builder{}
for _, node := range nodes {
cmd := fmt.Sprintf("journalctl -u k3s* --no-pager --lines=%d", lines)
if l, err := RunCmdOnNode(cmd, node); err != nil {
fmt.Fprintf(logs, "** failed to read journald log for node %s ***\n%v\n", node, err)
} else {
fmt.Fprintf(logs, "** journald log for node %s ***\n%s\n", node, l)
}
}
return logs.String()
}
// GetVagrantLog returns the logs of on vagrant commands that initialize the nodes and provision K3s on each node. // GetVagrantLog returns the logs of on vagrant commands that initialize the nodes and provision K3s on each node.
// It also attempts to fetch the systemctl logs of K3s on nodes where the k3s.service failed. // It also attempts to fetch the systemctl logs of K3s on nodes where the k3s.service failed.
func GetVagrantLog(cErr error) string { func GetVagrantLog(cErr error) string {
......
...@@ -202,7 +202,9 @@ var _ = AfterEach(func() { ...@@ -202,7 +202,9 @@ var _ = AfterEach(func() {
}) })
var _ = AfterSuite(func() { var _ = AfterSuite(func() {
if !failed { if failed {
AddReportEntry("journald-logs", e2e.TailJournalLogs(1000, append(serverNodeNames, agentNodeNames...)))
} else {
Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed()) Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed())
} }
if !failed || *ci { if !failed || *ci {
......
...@@ -215,14 +215,13 @@ var _ = Describe("Verify Upgrade", Ordered, func() { ...@@ -215,14 +215,13 @@ var _ = Describe("Verify Upgrade", Ordered, func() {
}, "420s", "2s").Should(Succeed()) }, "420s", "2s").Should(Succeed())
cmd := "kubectl --kubeconfig=" + kubeConfigFile + " exec volume-test -- sh -c 'echo local-path-test > /data/test'" cmd := "kubectl --kubeconfig=" + kubeConfigFile + " exec volume-test -- sh -c 'echo local-path-test > /data/test'"
_, err = e2e.RunCommand(cmd) res, err := e2e.RunCommand(cmd)
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred(), "failed cmd: %q result: %s", cmd, res)
fmt.Println("Data stored in pvc: local-path-test") fmt.Println("Data stored in pvc: local-path-test")
cmd = "kubectl delete pod volume-test --kubeconfig=" + kubeConfigFile cmd = "kubectl delete pod volume-test --kubeconfig=" + kubeConfigFile
res, err := e2e.RunCommand(cmd) res, err = e2e.RunCommand(cmd)
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred(), "failed cmd: %q result: %s", cmd, res)
fmt.Println(res)
_, err = e2e.DeployWorkload("local-path-provisioner.yaml", kubeConfigFile, *hardened) _, err = e2e.DeployWorkload("local-path-provisioner.yaml", kubeConfigFile, *hardened)
Expect(err).NotTo(HaveOccurred(), "local-path-provisioner manifest not deployed") Expect(err).NotTo(HaveOccurred(), "local-path-provisioner manifest not deployed")
...@@ -245,7 +244,7 @@ var _ = Describe("Verify Upgrade", Ordered, func() { ...@@ -245,7 +244,7 @@ var _ = Describe("Verify Upgrade", Ordered, func() {
Eventually(func() (string, error) { Eventually(func() (string, error) {
cmd := "kubectl exec volume-test --kubeconfig=" + kubeConfigFile + " -- cat /data/test" cmd := "kubectl exec volume-test --kubeconfig=" + kubeConfigFile + " -- cat /data/test"
return e2e.RunCommand(cmd) return e2e.RunCommand(cmd)
}, "180s", "2s").Should(ContainSubstring("local-path-test")) }, "180s", "2s").Should(ContainSubstring("local-path-test"), "Failed to retrieve data from pvc")
}) })
It("Upgrades with no issues", func() { It("Upgrades with no issues", func() {
...@@ -385,7 +384,9 @@ var _ = AfterEach(func() { ...@@ -385,7 +384,9 @@ var _ = AfterEach(func() {
}) })
var _ = AfterSuite(func() { var _ = AfterSuite(func() {
if !failed { if failed {
AddReportEntry("journald-logs", e2e.TailJournalLogs(1000, append(serverNodeNames, agentNodeNames...)))
} else {
Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed()) Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed())
} }
if !failed || *ci { if !failed || *ci {
......
...@@ -381,7 +381,9 @@ var _ = AfterEach(func() { ...@@ -381,7 +381,9 @@ var _ = AfterEach(func() {
}) })
var _ = AfterSuite(func() { var _ = AfterSuite(func() {
if !failed { if failed {
AddReportEntry("journald-logs", e2e.TailJournalLogs(1000, append(serverNodeNames, agentNodeNames...)))
} else {
Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed()) Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed())
} }
if !failed || *ci { if !failed || *ci {
......
...@@ -135,10 +135,12 @@ var _ = AfterEach(func() { ...@@ -135,10 +135,12 @@ var _ = AfterEach(func() {
}) })
var _ = AfterSuite(func() { var _ = AfterSuite(func() {
if failed && !*ci { if failed {
fmt.Println("FAILED!") AddReportEntry("journald-logs", e2e.TailJournalLogs(1000, append(serverNodeNames, agentNodeNames...)))
} else { } else {
Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed()) Expect(e2e.GetCoverageReport(append(serverNodeNames, agentNodeNames...))).To(Succeed())
}
if !failed || *ci {
Expect(e2e.DestroyCluster()).To(Succeed()) Expect(e2e.DestroyCluster()).To(Succeed())
Expect(os.Remove(kubeConfigFile)).To(Succeed()) Expect(os.Remove(kubeConfigFile)).To(Succeed())
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment