package initsystem
import (
"fmt"
"os/exec"
"strings"
"k8s.io/kubernetes/cmd/kubeadm/app/util/initsystem"
)
type InitSystem interface {
// ServiceEnable tries to enable a specific service
ServiceEnable(service string) error
initsystem.InitSystem
}
type initSystem struct {
initsystem.InitSystem
}
func (s *initSystem) ServiceEnable(service string) error {
cmd := s.InitSystem.EnableCommand(service)
parts := strings.Split(cmd, " ")
if parts[0] == "systemctl" {
if err := exec.Command("systemctl", "daemon-reload").Run(); err != nil {
return fmt.Errorf("failed to reload init system: %v", err)
}
}
args := parts[1:]
// nosemgrep: go.lang.security.audit.dangerous-exec-command.dangerous-exec-command
return exec.Command(parts[0], args...).Run()
}
func GetInitSystem() (InitSystem, error) {
is, err := initsystem.GetInitSystem()
if err != nil {
return nil, err
}
return &initSystem{is}, nil
}