feat: backend executor implement
This commit is contained in:
@@ -14,6 +14,7 @@ import (
|
||||
"time"
|
||||
|
||||
"yms-daemon/internal/backendupdate"
|
||||
"yms-daemon/internal/containerengine"
|
||||
"yms-daemon/internal/daemonapi"
|
||||
"yms-daemon/internal/daemonclient"
|
||||
"yms-daemon/internal/daemonserver"
|
||||
@@ -63,7 +64,12 @@ func run(ctx context.Context, arguments []string, stdout io.Writer, stderr io.Wr
|
||||
writeUpdateProgress(stdout, event)
|
||||
}
|
||||
}
|
||||
response, err := daemonclient.Update(ctx, runtimepaths.Socket, request.service, request.inputType, request.file, progress)
|
||||
var response daemonapi.Response
|
||||
if request.inputType == daemonapi.InputTypeContainerImage {
|
||||
response, err = daemonclient.UpdateContainerImage(ctx, runtimepaths.Socket, request.service, request.imageReference, progress)
|
||||
} else {
|
||||
response, err = daemonclient.Update(ctx, runtimepaths.Socket, request.service, request.inputType, request.file, progress)
|
||||
}
|
||||
if err != nil {
|
||||
if response.TransactionID != "" {
|
||||
fmt.Fprintf(stderr, "transaction=%s state=%s error=%v\n", response.TransactionID, response.State, err)
|
||||
@@ -112,10 +118,11 @@ func run(ctx context.Context, arguments []string, stdout io.Writer, stderr io.Wr
|
||||
}
|
||||
|
||||
type updateArguments struct {
|
||||
service string
|
||||
inputType string
|
||||
file string
|
||||
quite bool
|
||||
service string
|
||||
inputType string
|
||||
file string
|
||||
imageReference string
|
||||
quite bool
|
||||
}
|
||||
|
||||
type restartArguments struct {
|
||||
@@ -129,6 +136,7 @@ func parseUpdateArgs(arguments []string, output io.Writer) (updateArguments, err
|
||||
service := flags.String("service", "", "service to update")
|
||||
file := flags.String("f", "", "repack ZIP path")
|
||||
nativeJAR := flags.String("native-jar", "", "direct native backend JAR path")
|
||||
containerImage := flags.String("container-image", "", "development backend container image reference")
|
||||
quite := flags.Bool("quite", false, "suppress progress and successful result output")
|
||||
if err := flags.Parse(arguments); err != nil {
|
||||
return updateArguments{}, err
|
||||
@@ -139,8 +147,17 @@ func parseUpdateArgs(arguments []string, output io.Writer) (updateArguments, err
|
||||
if *service != serviceBackend {
|
||||
return updateArguments{}, errors.New("--service currently accepts only backend")
|
||||
}
|
||||
if (*file == "") == (*nativeJAR == "") {
|
||||
return updateArguments{}, errors.New("exactly one of -f and --native-jar is required")
|
||||
inputCount := 0
|
||||
for _, value := range []string{*file, *nativeJAR, *containerImage} {
|
||||
if value != "" {
|
||||
inputCount++
|
||||
}
|
||||
}
|
||||
if inputCount != 1 {
|
||||
return updateArguments{}, errors.New("exactly one of -f, --native-jar, and --container-image is required; update inputs are mutually exclusive")
|
||||
}
|
||||
if *containerImage != "" {
|
||||
return updateArguments{service: *service, inputType: daemonapi.InputTypeContainerImage, imageReference: *containerImage, quite: *quite}, nil
|
||||
}
|
||||
inputType := daemonapi.InputTypeRepackZIP
|
||||
inputFile := *file
|
||||
@@ -205,14 +222,6 @@ func runServe(ctx context.Context) (result error) {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
releaseStore, err := filestore.New(config.Backend.ReleaseDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
units, err := systemd.NewSystemctl(config.Backend.SystemctlPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
gateway, err := hostnginx.NewController(
|
||||
runtimepaths.HostNginxConfig,
|
||||
runtimepaths.HostNginxExecutable,
|
||||
@@ -223,7 +232,28 @@ func runServe(ctx context.Context) (result error) {
|
||||
return err
|
||||
}
|
||||
httpClient := &http.Client{Timeout: 5 * time.Second}
|
||||
updater, err := backendupdate.New(config, runtimepaths.WorkRoot, store, coordinator, releaseStore, units, gateway, httpClient, logger)
|
||||
var updater *backendupdate.Updater
|
||||
switch config.Backend.Type {
|
||||
case deploymentconfig.BackendTypeNative:
|
||||
releaseStore, err := filestore.New(config.Backend.ReleaseDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
units, err := systemd.NewSystemctl(config.Backend.SystemctlPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
updater, err = backendupdate.New(config, runtimepaths.WorkRoot, store, coordinator, releaseStore, units, gateway, httpClient, logger)
|
||||
case deploymentconfig.BackendTypeContainer:
|
||||
var engine *containerengine.MobyEngine
|
||||
engine, err = containerengine.NewMobyEngine()
|
||||
if err == nil {
|
||||
defer func() { result = errors.Join(result, engine.Close()) }()
|
||||
updater, err = backendupdate.NewContainer(config, runtimepaths.WorkRoot, store, coordinator, engine, gateway, httpClient, logger)
|
||||
}
|
||||
default:
|
||||
err = fmt.Errorf("unsupported backend.type %q", config.Backend.Type)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -239,6 +269,7 @@ func writeUsage(output io.Writer) {
|
||||
fmt.Fprintln(output, " yms-daemon serve")
|
||||
fmt.Fprintln(output, " yms-daemon update --service backend -f <repack.zip> [--quite]")
|
||||
fmt.Fprintln(output, " yms-daemon update --service backend --native-jar <backend.jar> [--quite]")
|
||||
fmt.Fprintln(output, " yms-daemon update --service backend --container-image <image-ref> [--quite]")
|
||||
fmt.Fprintln(output, " yms-daemon restart --service backend [--quite]")
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user