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.")
Exemple #2
0
 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
Exemple #4
0
 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))