From c44abce7d457b40855e4abfeb3c99c0dccf9fea8 Mon Sep 17 00:00:00 2001 From: Kai Date: Sat, 15 Jun 2024 11:38:11 +0200 Subject: [PATCH 1/3] delete game from k8s --- api/apis/k8sApi.go | 11 +++++++++++ api/controllers/gameController.go | 1 + api/services/gameService.go | 16 +++++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/api/apis/k8sApi.go b/api/apis/k8sApi.go index e9f965d..03e08d6 100644 --- a/api/apis/k8sApi.go +++ b/api/apis/k8sApi.go @@ -15,6 +15,17 @@ import ( type IK8sApi interface { DeployGame(game *models.Game) error ReadGameUrl(gameId uuid.UUID) (string, error) + DeleteGame(game *models.Game) error +} + +func (g k8sApi) DeleteGame(game *models.Game) error { + resource, err := createAndVerifyGameResource(game) + if err != nil { + return err + } + + ctx := context.Background() + return g.k8sClient.Delete(ctx, resource) } func (g k8sApi) DeployGame(game *models.Game) error { diff --git a/api/controllers/gameController.go b/api/controllers/gameController.go index 0eb5bcf..d3866b4 100644 --- a/api/controllers/gameController.go +++ b/api/controllers/gameController.go @@ -136,6 +136,7 @@ func (g gameController) DeleteGameById(c *gin.Context) { return } + //Delete game from db, azure storage and k8s/aks err = g.service.Delete(_uuid) if err != nil { //TODO handle different errors c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"message": err.Error()}) diff --git a/api/services/gameService.go b/api/services/gameService.go index 3fabce5..3445cb9 100644 --- a/api/services/gameService.go +++ b/api/services/gameService.go @@ -86,9 +86,23 @@ func (g gameService) Save(fileHeader *multipart.FileHeader, title string, owner } func (g gameService) Delete(id uuid.UUID) error { + //Get the game, we need the details to delete it from k8s + game, err := g.repository.FindByID(id) + if err != nil { + return err + } + + //Delete from azure storage + err = g.azure.DeleteGame(os.Getenv("AZURE_CONTAINER_NAME"), id.String()) + if err != nil { + //TODO ignore NotFound error + return err + } - err := g.azure.DeleteGame(os.Getenv("AZURE_CONTAINER_NAME"), id.String()) + //Delete from k8s/aks + err = g.k8s.DeleteGame(game) if err != nil { + //TODO ignore NotFound error return err } From a619b2aebdc9e70e3fa0bc57e2fdf52e7c33545d Mon Sep 17 00:00:00 2001 From: Kai Date: Sat, 15 Jun 2024 12:00:46 +0200 Subject: [PATCH 2/3] ignore NotFound from azure when deleting a game --- api/services/gameService.go | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/api/services/gameService.go b/api/services/gameService.go index 3445cb9..78bc2f5 100644 --- a/api/services/gameService.go +++ b/api/services/gameService.go @@ -95,17 +95,26 @@ func (g gameService) Delete(id uuid.UUID) error { //Delete from azure storage err = g.azure.DeleteGame(os.Getenv("AZURE_CONTAINER_NAME"), id.String()) if err != nil { - //TODO ignore NotFound error - return err + if isNotFound(err) { + log.Println(fmt.Sprintf("Game %s is already deleted from azure storage", id.String())) + } else { + return err + } } - //Delete from k8s/aks - err = g.k8s.DeleteGame(game) - if err != nil { - //TODO ignore NotFound error - return err + //Delete from k8s/aks, if the game has an url + if game.Url != "" { + err = g.k8s.DeleteGame(game) + if err != nil { + if isNotFound(err) { + log.Println(fmt.Sprintf("Game %s is already deleted from aks", id.String())) + } else { + return err + } + } } + //Delete from db and return return g.repository.Delete(id) } @@ -132,3 +141,8 @@ func GameService(repository repositories.IGameRepository, k8s apis.IK8sApi, azur azure: azure, } } + +func isNotFound(err error) bool { + e := strings.ToLower(err.Error()) + return strings.Contains(e, "not found") || strings.Contains(e, "notfound") +} From 86a0844561f5e6cffab14917b3f1b933920e02f2 Mon Sep 17 00:00:00 2001 From: Kai Date: Sat, 15 Jun 2024 12:07:24 +0200 Subject: [PATCH 3/3] missing import ops --- api/services/gameService.go | 1 + 1 file changed, 1 insertion(+) diff --git a/api/services/gameService.go b/api/services/gameService.go index 78bc2f5..369c486 100644 --- a/api/services/gameService.go +++ b/api/services/gameService.go @@ -10,6 +10,7 @@ import ( "log" "mime/multipart" "os" + "strings" ) type IGameService interface {