实现接口样例

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
}
posted @ 2026-06-30 17:32  技术颜良  阅读(6)  评论(0)    收藏  举报