def _fetch_current_desired_count(self): stack_name = get_service_stack_name(self.env, self.application_name) self.desired_counts = {} try: stack = region_service.get_client_for( 'cloudformation', self.env ).describe_stacks(StackName=stack_name)['Stacks'][0] ecs_service_outputs = filter( lambda x: x['OutputKey'].endswith('EcsServiceName'), stack['Outputs'] ) ecs_service_names = [] for service_name in ecs_service_outputs: ecs_service_names.append({ "key": service_name['OutputKey'], "value": service_name['OutputValue'] }) ecs_client = EcsClient(None, None, self.region) for service_name in ecs_service_names: deployment = DeployAction( ecs_client, self.cluster_name, service_name["value"] ) actual_service_name = service_name["key"]. \ replace("EcsServiceName", "") self.desired_counts[actual_service_name] = deployment. \ service.desired_count log("Existing service counts: " + str(self.desired_counts)) except Exception: log_bold("Could not find existing services.")
def __init__(self, name, environment): self.name = name self.environment = environment self.stack_name = get_service_stack_name(environment, name) self.client = get_client_for('cloudformation', self.environment) self.environment_stack = self._get_environment_stack() self.existing_events = get_stack_events(self.client, self.stack_name) self.service_configuration = ServiceConfiguration( self.name, self.environment)
def _get_stack_resource_summaries(self): stack_name = get_service_stack_name(self.environment, self.name) response = self.cfn_client.list_stack_resources(StackName=stack_name) resource_summaries = response['StackResourceSummaries'] while 'NextToken' in response: response = self.cfn_client.list_stack_resources( StackName=stack_name, NextToken=response['NextToken'], ) resource_summaries.extend(response.get('Rules', [])) return resource_summaries
def init_stack_info(self): self.stack_name = get_service_stack_name(self.environment, self.name) try: stack = get_client_for('cloudformation', self.environment).describe_stacks( StackName=self.stack_name)['Stacks'][0] service_name_list = list( filter(lambda x: x['OutputKey'].endswith('EcsServiceName'), stack['Outputs'])) self.ecs_service_names = [ svc_name['OutputValue'] for svc_name in service_name_list ] except Exception: self.ecs_service_names = [] log_warning("Could not determine services.")
def init_stack_info(self): try: self.stack_name = get_service_stack_name(self.environment, self.name) stack = get_client_for('cloudformation', self.environment).describe_stacks( StackName=self.stack_name)['Stacks'][0] self.ecs_service_names = [ service_name['OutputValue'] for service_name in list( filter(lambda x: x['OutputKey'].endswith('EcsServiceName'), stack['Outputs'])) ] except ClientError as client_error: err = str(client_error) if "Stack with id %s does not exist" % self.stack_name in err: log_err( "%s cluster not found. Create the environment cluster using `create_environment` command." % self.environment) else: raise UnrecoverableException(str(client_error))
def init_stack_info(self): stack_name = get_service_stack_name(self.environment, self.name) try: stack = self.cfn_client.describe_stacks( StackName=stack_name)['Stacks'][0] self.stack_found = True stack_outputs = { output['OutputKey']: output['OutputValue'] for output in stack['Outputs'] } for service_name, service_config in self.service_configuration.get( 'services', {}).items(): service_metadata = dict() if "ecs_service_name" in service_config: service_metadata["ecs_service_name"] = service_config.get( 'ecs_service_name') else: service_metadata["ecs_service_name"] = stack_outputs.get( f'{service_name}EcsServiceName') service_metadata["secrets_name"] = service_config.get( 'secrets_name', None) self.service_info[service_name] = service_metadata self.listener_rules = [ resource_summary for resource_summary in (self._get_stack_resource_summaries()) if resource_summary['LogicalResourceId'].endswith( 'ListenerRule') ] except Exception as e: self.stack_found = False log_warning( "Could not determine services. Stack not found. Error raised: {}" .format(e))