From 7cad3db2511e79935271311ed188b606ca5d560f Mon Sep 17 00:00:00 2001 From: Derek Nola Date: Mon, 6 Feb 2023 10:39:46 -0800 Subject: [PATCH] E2E: Consoldiate docker and prefer bundled tests into new startup test (#6851) * Convert docker E2E to startup E2E * Move preferedbundled into the e2e startup test Signed-off-by: Derek Nola --- tests/e2e/docker/Vagrantfile | 76 ------- tests/e2e/docker/docker_test.go | 93 --------- tests/e2e/preferbundled/preferbundled_test.go | 93 --------- tests/e2e/scripts/run_tests.sh | 7 +- .../{preferbundled => startup}/Vagrantfile | 18 +- tests/e2e/startup/startup_test.go | 187 ++++++++++++++++++ tests/e2e/testutils.go | 5 +- 7 files changed, 202 insertions(+), 277 deletions(-) delete mode 100644 tests/e2e/docker/Vagrantfile delete mode 100644 tests/e2e/docker/docker_test.go delete mode 100644 tests/e2e/preferbundled/preferbundled_test.go rename tests/e2e/{preferbundled => startup}/Vagrantfile (87%) create mode 100644 tests/e2e/startup/startup_test.go diff --git a/tests/e2e/docker/Vagrantfile b/tests/e2e/docker/Vagrantfile deleted file mode 100644 index 9003306fc1..0000000000 --- a/tests/e2e/docker/Vagrantfile +++ /dev/null @@ -1,76 +0,0 @@ -ENV['VAGRANT_NO_PARALLEL'] = 'no' -NODE_ROLES = (ENV['E2E_NODE_ROLES'] || - ["server-0", "agent-0"]) -NODE_BOXES = (ENV['E2E_NODE_BOXES'] || - ['generic/ubuntu2004', 'generic/ubuntu2004', 'generic/ubuntu2004']) -GITHUB_BRANCH = (ENV['E2E_GITHUB_BRANCH'] || "master") -RELEASE_VERSION = (ENV['E2E_RELEASE_VERSION'] || "") -NODE_CPUS = (ENV['E2E_NODE_CPUS'] || 2).to_i -NODE_MEMORY = (ENV['E2E_NODE_MEMORY'] || 2048).to_i -# Virtualbox >= 6.1.28 require `/etc/vbox/network.conf` for expanded private networks -NETWORK_PREFIX = "10.10.10" -install_type = "" - -def provision(vm, role, role_num, node_num) - vm.box = NODE_BOXES[node_num] - vm.hostname = role - # An expanded netmask is required to allow VM<-->VM communication, virtualbox defaults to /32 - vm.network "private_network", ip: "#{NETWORK_PREFIX}.#{100+node_num}", netmask: "255.255.255.0" - - vagrant_defaults = '../vagrantdefaults.rb' - load vagrant_defaults if File.exists?(vagrant_defaults) - - defaultOSConfigure(vm) - dockerInstall(vm) - install_type = getInstallType(vm, RELEASE_VERSION, GITHUB_BRANCH) - - vm.provision "shell", inline: "ping -c 2 k3s.io" - - if role.include?("server") - vm.provision 'k3s-install', type: 'k3s', run: 'once' do |k3s| - k3s.args = %W[server --node-external-ip=#{NETWORK_PREFIX}.100 --flannel-iface=eth1 --docker] - k3s.env = %W[K3S_KUBECONFIG_MODE=0644 K3S_TOKEN=vagrant #{install_type}] - k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321 - end - elsif role.include?("agent") - vm.provision 'k3s-install', type: 'k3s', run: 'once' do |k3s| - k3s.args = %W[agent --server https://#{NETWORK_PREFIX}.100:6443 --flannel-iface=eth1 --docker] - k3s.env = %W[K3S_KUBECONFIG_MODE=0644 K3S_TOKEN=vagrant #{install_type}] - k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321 - end - end - - if vm.box.to_s.include?("microos") - vm.provision 'k3s-reload', type: 'reload', run: 'once' - end -end - -Vagrant.configure("2") do |config| - config.vagrant.plugins = ["vagrant-k3s", "vagrant-reload"] - # Default provider is libvirt, virtualbox is only provided as a backup - config.vm.provider "libvirt" do |v| - v.cpus = NODE_CPUS - v.memory = NODE_MEMORY - end - config.vm.provider "virtualbox" do |v| - v.cpus = NODE_CPUS - v.memory = NODE_MEMORY - end - - if NODE_ROLES.kind_of?(String) - NODE_ROLES = NODE_ROLES.split(" ", -1) - end - if NODE_BOXES.kind_of?(String) - NODE_BOXES = NODE_BOXES.split(" ", -1) - end - - # Must iterate on the index, vagrant does not understand iterating - # over the node roles themselves - NODE_ROLES.length.times do |i| - name = NODE_ROLES[i] - role_num = name.split("-", -1).pop.to_i - config.vm.define name do |node| - provision(node.vm, name, role_num, i) - end - end -end diff --git a/tests/e2e/docker/docker_test.go b/tests/e2e/docker/docker_test.go deleted file mode 100644 index 0c4dc7ba24..0000000000 --- a/tests/e2e/docker/docker_test.go +++ /dev/null @@ -1,93 +0,0 @@ -package docker - -import ( - "flag" - "fmt" - "os" - "strings" - "testing" - - "github.com/k3s-io/k3s/tests/e2e" - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" -) - -// Valid nodeOS: generic/ubuntu2004, opensuse/Leap-15.3.x86_64 -var nodeOS = flag.String("nodeOS", "generic/ubuntu2004", "VM operating system") -var serverCount = flag.Int("serverCount", 1, "number of server nodes") -var agentCount = flag.Int("agentCount", 1, "number of agent nodes") -var ci = flag.Bool("ci", false, "running on CI") - -// Environment Variables Info: -// E2E_RELEASE_VERSION=v1.23.1+k3s2 or nil for latest commit from master - -func Test_E2EDockerCRIValidation(t *testing.T) { - RegisterFailHandler(Fail) - flag.Parse() - suiteConfig, reporterConfig := GinkgoConfiguration() - RunSpecs(t, "Docker CRI Test Suite", suiteConfig, reporterConfig) -} - -var ( - kubeConfigFile string - serverNodeNames []string - agentNodeNames []string -) - -var _ = ReportAfterEach(e2e.GenReport) - -var _ = Describe("Verify CRI-Dockerd", Ordered, func() { - Context("Cluster :", func() { - It("Starts up with no issues", func() { - var err error - serverNodeNames, agentNodeNames, err = e2e.CreateCluster(*nodeOS, *serverCount, *agentCount) - Expect(err).NotTo(HaveOccurred(), e2e.GetVagrantLog(err)) - fmt.Println("CLUSTER CONFIG") - fmt.Println("OS:", *nodeOS) - fmt.Println("Server Nodes:", serverNodeNames) - fmt.Println("Agent Nodes:", agentNodeNames) - kubeConfigFile, err = e2e.GenKubeConfigFile(serverNodeNames[0]) - Expect(err).NotTo(HaveOccurred()) - }) - - It("Checks node and pod status", func() { - fmt.Printf("\nFetching node status\n") - Eventually(func(g Gomega) { - nodes, err := e2e.ParseNodes(kubeConfigFile, false) - g.Expect(err).NotTo(HaveOccurred()) - for _, node := range nodes { - g.Expect(node.Status).Should(Equal("Ready")) - } - }, "620s", "5s").Should(Succeed()) - _, _ = e2e.ParseNodes(kubeConfigFile, true) - - fmt.Printf("\nFetching pods status\n") - Eventually(func(g Gomega) { - pods, err := e2e.ParsePods(kubeConfigFile, false) - g.Expect(err).NotTo(HaveOccurred()) - for _, pod := range pods { - if strings.Contains(pod.Name, "helm-install") { - g.Expect(pod.Status).Should(Equal("Completed"), pod.Name) - } else { - g.Expect(pod.Status).Should(Equal("Running"), pod.Name) - } - } - }, "620s", "5s").Should(Succeed()) - _, _ = e2e.ParsePods(kubeConfigFile, true) - }) - }) -}) - -var failed bool -var _ = AfterEach(func() { - failed = failed || CurrentSpecReport().Failed() -}) - -var _ = AfterSuite(func() { - if failed && !*ci { - fmt.Println("FAILED!") - } else { - Expect(e2e.DestroyCluster()).To(Succeed()) - Expect(os.Remove(kubeConfigFile)).To(Succeed()) - } -}) diff --git a/tests/e2e/preferbundled/preferbundled_test.go b/tests/e2e/preferbundled/preferbundled_test.go deleted file mode 100644 index 2c62e258d5..0000000000 --- a/tests/e2e/preferbundled/preferbundled_test.go +++ /dev/null @@ -1,93 +0,0 @@ -package preferbundled - -import ( - "flag" - "fmt" - "os" - "strings" - "testing" - - "github.com/k3s-io/k3s/tests/e2e" - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" -) - -// Valid nodeOS: generic/ubuntu2004, opensuse/Leap-15.3.x86_64 -var nodeOS = flag.String("nodeOS", "generic/ubuntu2004", "VM operating system") -var serverCount = flag.Int("serverCount", 1, "number of server nodes") -var agentCount = flag.Int("agentCount", 1, "number of agent nodes") -var ci = flag.Bool("ci", false, "running on CI") - -// Environment Variables Info: -// E2E_RELEASE_VERSION=v1.23.1+k3s2 or nil for latest commit from master - -func Test_E2EPreferBundled(t *testing.T) { - RegisterFailHandler(Fail) - flag.Parse() - suiteConfig, reporterConfig := GinkgoConfiguration() - RunSpecs(t, "Prefer Bundled Binaries Test Suite", suiteConfig, reporterConfig) -} - -var ( - kubeConfigFile string - serverNodeNames []string - agentNodeNames []string -) - -var _ = ReportAfterEach(e2e.GenReport) - -var _ = Describe("Verify prefer-bundled-bin flag", Ordered, func() { - Context("Cluster :", func() { - It("Starts up with no issues", func() { - var err error - serverNodeNames, agentNodeNames, err = e2e.CreateCluster(*nodeOS, *serverCount, *agentCount) - Expect(err).NotTo(HaveOccurred(), e2e.GetVagrantLog(err)) - fmt.Println("CLUSTER CONFIG") - fmt.Println("OS:", *nodeOS) - fmt.Println("Server Nodes:", serverNodeNames) - fmt.Println("Agent Nodes:", agentNodeNames) - kubeConfigFile, err = e2e.GenKubeConfigFile(serverNodeNames[0]) - Expect(err).NotTo(HaveOccurred()) - }) - - It("Checks node and pod status", func() { - fmt.Printf("\nFetching node status\n") - Eventually(func(g Gomega) { - nodes, err := e2e.ParseNodes(kubeConfigFile, false) - g.Expect(err).NotTo(HaveOccurred()) - for _, node := range nodes { - g.Expect(node.Status).Should(Equal("Ready")) - } - }, "620s", "5s").Should(Succeed()) - _, _ = e2e.ParseNodes(kubeConfigFile, true) - - fmt.Printf("\nFetching pods status\n") - Eventually(func(g Gomega) { - pods, err := e2e.ParsePods(kubeConfigFile, false) - g.Expect(err).NotTo(HaveOccurred()) - for _, pod := range pods { - if strings.Contains(pod.Name, "helm-install") { - g.Expect(pod.Status).Should(Equal("Completed"), pod.Name) - } else { - g.Expect(pod.Status).Should(Equal("Running"), pod.Name) - } - } - }, "620s", "5s").Should(Succeed()) - _, _ = e2e.ParsePods(kubeConfigFile, true) - }) - }) -}) - -var failed bool -var _ = AfterEach(func() { - failed = failed || CurrentSpecReport().Failed() -}) - -var _ = AfterSuite(func() { - if failed && !*ci { - fmt.Println("FAILED!") - } else { - Expect(e2e.DestroyCluster()).To(Succeed()) - Expect(os.Remove(kubeConfigFile)).To(Succeed()) - } -}) diff --git a/tests/e2e/scripts/run_tests.sh b/tests/e2e/scripts/run_tests.sh index 92885fd30b..cbf73af92f 100755 --- a/tests/e2e/scripts/run_tests.sh +++ b/tests/e2e/scripts/run_tests.sh @@ -35,15 +35,12 @@ echo 'RUN CLUSTER RESET TEST' echo 'RUNNING SPLIT SERVER VALIDATION TEST' E2E_HARDENED="$hardened" /usr/local/go/bin/go test -v splitserver/splitserver_test.go -nodeOS="$nodeOS" -timeout=30m -json -ci | tee -a k3s_"$OS".log -echo 'RUNNING DOCKER CRI VALIDATION TEST' -/usr/local/go/bin/go test -v docker/docker_test.go -nodeOS="$nodeOS" -serverCount=1 -agentCount=1 -timeout=30m -json -ci | tee -a k3s_"$OS".log +echo 'RUNNING STARTUP VALIDATION TEST' +/usr/local/go/bin/go test -v startup/startup_test.go -nodeOS="$nodeOS" -timeout=30m -json -ci | tee -a k3s_"$OS".log echo 'RUNNING EXTERNAL IP TEST' /usr/local/go/bin/go test -v externalip/externalip_test.go -nodeOS="$nodeOS" -serverCount=1 -agentCount=1 -timeout=30m -json -ci | tee -a k3s_"$OS".log -echo 'RUNNING PRE-BUNDLED-BIN IP TEST' -/usr/local/go/bin/go test -v preferbundled/preferbundled_test.go -nodeOS="$nodeOS" -serverCount=1 -agentCount=1 -timeout=30m -json -ci | tee -a k3s_"$OS".log - echo 'RUNNING SNAPSHOT AND RESTORE TEST' /usr/local/go/bin/go test -v snapshotrestore/snapshotrestore_test.go -nodeOS="$nodeOS" -serverCount=1 -agentCount=1 -timeout=30m -json -ci | tee -a k3s_"$OS".log diff --git a/tests/e2e/preferbundled/Vagrantfile b/tests/e2e/startup/Vagrantfile similarity index 87% rename from tests/e2e/preferbundled/Vagrantfile rename to tests/e2e/startup/Vagrantfile index 92de4c2ebd..37b441e064 100644 --- a/tests/e2e/preferbundled/Vagrantfile +++ b/tests/e2e/startup/Vagrantfile @@ -2,7 +2,7 @@ ENV['VAGRANT_NO_PARALLEL'] = 'no' NODE_ROLES = (ENV['E2E_NODE_ROLES'] || ["server-0", "agent-0"]) NODE_BOXES = (ENV['E2E_NODE_BOXES'] || - ['generic/ubuntu2004', 'generic/ubuntu2004', 'generic/ubuntu2004']) + ['generic/ubuntu2004', 'generic/ubuntu2004']) GITHUB_BRANCH = (ENV['E2E_GITHUB_BRANCH'] || "master") RELEASE_VERSION = (ENV['E2E_RELEASE_VERSION'] || "") NODE_CPUS = (ENV['E2E_NODE_CPUS'] || 2).to_i @@ -11,7 +11,6 @@ NODE_MEMORY = (ENV['E2E_NODE_MEMORY'] || 2048).to_i NETWORK_PREFIX = "10.10.10" install_type = "" - def provision(vm, role, role_num, node_num) vm.box = NODE_BOXES[node_num] vm.hostname = role @@ -22,32 +21,33 @@ def provision(vm, role, role_num, node_num) load vagrant_defaults if File.exists?(vagrant_defaults) defaultOSConfigure(vm) + dockerInstall(vm) install_type = getInstallType(vm, RELEASE_VERSION, GITHUB_BRANCH) + node_ip = "#{NETWORK_PREFIX}.#{100+node_num}" vm.provision "shell", inline: "ping -c 2 k3s.io" if role.include?("server") vm.provision 'k3s-install', type: 'k3s', run: 'once' do |k3s| - k3s.args = "server" - k3s.env = %W[K3S_KUBECONFIG_MODE=0644 #{install_type}] + k3s.args = "server " + k3s.env = %W[K3S_KUBECONFIG_MODE=0644 #{install_type} INSTALL_K3S_SKIP_START=true] k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321 k3s.config = <<~YAML token: vagrant - flannel-iface: eth1 node-external-ip: #{NETWORK_PREFIX}.100 - prefer-bundled-bin: true + flannel-iface: eth1 YAML end elsif role.include?("agent") vm.provision 'k3s-install', type: 'k3s', run: 'once' do |k3s| - k3s.args = "agent" - k3s.env = %W[K3S_KUBECONFIG_MODE=0644 K3S_TOKEN=vagrant #{install_type}] + k3s.args = "agent " + k3s.env = %W[K3S_KUBECONFIG_MODE=0644 #{install_type} INSTALL_K3S_SKIP_START=true] k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321 k3s.config = <<~YAML server: "https://#{NETWORK_PREFIX}.100:6443" token: vagrant + node-external-ip: #{node_ip} flannel-iface: eth1 - prefer-bundled-bin: true YAML end end diff --git a/tests/e2e/startup/startup_test.go b/tests/e2e/startup/startup_test.go new file mode 100644 index 0000000000..c87fa7ed4a --- /dev/null +++ b/tests/e2e/startup/startup_test.go @@ -0,0 +1,187 @@ +package startup + +import ( + "flag" + "fmt" + "os" + "strings" + "testing" + + "github.com/k3s-io/k3s/tests/e2e" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +// Valid nodeOS: generic/ubuntu2004, opensuse/Leap-15.3.x86_64 +var nodeOS = flag.String("nodeOS", "generic/ubuntu2004", "VM operating system") +var ci = flag.Bool("ci", false, "running on CI") + +// Environment Variables Info: +// E2E_RELEASE_VERSION=v1.23.1+k3s2 or nil for latest commit from master + +// This test suite is used to verify that K3s can start up with dynamic configurations that require +// both server and agent nodes. It is unique in passing dynamic arguments to vagrant, unlike the +// rest of the E2E tests, which use static Vagrantfiles and cluster configurations. +// If you have a server only flag, the startup integration test is a better place to test it. + +func Test_E2EStartupValidation(t *testing.T) { + RegisterFailHandler(Fail) + flag.Parse() + suiteConfig, reporterConfig := GinkgoConfiguration() + RunSpecs(t, "Startup Test Suite", suiteConfig, reporterConfig) +} + +var ( + kubeConfigFile string + serverNodeNames []string + agentNodeNames []string +) + +func StartK3sCluster(nodes []string, serverYAML string, agentYAML string) error { + + for _, node := range nodes { + var yamlCmd string + var resetCmd string + var startCmd string + if strings.Contains(node, "server") { + resetCmd = "sudo head -n 3 /etc/rancher/k3s/config.yaml > /tmp/config.yaml && sudo mv /tmp/config.yaml /etc/rancher/k3s/config.yaml" + yamlCmd = fmt.Sprintf("sudo echo '%s' >> /etc/rancher/k3s/config.yaml", serverYAML) + startCmd = "sudo systemctl start k3s" + } else { + resetCmd = "sudo head -n 4 /etc/rancher/k3s/config.yaml > /tmp/config.yaml && sudo mv /tmp/config.yaml /etc/rancher/k3s/config.yaml" + yamlCmd = fmt.Sprintf("sudo echo '%s' >> /etc/rancher/k3s/config.yaml", agentYAML) + startCmd = "sudo systemctl start k3s-agent" + } + if _, err := e2e.RunCmdOnNode(resetCmd, node); err != nil { + return err + } + if _, err := e2e.RunCmdOnNode(yamlCmd, node); err != nil { + return err + } + if _, err := e2e.RunCmdOnNode(startCmd, node); err != nil { + return &e2e.NodeError{Node: node, Cmd: startCmd, Err: err} + } + } + return nil +} + +func KillK3sCluster(nodes []string) error { + for _, node := range nodes { + if _, err := e2e.RunCmdOnNode("sudo k3s-killall.sh", node); err != nil { + return err + } + } + return nil +} + +var _ = ReportAfterEach(e2e.GenReport) + +var _ = Describe("Various Startup Configurations", Ordered, func() { + Context("Verify CRI-Dockerd :", func() { + It("Stands up the nodes", func() { + var err error + serverNodeNames, agentNodeNames, err = e2e.CreateLocalCluster(*nodeOS, 1, 1) + Expect(err).NotTo(HaveOccurred(), e2e.GetVagrantLog(err)) + }) + It("Starts K3s with no issues", func() { + dockerYAML := "docker: true" + err := StartK3sCluster(append(serverNodeNames, agentNodeNames...), dockerYAML, dockerYAML) + Expect(err).NotTo(HaveOccurred(), e2e.GetVagrantLog(err)) + + fmt.Println("CLUSTER CONFIG") + fmt.Println("OS:", *nodeOS) + fmt.Println("Server Nodes:", serverNodeNames) + fmt.Println("Agent Nodes:", agentNodeNames) + kubeConfigFile, err = e2e.GenKubeConfigFile(serverNodeNames[0]) + Expect(err).NotTo(HaveOccurred()) + }) + + It("Checks node and pod status", func() { + fmt.Printf("\nFetching node status\n") + Eventually(func(g Gomega) { + nodes, err := e2e.ParseNodes(kubeConfigFile, false) + g.Expect(err).NotTo(HaveOccurred()) + for _, node := range nodes { + g.Expect(node.Status).Should(Equal("Ready")) + } + }, "620s", "5s").Should(Succeed()) + _, _ = e2e.ParseNodes(kubeConfigFile, true) + + fmt.Printf("\nFetching pods status\n") + Eventually(func(g Gomega) { + pods, err := e2e.ParsePods(kubeConfigFile, false) + g.Expect(err).NotTo(HaveOccurred()) + for _, pod := range pods { + if strings.Contains(pod.Name, "helm-install") { + g.Expect(pod.Status).Should(Equal("Completed"), pod.Name) + } else { + g.Expect(pod.Status).Should(Equal("Running"), pod.Name) + } + } + }, "620s", "5s").Should(Succeed()) + _, _ = e2e.ParsePods(kubeConfigFile, true) + }) + It("Kills the cluster", func() { + err := KillK3sCluster(append(serverNodeNames, agentNodeNames...)) + Expect(err).NotTo(HaveOccurred()) + }) + }) + Context("Verify prefer-bundled-bin flag", func() { + It("Starts K3s with no issues", func() { + preferBundledYAML := "prefer-bundled-bin: true" + err := StartK3sCluster(append(serverNodeNames, agentNodeNames...), preferBundledYAML, preferBundledYAML) + Expect(err).NotTo(HaveOccurred(), e2e.GetVagrantLog(err)) + + fmt.Println("CLUSTER CONFIG") + fmt.Println("OS:", *nodeOS) + fmt.Println("Server Nodes:", serverNodeNames) + fmt.Println("Agent Nodes:", agentNodeNames) + kubeConfigFile, err = e2e.GenKubeConfigFile(serverNodeNames[0]) + Expect(err).NotTo(HaveOccurred()) + }) + + It("Checks node and pod status", func() { + fmt.Printf("\nFetching node status\n") + Eventually(func(g Gomega) { + nodes, err := e2e.ParseNodes(kubeConfigFile, false) + g.Expect(err).NotTo(HaveOccurred()) + for _, node := range nodes { + g.Expect(node.Status).Should(Equal("Ready")) + } + }, "620s", "5s").Should(Succeed()) + _, _ = e2e.ParseNodes(kubeConfigFile, true) + + fmt.Printf("\nFetching pods status\n") + Eventually(func(g Gomega) { + pods, err := e2e.ParsePods(kubeConfigFile, false) + g.Expect(err).NotTo(HaveOccurred()) + for _, pod := range pods { + if strings.Contains(pod.Name, "helm-install") { + g.Expect(pod.Status).Should(Equal("Completed"), pod.Name) + } else { + g.Expect(pod.Status).Should(Equal("Running"), pod.Name) + } + } + }, "620s", "5s").Should(Succeed()) + _, _ = e2e.ParsePods(kubeConfigFile, true) + }) + It("Kills the cluster", func() { + err := KillK3sCluster(append(serverNodeNames, agentNodeNames...)) + Expect(err).NotTo(HaveOccurred()) + }) + }) +}) + +var failed bool +var _ = AfterEach(func() { + failed = failed || CurrentSpecReport().Failed() +}) + +var _ = AfterSuite(func() { + if failed && !*ci { + fmt.Println("FAILED!") + } else { + Expect(e2e.DestroyCluster()).To(Succeed()) + Expect(os.Remove(kubeConfigFile)).To(Succeed()) + } +}) diff --git a/tests/e2e/testutils.go b/tests/e2e/testutils.go index 02b4a9b485..061c428c67 100644 --- a/tests/e2e/testutils.go +++ b/tests/e2e/testutils.go @@ -308,7 +308,7 @@ func GetVagrantLog(cErr error) string { var nodeErr *NodeError nodeJournal := "" if errors.As(cErr, &nodeErr) { - nodeJournal, _ = RunCommand("vagrant ssh " + nodeErr.Node + " -c \"sudo journalctl -u k3s* --no-pager\"") + nodeJournal, _ = RunCmdOnNode("sudo journalctl -u k3s* --no-pager", nodeErr.Node) nodeJournal = "\nNode Journal Logs:\n" + nodeJournal } @@ -368,6 +368,9 @@ func ParsePods(kubeConfig string, print bool) ([]Pod, error) { split := strings.Split(res, "\n") for _, rec := range split { fields := strings.Fields(string(rec)) + if len(fields) < 8 { + return nil, fmt.Errorf("invalid pod record: %s", rec) + } pod := Pod{ NameSpace: fields[0], Name: fields[1],