diff --git a/cli/pkg/bootstrap/os/module.go b/cli/pkg/bootstrap/os/module.go index de50ba900..0f136cf4e 100644 --- a/cli/pkg/bootstrap/os/module.go +++ b/cli/pkg/bootstrap/os/module.go @@ -166,6 +166,15 @@ func (c *ConfigureOSModule) Init() { Parallel: true, } + symlinkSysconf := &task.RemoteTask{ + Name: "SymlinkSysconf", + Desc: "Create symbolic link to sysconf if non-existing", + Hosts: c.Runtime.GetAllHosts(), + Prepare: &kubernetes.NodeInCluster{Not: true}, + Action: new(SymLinkSysconf), + Parallel: true, + } + ConfigureNtpServer := &task.RemoteTask{ Name: "ConfigureNtpServer", Desc: "configure the ntp server for each node", @@ -191,6 +200,7 @@ func (c *ConfigureOSModule) Init() { initOS, GenerateScript, ExecScript, + symlinkSysconf, ConfigureNtpServer, configureSwap, } diff --git a/cli/pkg/bootstrap/os/tasks.go b/cli/pkg/bootstrap/os/tasks.go index f6ae6c8ac..d627c9d3b 100644 --- a/cli/pkg/bootstrap/os/tasks.go +++ b/cli/pkg/bootstrap/os/tasks.go @@ -371,6 +371,35 @@ func (n *NodeExecScript) Execute(runtime connector.Runtime) error { return nil } +type SymLinkSysconf struct { + common.KubeAction +} + +func (a *SymLinkSysconf) Execute(runtime connector.Runtime) error { + sysconfPath := "/etc/sysctl.conf" + sysconfSymLinkPath := "/etc/sysctl.d/99-sysctl.conf" + linkExists, err := runtime.GetRunner().FileExist(sysconfSymLinkPath) + if err != nil { + return fmt.Errorf("failed to check if %s exists", sysconfSymLinkPath) + } + if linkExists { + return nil + } + sysconfDir := filepath.Dir(sysconfSymLinkPath) + dirExists, err := runtime.GetRunner().DirExist(sysconfDir) + if err != nil { + return fmt.Errorf("failed to check if %s exists", sysconfDir) + } + if !dirExists { + err = runtime.GetRunner().MkDir(sysconfDir) + if err != nil { + return err + } + } + _, err = runtime.GetRunner().SudoCmd(fmt.Sprintf("ln -s %s %s", sysconfPath, sysconfSymLinkPath), true, false) + return err +} + var ( etcdFiles = []string{ "/usr/local/bin/etcd",