From 00f64646a485aadce23bf2624cd28f7dfe4fc685 Mon Sep 17 00:00:00 2001 From: CorrectRoad Date: Tue, 19 Mar 2024 11:06:33 +0800 Subject: [PATCH] feat: add uncontrolled to apply setting (#167) --- api/app_management/openapi.yaml | 1 + route/v2/compose_app.go | 56 ++++++++++++++++++++++++++------- service/service.go | 7 +++-- 3 files changed, 50 insertions(+), 14 deletions(-) diff --git a/api/app_management/openapi.yaml b/api/app_management/openapi.yaml index e52dafff..d4aa1cde 100644 --- a/api/app_management/openapi.yaml +++ b/api/app_management/openapi.yaml @@ -440,6 +440,7 @@ paths: - $ref: "#/components/parameters/ComposeAppID" - $ref: "#/components/parameters/DryRun" - $ref: "#/components/parameters/CheckPortConflict" + - $ref: "#/components/parameters/Uncontrolled" requestBody: $ref: "#/components/requestBodies/RequestComposeApp" responses: diff --git a/route/v2/compose_app.go b/route/v2/compose_app.go index 03fb58a1..6474245e 100644 --- a/route/v2/compose_app.go +++ b/route/v2/compose_app.go @@ -134,6 +134,29 @@ func (a *AppManagement) ApplyComposeAppSettings(ctx echo.Context, id codegen.Com Message: &message, }) } + + if params.Uncontrolled != nil && *params.Uncontrolled { + // set to uncontrolled app + xcasaos := composeApp.Extensions[common.ComposeExtensionNameXCasaOS] + xcasaosMap, ok := xcasaos.(map[string]interface{}) + if !ok { + logger.Error("failed to get map compose app extensions", zap.String("composeAppID", composeApp.Name)) + } else { + xcasaosMap[common.ComposeExtensionPropertyNameIsUncontrolled] = true + composeApp.Extensions[common.ComposeExtensionNameXCasaOS] = xcasaosMap + } + } else { + // set to controlled app + xcasaos := composeApp.Extensions[common.ComposeExtensionNameXCasaOS] + xcasaosMap, ok := xcasaos.(map[string]interface{}) + if !ok { + logger.Error("failed to get map compose app extensions", zap.String("composeAppID", composeApp.Name)) + } else { + xcasaosMap[common.ComposeExtensionPropertyNameIsUncontrolled] = false + composeApp.Extensions[common.ComposeExtensionNameXCasaOS] = xcasaosMap + } + } + if params.CheckPortConflict == nil || *params.CheckPortConflict { // validation 1 - check if there are ports in use @@ -230,6 +253,28 @@ func (a *AppManagement) InstallComposeApp(ctx echo.Context, params codegen.Insta }) } + if params.Uncontrolled != nil && *params.Uncontrolled { + // set to uncontrolled app + xcasaos := composeApp.Extensions[common.ComposeExtensionNameXCasaOS] + xcasaosMap, ok := xcasaos.(map[string]interface{}) + if !ok { + logger.Error("failed to get map compose app extensions", zap.String("composeAppID", composeApp.Name)) + } else { + xcasaosMap[common.ComposeExtensionPropertyNameIsUncontrolled] = true + composeApp.Extensions[common.ComposeExtensionNameXCasaOS] = xcasaosMap + } + } else { + // set to controlled app + xcasaos := composeApp.Extensions[common.ComposeExtensionNameXCasaOS] + xcasaosMap, ok := xcasaos.(map[string]interface{}) + if !ok { + logger.Error("failed to get map compose app extensions", zap.String("composeAppID", composeApp.Name)) + } else { + xcasaosMap[common.ComposeExtensionPropertyNameIsUncontrolled] = false + composeApp.Extensions[common.ComposeExtensionNameXCasaOS] = xcasaosMap + } + } + if params.CheckPortConflict == nil || *params.CheckPortConflict { // validation 1 - check if there are ports in use validation, err := composeApp.GetPortsInUse() @@ -263,17 +308,6 @@ func (a *AppManagement) InstallComposeApp(ctx echo.Context, params codegen.Insta }) } - if params.Uncontrolled != nil && *params.Uncontrolled { - xcasaos := composeApp.Extensions[common.ComposeExtensionNameXCasaOS] - xcasaosMap, ok := xcasaos.(map[string]interface{}) - if !ok { - logger.Error("failed to get map compose app extensions", zap.String("composeAppID", composeApp.Name)) - } else { - xcasaosMap[common.ComposeExtensionPropertyNameIsUncontrolled] = true - composeApp.Extensions[common.ComposeExtensionNameXCasaOS] = xcasaosMap - } - } - if service.MyService.Compose().IsInstalling(composeApp.Name) { message := fmt.Sprintf("compose app `%s` is already being installed", composeApp.Name) return ctx.JSON(http.StatusConflict, codegen.ComposeAppBadRequest{Message: &message}) diff --git a/service/service.go b/service/service.go index 757d566c..4c2d2bdd 100644 --- a/service/service.go +++ b/service/service.go @@ -151,8 +151,9 @@ func PublishEventWrapper(ctx context.Context, eventType message_bus.EventType, p if response.StatusCode() != http.StatusOK { logger.Error("failed to publish event", zap.String("status code", response.Status())) } - } - if resp.StatusCode != http.StatusOK { - logger.Error("failed to publish event", zap.String("status code", resp.Status)) + } else { + if resp.StatusCode != http.StatusOK { + logger.Error("failed to publish event", zap.String("status code", resp.Status)) + } } }