74 lines
1.8 KiB
Go
74 lines
1.8 KiB
Go
package app
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
transportBackendActionTimeout = 20 * time.Second
|
|
transportBackendHealthTimeout = 5 * time.Second
|
|
transportBackendProbeTimeout = 900 * time.Millisecond
|
|
)
|
|
|
|
var transportSystemdUnitsDir = "/etc/systemd/system"
|
|
|
|
type transportCommandRunner func(timeout time.Duration, name string, args ...string) (string, string, int, error)
|
|
|
|
var transportRunCommand transportCommandRunner = runCommandTimeout
|
|
|
|
type transportBackendActionResult struct {
|
|
OK bool
|
|
Code string
|
|
Message string
|
|
ExitCode int
|
|
Stdout string
|
|
Stderr string
|
|
Retryable bool
|
|
}
|
|
|
|
type transportBackendHealthResult struct {
|
|
OK bool
|
|
Code string
|
|
Message string
|
|
Status TransportClientStatus
|
|
LatencyMS int
|
|
Retryable bool
|
|
}
|
|
|
|
type transportBackendAdapter interface {
|
|
ID() string
|
|
Action(client TransportClient, action string) transportBackendActionResult
|
|
Health(client TransportClient) transportBackendHealthResult
|
|
Provision(client TransportClient) transportBackendActionResult
|
|
Cleanup(client TransportClient) transportBackendActionResult
|
|
}
|
|
|
|
func selectTransportBackend(client TransportClient) transportBackendAdapter {
|
|
mode := transportRuntimeMode(client.Config)
|
|
switch mode {
|
|
case "exec":
|
|
// Continue with current runner-based backend selection.
|
|
case "embedded", "sidecar":
|
|
return transportUnsupportedRuntimeBackend{mode: mode}
|
|
default:
|
|
return transportUnsupportedRuntimeBackend{mode: mode}
|
|
}
|
|
|
|
runner := strings.ToLower(strings.TrimSpace(transportConfigString(client.Config, "runner")))
|
|
unit := strings.TrimSpace(transportConfigString(client.Config, "unit"))
|
|
switch runner {
|
|
case "systemd":
|
|
return transportSystemdBackend{}
|
|
case "mock":
|
|
return transportMockBackend{}
|
|
case "":
|
|
if unit != "" {
|
|
return transportSystemdBackend{}
|
|
}
|
|
return transportMockBackend{}
|
|
default:
|
|
return transportMockBackend{}
|
|
}
|
|
}
|