diff --git a/test/e2e_node/node_shutdown_linux_test.go b/test/e2e_node/node_shutdown_linux_test.go index d12b2f405b1..5e969c99863 100644 --- a/test/e2e_node/node_shutdown_linux_test.go +++ b/test/e2e_node/node_shutdown_linux_test.go @@ -21,6 +21,8 @@ package e2enode import ( "context" "fmt" + "os" + "path/filepath" "strconv" "time" @@ -180,8 +182,16 @@ var _ = SIGDescribe("GracefulNodeShutdown [Serial] [NodeAlphaFeature:GracefulNod }) ginkgo.It("after restart dbus, should be able to gracefully shutdown", func() { + // allows manual restart of dbus to work in Ubuntu. + err := overlayDbusConfig() + framework.ExpectNoError(err) + defer func() { + err := restoreDbusConfig() + framework.ExpectNoError(err) + }() + ginkgo.By("Restart Dbus") - err := restartDbus() + err = restartDbus() framework.ExpectNoError(err) ginkgo.By("Emitting Shutdown signal") @@ -261,3 +271,41 @@ func restartDbus() error { _, err := runCommand("sh", "-c", cmd) return err } + +func systemctlDaemonReload() error { + cmd := "systemctl daemon-reload" + _, err := runCommand("sh", "-c", cmd) + return err +} + +var ( + dbusConfPath = "/etc/systemd/system/dbus.service.d/k8s-graceful-node-shutdown-e2e.conf" + dbusConf = ` +[Unit] +RefuseManualStart=no +RefuseManualStop=no +[Service] +KillMode=control-group +ExecStop= +` +) + +func overlayDbusConfig() error { + err := os.MkdirAll(filepath.Dir(dbusConf), 0755) + if err != nil { + return err + } + err = os.WriteFile(dbusConfPath, []byte(dbusConf), 0644) + if err != nil { + return err + } + return systemctlDaemonReload() +} + +func restoreDbusConfig() error { + err := os.Remove(dbusConf) + if err != nil { + return err + } + return systemctlDaemonReload() +}