97 lines
2.9 KiB
Go
97 lines
2.9 KiB
Go
/*
|
|
MIT License
|
|
Copyright (c) 2023 API Testing Authors.
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
The above copyright notice and this permission notice shall be included in all
|
|
copies or substantial portions of the Software.
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
SOFTWARE.
|
|
*/
|
|
|
|
package service
|
|
|
|
import (
|
|
fakeruntime "github.com/linuxsuren/go-fake-runtime"
|
|
)
|
|
|
|
// Service is the interface of service
|
|
type Service interface {
|
|
Start() (string, error) // start the service
|
|
Stop() (string, error) // stop the service gracefully
|
|
Restart() (string, error) // restart the service gracefully
|
|
Status() (string, error) // status of the service
|
|
Install() (string, error) // install the service
|
|
Uninstall() (string, error) // uninstall the service
|
|
Available() bool
|
|
}
|
|
|
|
type commonService struct {
|
|
fakeruntime.Execer
|
|
scriptPath string
|
|
script string
|
|
}
|
|
|
|
type ServiceMode string
|
|
|
|
const (
|
|
ServiceModeOS ServiceMode = "os"
|
|
ServiceModeContainer ServiceMode = "container"
|
|
ServiceModePodman ServiceMode = "podman"
|
|
ServiceModeDocker ServiceMode = "docker"
|
|
)
|
|
|
|
func (s ServiceMode) All() []ServiceMode {
|
|
return []ServiceMode{ServiceModeOS, ServiceModeContainer,
|
|
ServiceModePodman, ServiceModeDocker}
|
|
}
|
|
|
|
func (s ServiceMode) String() string {
|
|
return string(s)
|
|
}
|
|
|
|
type ServerFeatureOption struct {
|
|
SecretServer string
|
|
SkyWalking string
|
|
LocalStorage string
|
|
}
|
|
|
|
func GetAvailableService(mode ServiceMode, execer fakeruntime.Execer,
|
|
containerOption ContainerOption, featureOption ServerFeatureOption,
|
|
scriptPath string) (svc Service) {
|
|
osService := NewService(execer, scriptPath)
|
|
dockerService := NewContainerService(execer, "docker", featureOption, containerOption)
|
|
podmanService := NewContainerService(execer, "podman", featureOption, containerOption)
|
|
|
|
switch mode {
|
|
case ServiceModeOS:
|
|
svc = osService
|
|
case ServiceModeDocker, ServiceModeContainer:
|
|
svc = dockerService
|
|
case ServiceModePodman:
|
|
svc = podmanService
|
|
default:
|
|
if osService.Available() {
|
|
svc = osService
|
|
} else if dockerService.Available() {
|
|
svc = dockerService
|
|
} else if podmanService.Available() {
|
|
svc = podmanService
|
|
}
|
|
}
|
|
|
|
if svc != nil && !svc.Available() {
|
|
svc = nil
|
|
}
|
|
return
|
|
}
|