Files
monok8s/clitools/pkg/system/helpers.go

60 lines
1.4 KiB
Go

package system
import (
"context"
"fmt"
"os"
"strings"
"k8s.io/klog/v2"
)
const DefaultSecond = 1_000_000_000
func EnsureServiceRunning(ctx context.Context, r *Runner, svc string) error {
if _, err := r.Run(ctx, " rc-service", svc, "status"); err == nil {
return nil
}
klog.Infof("Starting service: %q", svc)
_, err := r.RunRetry(ctx, RetryOptions{
Attempts: 3,
Delay: 2 * DefaultSecond,
}, "rc-service", svc, "start")
if err != nil {
return fmt.Errorf("failed to start service %q: %w", svc, err)
}
_, err = r.Run(ctx, "rc-service", svc, "status")
if err != nil {
return fmt.Errorf("service %q still not healthy after start: %w", svc, err)
}
return nil
}
func EnsureSysctl(ctx context.Context, r *Runner, key, want string) error {
_, err := r.Run(ctx, "sysctl", "-w", key+"="+want)
if err != nil {
return fmt.Errorf("failed setting sysctl %s=%s: %w", key, want, err)
}
// verify
path := "/proc/sys/" + strings.ReplaceAll(key, ".", "/")
raw, err := os.ReadFile(path)
if err != nil {
return fmt.Errorf("failed verifying sysctl %s: %w", key, err)
}
if strings.TrimSpace(string(raw)) != want {
return fmt.Errorf("sysctl %s not applied, expected %s got %s",
key, want, strings.TrimSpace(string(raw)))
}
return nil
}
func EnsureDir(ctx context.Context, r *Runner, path string, mode string) error {
_, err := r.Run(ctx, "install", "-d", "-m", mode, path)
return err
}