From 05d1e95d8e462438f46f095cdf462f3e52646a1f Mon Sep 17 00:00:00 2001 From: Razvan Mahu <67904187+razvan-pro@users.noreply.github.com> Date: Fri, 26 Feb 2021 13:19:13 +0000 Subject: [PATCH] fix: get game server name from game allocation (#1471) --- aimmo-game-creator/game_manager.py | 34 +++++++++++------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/aimmo-game-creator/game_manager.py b/aimmo-game-creator/game_manager.py index 887fd035f..780581297 100644 --- a/aimmo-game-creator/game_manager.py +++ b/aimmo-game-creator/game_manager.py @@ -221,24 +221,7 @@ def _remove_path_from_ingress(self, game_id): self.networking_api.patch_namespaced_ingress("aimmo-ingress", "default", patch) - def _create_game_service(self, game_id): - result = self.custom_objects_api.list_namespaced_custom_object( - group="agones.dev", - version="v1", - namespace="default", - plural="gameservers", - label_selector=f"game-id={game_id}", - ) - game_servers = result["items"] - - if len(game_servers) == 0: - raise Exception(f"No game server found for game ID {game_id}.") - elif len(game_servers) > 1: - raise Exception(f"More than one game server found for game ID {game_id}.") - - game_server = game_servers[0] - game_server_name = game_server["metadata"]["name"] - + def _create_game_service(self, game_id, game_server_name): service_manifest = kubernetes.client.V1ServiceSpec( selector={"agones.dev/gameserver": game_server_name}, ports=[ @@ -292,7 +275,7 @@ def _delete_game_secret(self, game_id): def _create_game_server_allocation( self, game_id: int, worksheet_id: int, retry_count: int = 0 - ): + ) -> str: result = self.custom_objects_api.create_namespaced_custom_object( group="allocation.agones.dev", version="v1", @@ -318,10 +301,15 @@ def _create_game_server_allocation( }, ) if result["status"]["state"] == "UnAllocated" and retry_count < 5: + LOGGER.warning( + f"Failed to create game, retrying... retry_count={retry_count}" + ) time.sleep(5) - self._create_game_server_allocation( + return self._create_game_server_allocation( game_id, worksheet_id, retry_count=retry_count + 1 ) + else: + return result["status"]["gameServerName"] def _delete_game_server(self, game_id): result = self.custom_objects_api.list_namespaced_custom_object( @@ -344,8 +332,10 @@ def _delete_game_server(self, game_id): def create_game(self, game_id, game_data): self._create_game_secret(game_id) - self._create_game_server_allocation(game_id, game_data["worksheet_id"]) - self._create_game_service(game_id) + game_server_name = self._create_game_server_allocation( + game_id, game_data["worksheet_id"] + ) + self._create_game_service(game_id, game_server_name) self._add_path_to_ingress(game_id) LOGGER.info("Game started - {}".format(game_id))