Added some ctl boilerplate
This commit is contained in:
55
clitools/pkg/system/helpers.go
Normal file
55
clitools/pkg/system/helpers.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
_, 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
|
||||
}
|
||||
Reference in New Issue
Block a user