def run_update(self, update_ecs_agents):
     if update_ecs_agents:
         self.__run_ecs_container_agent_udpate()
     try:
         log("Initiating environment stack update.")
         environment_stack_template_body = ClusterTemplateGenerator(
             self.environment,
             self.configuration,
             self.__get_desired_count()
         ).generate_cluster()
         log("Template generation complete.")
         change_set = create_change_set(
             self.client,
             environment_stack_template_body,
             self.cluster_name,
             self.__get_parameter_values(),
             self.environment
         )
         self.existing_events = get_stack_events(
             self.client,
             self.cluster_name
         )
         if change_set is None:
             return
         log_bold("Executing changeset. Checking progress...")
         self.client.execute_change_set(
             ChangeSetName=change_set['ChangeSetId']
         )
         self.__print_progress()
     except ClientError as e:
         log_err("No updates are to be performed")
     except Exception as e:
         raise e
 def run(self):
     try:
         log("Check if stack already exists for " + self.cluster_name)
         environment_stack = self.client.describe_stacks(
             StackName=self.cluster_name)['Stacks'][0]
         log(self.cluster_name + " stack exists. ID: " +
             environment_stack['StackId'])
         log_err("Cannot create environment with duplicate name: " +
                 self.cluster_name)
     except Exception:
         log(self.cluster_name +
             " stack does not exist. Creating new stack.")
         # When creating a cluster, desired_instance count is same
         # as min_instance count
         environment_stack_template_body = ClusterTemplateGenerator(
             self.environment, self.configuration).generate_cluster()
         self.existing_events = get_stack_events(self.client,
                                                 self.cluster_name)
         environment_stack = self.client.create_stack(
             StackName=self.cluster_name,
             TemplateBody=environment_stack_template_body,
             Parameters=[{
                 'ParameterKey': 'KeyPair',
                 'ParameterValue': self.key_name,
             }, {
                 'ParameterKey': 'Environment',
                 'ParameterValue': self.environment,
             }],
             OnFailure='DO_NOTHING',
             Capabilities=['CAPABILITY_NAMED_IAM'],
         )
         log_bold("Submitted to cloudformation. Checking progress...")
         self.__print_progress()
         log_bold(self.cluster_name + " stack created. ID: " +
                  environment_stack['StackId'])
Beispiel #3
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 __print_progress(self):
     while True:
         response = self.client.describe_stacks(StackName=self.cluster_name)
         if "IN_PROGRESS" not in response['Stacks'][0]['StackStatus']:
             break
         all_events = get_stack_events(self.client, self.cluster_name)
         print_new_events(all_events, self.existing_events)
         self.existing_events = all_events
         sleep(5)
     log_bold("Finished and Status: %s" % (response['Stacks'][0]['StackStatus']))
Beispiel #5
0
 def _print_progress(self):
     while True:
         response = self.client.describe_stacks(StackName=self.stack_name)
         if "IN_PROGRESS" not in response['Stacks'][0]['StackStatus']:
             break
         all_events = get_stack_events(self.client, self.stack_name)
         print_new_events(all_events, self.existing_events)
         self.existing_events = all_events
         sleep(5)
     final_status = response['Stacks'][0]['StackStatus']
     if "FAIL" in final_status:
         log_err("Finished with status: %s" % (final_status))
     else:
         log_bold("Finished with status: %s" % (final_status))