From d0d8fb3a777471b2f3a0ed14dd7dee055d8d7320 Mon Sep 17 00:00:00 2001 From: Peter Hunt Date: Thu, 16 Dec 2021 17:02:27 -0500 Subject: [PATCH] use cmdrunner singleton Signed-off-by: Peter Hunt --- internal/config/node/systemd.go | 4 ++-- internal/config/nsmgr/nsmgr.go | 4 ++-- internal/dbusmgr/user.go | 6 +++--- internal/oci/runtime_oci.go | 11 ++++++----- .../runtimehandlerhooks/high_performance_hooks.go | 3 ++- internal/runtimehandlerhooks/utils.go | 6 +++--- utils/utils.go | 4 ++-- 7 files changed, 20 insertions(+), 18 deletions(-) diff --git a/internal/config/node/systemd.go b/internal/config/node/systemd.go index fdd9ec049ba..3d0eacdb4dc 100644 --- a/internal/config/node/systemd.go +++ b/internal/config/node/systemd.go @@ -4,9 +4,9 @@ package node import ( - "os/exec" "sync" + "github.com/cri-o/cri-o/utils/cmdrunner" "github.com/pkg/errors" ) @@ -37,7 +37,7 @@ func SystemdHasAllowedCPUs() bool { // systemdSupportsProperty checks whether systemd supports a property // It returns an error if it does not. func systemdSupportsProperty(property string) (bool, error) { - output, err := exec.Command("systemctl", "show", "-p", property, "systemd").Output() + output, err := cmdrunner.Command("systemctl", "show", "-p", property, "systemd").Output() if err != nil { return false, errors.Wrapf(err, "check systemd %s", property) } diff --git a/internal/config/nsmgr/nsmgr.go b/internal/config/nsmgr/nsmgr.go index dc64cbc939c..829858d794b 100644 --- a/internal/config/nsmgr/nsmgr.go +++ b/internal/config/nsmgr/nsmgr.go @@ -4,7 +4,6 @@ import ( "bytes" "fmt" "os" - "os/exec" "path/filepath" "strings" "syscall" @@ -12,6 +11,7 @@ import ( nspkg "github.com/containernetworking/plugins/pkg/ns" "github.com/containers/storage/pkg/idtools" "github.com/cri-o/cri-o/utils" + "github.com/cri-o/cri-o/utils/cmdrunner" "github.com/google/uuid" "github.com/pkg/errors" "github.com/sirupsen/logrus" @@ -120,7 +120,7 @@ func (mgr *NamespaceManager) NewPodNamespaces(cfg *PodNamespacesConfig) ([]Names } logrus.Debugf("Calling pinns with %v", pinnsArgs) - output, err := exec.Command(mgr.pinnsPath, pinnsArgs...).CombinedOutput() + output, err := cmdrunner.Command(mgr.pinnsPath, pinnsArgs...).CombinedOutput() if err != nil { logrus.Warnf("Pinns %v failed: %s (%v)", pinnsArgs, string(output), err) // cleanup the mounts diff --git a/internal/dbusmgr/user.go b/internal/dbusmgr/user.go index 0e0520e9708..98100742f68 100644 --- a/internal/dbusmgr/user.go +++ b/internal/dbusmgr/user.go @@ -6,12 +6,12 @@ import ( "bufio" "bytes" "os" - "os/exec" "path/filepath" "strconv" "strings" systemdDbus "github.com/coreos/go-systemd/v22/dbus" + "github.com/cri-o/cri-o/utils/cmdrunner" dbus "github.com/godbus/dbus/v5" "github.com/opencontainers/runc/libcontainer/userns" "github.com/pkg/errors" @@ -55,7 +55,7 @@ func DetectUID() (int, error) { if !userns.RunningInUserNS() { return os.Getuid(), nil } - b, err := exec.Command("busctl", "--user", "--no-pager", "status").CombinedOutput() + b, err := cmdrunner.Command("busctl", "--user", "--no-pager", "status").CombinedOutput() if err != nil { return -1, errors.Wrapf(err, "could not execute `busctl --user --no-pager status`: %q", string(b)) } @@ -91,7 +91,7 @@ func DetectUserDbusSessionBusAddress() (string, error) { return busAddress, nil } } - b, err := exec.Command("systemctl", "--user", "--no-pager", "show-environment").CombinedOutput() + b, err := cmdrunner.Command("systemctl", "--user", "--no-pager", "show-environment").CombinedOutput() if err != nil { return "", errors.Wrapf(err, "could not execute `systemctl --user --no-pager show-environment`, output=%q", string(b)) } diff --git a/internal/oci/runtime_oci.go b/internal/oci/runtime_oci.go index 9758526071b..0930eea5076 100644 --- a/internal/oci/runtime_oci.go +++ b/internal/oci/runtime_oci.go @@ -20,6 +20,7 @@ import ( "github.com/cri-o/cri-o/pkg/config" "github.com/cri-o/cri-o/server/metrics" "github.com/cri-o/cri-o/utils" + "github.com/cri-o/cri-o/utils/cmdrunner" "github.com/fsnotify/fsnotify" json "github.com/json-iterator/go" rspec "github.com/opencontainers/runtime-spec/specs-go" @@ -137,7 +138,7 @@ func (r *runtimeOCI) CreateContainer(ctx context.Context, c *Container, cgroupPa "args": args, }).Debugf("running conmon: %s", r.config.Conmon) - cmd := exec.Command(r.config.Conmon, args...) // nolint: gosec + cmd := cmdrunner.Command(r.config.Conmon, args...) // nolint: gosec cmd.Dir = c.bundlePath cmd.SysProcAttr = sysProcAttrPlatform() cmd.Stdin = os.Stdin @@ -353,7 +354,7 @@ func (r *runtimeOCI) ExecContainer(ctx context.Context, c *Container, cmd []stri args := []string{rootFlag, r.root, "exec"} args = append(args, "--process", processFile, c.ID()) - execCmd := exec.Command(r.path, args...) // nolint: gosec + execCmd := cmdrunner.Command(r.path, args...) // nolint: gosec if v, found := os.LookupEnv("XDG_RUNTIME_DIR"); found { execCmd.Env = append(execCmd.Env, fmt.Sprintf("XDG_RUNTIME_DIR=%s", v)) } @@ -487,7 +488,7 @@ func (r *runtimeOCI) ExecSyncContainer(ctx context.Context, c *Container, comman "--exec-process-spec", processFile, "--runtime-arg", fmt.Sprintf("%s=%s", rootFlag, r.root)) - cmd := exec.Command(r.config.Conmon, args...) // nolint: gosec + cmd := cmdrunner.Command(r.config.Conmon, args...) // nolint: gosec var stdoutBuf, stderrBuf bytes.Buffer cmd.Stdout = &stdoutBuf @@ -598,7 +599,7 @@ func (r *runtimeOCI) UpdateContainer(ctx context.Context, c *Container, res *rsp return nil } - cmd := exec.Command(r.path, rootFlag, r.root, "update", "--resources", "-", c.ID()) // nolint: gosec + cmd := cmdrunner.Command(r.path, rootFlag, r.root, "update", "--resources", "-", c.ID()) // nolint: gosec var stdout bytes.Buffer var stderr bytes.Buffer cmd.Stdout = &stdout @@ -811,7 +812,7 @@ func (r *runtimeOCI) UpdateContainerStatus(ctx context.Context, c *Container) er } stateCmd := func() (*ContainerState, bool, error) { - cmd := exec.Command(r.path, rootFlag, r.root, "state", c.ID()) // nolint: gosec + cmd := cmdrunner.Command(r.path, rootFlag, r.root, "state", c.ID()) // nolint: gosec if v, found := os.LookupEnv("XDG_RUNTIME_DIR"); found { cmd.Env = append(cmd.Env, fmt.Sprintf("XDG_RUNTIME_DIR=%s", v)) } diff --git a/internal/runtimehandlerhooks/high_performance_hooks.go b/internal/runtimehandlerhooks/high_performance_hooks.go index 209ff4f3de4..f270cd722b0 100644 --- a/internal/runtimehandlerhooks/high_performance_hooks.go +++ b/internal/runtimehandlerhooks/high_performance_hooks.go @@ -15,6 +15,7 @@ import ( "github.com/cri-o/cri-o/internal/log" "github.com/cri-o/cri-o/internal/oci" crioannotations "github.com/cri-o/cri-o/pkg/annotations" + "github.com/cri-o/cri-o/utils/cmdrunner" "github.com/opencontainers/runc/libcontainer/cgroups" "github.com/opencontainers/runc/libcontainer/cgroups/systemd" "github.com/pkg/errors" @@ -263,7 +264,7 @@ func setIRQLoadBalancing(c *oci.Container, enable bool, irqSmpAffinityFile, irqB return nil } // run irqbalance in daemon mode, so this won't cause delay - cmd := exec.Command(irqBalancedName, "--oneshot") + cmd := cmdrunner.Command(irqBalancedName, "--oneshot") additionalEnv := irqBalanceBannedCpus + "=" + newIRQBalanceSetting cmd.Env = append(os.Environ(), additionalEnv) return cmd.Run() diff --git a/internal/runtimehandlerhooks/utils.go b/internal/runtimehandlerhooks/utils.go index 3728db25e20..e2fd6c6f43f 100644 --- a/internal/runtimehandlerhooks/utils.go +++ b/internal/runtimehandlerhooks/utils.go @@ -5,10 +5,10 @@ import ( "fmt" "io/ioutil" "os" - "os/exec" "strings" "unicode" + "github.com/cri-o/cri-o/utils/cmdrunner" "github.com/sirupsen/logrus" "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" ) @@ -138,11 +138,11 @@ func UpdateIRQSmpAffinityMask(cpus, current string, set bool) (cpuMask, bannedCP } func restartIrqBalanceService() error { - return exec.Command("systemctl", "restart", "irqbalance").Run() + return cmdrunner.Command("systemctl", "restart", "irqbalance").Run() } func isServiceEnabled(serviceName string) bool { - cmd := exec.Command("systemctl", "is-enabled", serviceName) + cmd := cmdrunner.Command("systemctl", "is-enabled", serviceName) status, err := cmd.CombinedOutput() if err != nil { logrus.Infof("Service %s is-enabled check returned with: %v", serviceName, err) diff --git a/utils/utils.go b/utils/utils.go index 73f22298ab1..0ef5c19c455 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -8,7 +8,6 @@ import ( "io" "io/ioutil" "os" - "os/exec" "path/filepath" "runtime" "strconv" @@ -18,6 +17,7 @@ import ( "github.com/containers/podman/v3/pkg/lookup" "github.com/cri-o/cri-o/internal/dbusmgr" + "github.com/cri-o/cri-o/utils/cmdrunner" securejoin "github.com/cyphar/filepath-securejoin" "github.com/opencontainers/runc/libcontainer/user" "github.com/pkg/errors" @@ -32,7 +32,7 @@ import ( // ExecCmd executes a command with args and returns its output as a string along // with an error, if any func ExecCmd(name string, args ...string) (string, error) { - cmd := exec.Command(name, args...) + cmd := cmdrunner.Command(name, args...) var stdout bytes.Buffer var stderr bytes.Buffer cmd.Stdout = &stdout