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'])
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']))
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))