production-deployment-sample-script/utils/utilities.py (51 lines of code) (raw):

import time from datetime import datetime from utils import GameLiftClient BUILD_SLEEP = 15 FLEET_SLEEP = 30 GAME_SESSION_SLEEP = 60 # Method for validating whether a fleet exists or not def validate_fleet_exists(game_lift_client: GameLiftClient, _fleet_id: str): print("Validating %s exists..." % _fleet_id) existing_fleet_response = game_lift_client.describe_fleet_attributes(_fleet_id) if not existing_fleet_response['FleetAttributes']: raise Exception("Fleet %s was not found, exiting." % _fleet_id) # Method for validating whether an alias exists or not def validate_alias_exists(game_lift_client: GameLiftClient, _alias_id: str): print("Validating %s exists..." % _alias_id) existing_alias_response = game_lift_client.describe_alias(_alias_id) if not existing_alias_response: raise Exception("Alias %s was not found, exiting." % _alias_id) # Method to wait for a build to have status READY before continuing def wait_for_build_to_be_ready(game_lift_client: GameLiftClient, _build_id: str): new_build_state = 'NEW' while new_build_state != 'READY': print('Sleeping and describing Build %s...' % _build_id) time.sleep(BUILD_SLEEP) describe_build_response = game_lift_client.describe_build(_build_id) new_build_state = describe_build_response['Build']['Status'] # Method to wait for all fleet locations to have status ACTIVE before continuing def wait_for_fleet_to_be_active(game_lift_client: GameLiftClient, _fleet_id: str): new_fleet_state = 'NEW' print('Sleeping and describing Fleet %s...' % _fleet_id) while new_fleet_state != 'ACTIVE' and new_fleet_state != 'ERROR': time.sleep(FLEET_SLEEP) describe_fleet_response = game_lift_client.describe_fleet_attributes(_fleet_id) new_fleet_state = describe_fleet_response['FleetAttributes'][0]['Status'] print("%s: Fleet %s is still pending in status %s..." % (datetime.now(), _fleet_id, new_fleet_state)) # If the fleet ended in ERROR, throw an exception and exit if new_fleet_state == 'ERROR': raise Exception("Fleet %s went into ERROR, exiting." % _fleet_id) # Check for Fleet locations and ensure those also go ACTIVE before continuing locations_response = game_lift_client.describe_fleet_location_attributes(_fleet_id, None) locations_remaining = [item.get('LocationState').get('Location') for item in locations_response['LocationAttributes']] while len(locations_remaining) != 0: time.sleep(FLEET_SLEEP) locations_response = game_lift_client.describe_fleet_location_attributes(_fleet_id, locations_remaining) print("%s: Waiting on locations %s to go ACTIVE: %s" % (datetime.now(), locations_remaining, locations_response['LocationAttributes'])) for location in locations_response['LocationAttributes']: if location['LocationState']['Status'] == 'ACTIVE': locations_remaining.remove(location['LocationState']['Location']) # Method to wait for all game sessions to terminate on a fleet before continuing def wait_for_game_sessions_to_terminate(game_lift_client: GameLiftClient, _fleet_id: str): game_session_count = 1 print("\nPolling previous Fleet %s for GameSessions..." % _fleet_id) while game_session_count > 0: time.sleep(GAME_SESSION_SLEEP) describe_game_sessions_response = game_lift_client.describe_game_sessions(_fleet_id) game_session_count = len(describe_game_sessions_response['GameSessions']) print("%s: Fleet %s has %s or more GameSessions still running..." % (datetime.now(), _fleet_id, game_session_count))