def call(self, request): '''Make API call and translate AWSServiceException to more specific exception''' try: log.debug(request) return_msg = self._client.call(request, self._format) log.debug(u'Request ID: {0}'.format(return_msg.json().values()[0]\ [u'ResponseMetadata'][u'RequestId'])) return return_msg.json() except AwsServiceException as ex: log.debug(misc.to_unicode(ex)) # Translate general RDS exception if misc.string_equal_ignore_case(ex.code, AwsErrorCode.OptInRequired): raise OptInRequiredException(ex) if misc.string_equal_ignore_case(ex.code, AwsErrorCode.InsufficientPrivileges): raise InsufficientPrivilegesException(ex) if misc.string_equal_ignore_case(ex.code, AwsErrorCode.InvalidParameterValue): raise InvalidParameterValueException(ex) if misc.string_equal_ignore_case(ex.code, AwsErrorCode.MissingParameter): raise MissingParameterException(ex) raise
def call(self, request): """Make API call and translate AWSServiceException to more specific exception""" try: log.debug(request) return_msg = self._client.call(request, self._format) log.debug(u"Request ID: {0}".format(return_msg.json().values()[0][u"ResponseMetadata"][u"RequestId"])) # TODO: set more specific charset code return return_msg.json() except AwsServiceException as ex: log.debug(misc.to_unicode(ex)) # Translate general Elastic Beanstalk exception if misc.string_equal_ignore_case(ex.code, AwsErrorCode.OptInRequired): raise OptInRequiredException(ex) if misc.string_equal_ignore_case(ex.code, AwsErrorCode.InsufficientPrivileges): raise InsufficientPrivilegesException(ex) if misc.string_equal_ignore_case(ex.code, AwsErrorCode.InvalidParameterValue): raise InvalidParameterValueException(ex) if misc.string_equal_ignore_case(ex.code, AwsErrorCode.MissingParameter): raise MissingParameterException(ex) raise
def call(self, request): '''Make API call and translate AWSServiceException to more specific exception''' try: log.debug(request) return_msg = self._client.call(request, self._format) log.debug(return_msg) #TODO: set more specific charset code return return_msg.json except AwsServiceException as ex: # Translate general Elastic Beanstalk exception if misc.string_equal_ignore_case(ex.code, AwsErrorCode.OptInRequired): raise OptInRequiredException(ex) if misc.string_equal_ignore_case( ex.code, AwsErrorCode.InsufficientPrivileges): raise InsufficientPrivilegesException(ex) if misc.string_equal_ignore_case( ex.code, AwsErrorCode.InvalidParameterValue): raise InvalidParameterValueException(ex) if misc.string_equal_ignore_case(ex.code, AwsErrorCode.MissingParameter): raise MissingParameterException(ex) raise
def call(self, request): '''Make API call and translate AWSServiceException to more specific exception''' try: log.debug(request) return_msg = self._client.call(request, self._format) log.debug('Request ID: {0}'.format(list(return_msg.json().values())[0]\ ['ResponseMetadata']['RequestId'])) #TODO: set more specific charset code return return_msg.json() except AwsServiceException as ex: log.debug(misc.to_unicode(ex)) # Translate general Elastic Beanstalk exception if misc.string_equal_ignore_case(ex.code, AwsErrorCode.OptInRequired): raise OptInRequiredException(ex) if misc.string_equal_ignore_case( ex.code, AwsErrorCode.InsufficientPrivileges): raise InsufficientPrivilegesException(ex) if misc.string_equal_ignore_case( ex.code, AwsErrorCode.InvalidParameterValue): raise InvalidParameterValueException(ex) if misc.string_equal_ignore_case(ex.code, AwsErrorCode.MissingParameter): raise MissingParameterException(ex) raise
def ask_confirmation(cls, messsage=None, can_return_none=False): if messsage is None: messsage = TerminalMessage.ConfirmToProceed value = cls.line_input(messsage, can_return_none) if value is None: return None elif misc.string_equal_ignore_case(value, TerminalConstant.Y)\ or misc.string_equal_ignore_case(value, TerminalConstant.Yes): return True else: return False
def has_default_app(parameter_pool, solution_stack, eb_client = None): appsource = OptionSepcification(DefualtAppSource.Namespace, DefualtAppSource.OptionName) options = api_wrapper.retrieve_configuration_options(parameter_pool, solution_stack = solution_stack, options = [appsource], eb_client = eb_client) for option in options: if misc.string_equal_ignore_case(DefualtAppSource.Namespace, option.namespace) \ and misc.string_equal_ignore_case(DefualtAppSource.OptionName, option.name): return True return False
def ask_confirmation(cls, messsage = None, can_return_none = False): if messsage is None: messsage = TerminalMessage.ConfirmToProceed value = cls.line_input(messsage, can_return_none) if value is None: return None elif misc.string_equal_ignore_case(value, TerminalConstant.Y)\ or misc.string_equal_ignore_case(value, TerminalConstant.Yes): return True else: return False
def has_default_app(parameter_pool, solution_stack, eb_client=None): appsource = OptionSepcification(DefaultAppSource.Namespace, DefaultAppSource.OptionName) options = api_wrapper.retrieve_configuration_options( parameter_pool, solution_stack=solution_stack, options=[appsource], eb_client=eb_client) for option in options: if misc.string_equal_ignore_case(DefaultAppSource.Namespace, option.namespace) \ and misc.string_equal_ignore_case(DefaultAppSource.OptionName, option.name): return True return False
def ask_branch_environment_name(cls, parameter_pool): # Auto generate environment name if not specified by user if not parameter_pool.has(ParameterName.EnvironmentName): old_env_name = None app_name = parameter_pool.get_value(ParameterName.ApplicationName, False) current_branch = parameter_pool.get_value( ParameterName.CurrentBranch, False) env_name = cls.generate_env_name(app_name \ + ServiceDefault.Environment.BRANCH_NAME_SEPERATOR\ + current_branch) cls.ask_parameter(parameter_pool, ParameterName.EnvironmentName, autogen_value=env_name) else: old_env_name = parameter_pool.get_value( ParameterName.EnvironmentName, False) cls.ask_parameter(parameter_pool, ParameterName.EnvironmentName) # Generate option setting file pathname new_env_name = parameter_pool.get_value(ParameterName.EnvironmentName, False) if not misc.string_equal_ignore_case(old_env_name, new_env_name): new_opsetting_path = os.path.join( os.getcwdu(), EbLocalDir.Path, OptionSettingFile.Name + u'.' + new_env_name) parameter_pool.put( Parameter( ParameterName.OptionSettingFile, new_opsetting_path, parameter_pool.get_source(ParameterName.EnvironmentName)))
def ask_branch_environment_name(cls, parameter_pool): # Auto generate environment name if not specified by user if not parameter_pool.has(ParameterName.EnvironmentName): old_env_name = None app_name = parameter_pool.get_value(ParameterName.ApplicationName) current_branch = parameter_pool.get_value(ParameterName.CurrentBranch) env_name = re.sub(ServiceDefault.Environment.REGEX_NAME_FILTER, u'', app_name, flags = re.UNICODE) if len(env_name) > 0: env_name = env_name + ServiceDefault.Environment.BRANCH_NAME_SEPERATOR\ + current_branch + ServiceDefault.Environment.NAME_POSTFIX if len(env_name) > ServiceDefault.Environment.MAX_NAME_LEN: env_name = env_name[:ServiceDefault.Environment.MAX_NAME_LEN] else: env_name = None cls.ask_parameter(parameter_pool, ParameterName.EnvironmentName, autogen_value = env_name) else: old_env_name = parameter_pool.get_value(ParameterName.EnvironmentName) cls.ask_parameter(parameter_pool, ParameterName.EnvironmentName) # Generate option setting file pathname new_env_name = parameter_pool.get_value(ParameterName.EnvironmentName) if not misc.string_equal_ignore_case(old_env_name, new_env_name): new_opsetting_path = os.path.join(os.getcwdu(), EbLocalDir.Path, OptionSettingFile.Name + u'.' + new_env_name) parameter_pool.put(Parameter(ParameterName.OptionSettingFile, new_opsetting_path, parameter_pool.get_source(ParameterName.EnvironmentName)))
def _validate_change(self, parameter_pool, eb_client, app_name, env_name, option_settings, option_remove, template_spec): response = eb_client.validate_configuration_settings(app_name, option_settings, environment_name = env_name, option_remove = option_remove, template_specification = template_spec) warning_count = 0 error_count = 0 for message in response.result: if misc.string_equal_ignore_case(message.severity, ValidationSeverity.SeverityError): error_count = error_count + 1 else: warning_count = warning_count + 1 prompt.error(ValidationMessage.ValidateSettingError.format\ (message.severity, message.namespace, message.option_name, message.message)) if error_count > 0: log.info('Validating configuration setting failed. Abort command.') raise EBSCliException() elif warning_count > 0: if parameter_pool.get_value(ParameterName.Force) == ServiceDefault.ENABLED: pass elif not TerminalBase.ask_confirmation(UpdateEnvironmentOptionSettingOpMessage.Continue): log.info('User cancelled command.') raise EBSCliException() else: log.info('Validating configuration setting passed.')
def has_default_app(parameter_pool, solution_stack, eb_client = None): appsource_options = {DefaultAppSource.Namespace : {DefaultAppSource.OptionName}} spec = TemplateSpecification() spec.template_source.solution_stack_name = solution_stack, options = api_wrapper.retrieve_configuration_options(parameter_pool, solution_stack = solution_stack, options = appsource_options, template_specification = spec, eb_client = eb_client) for option in options: if misc.string_equal_ignore_case(DefaultAppSource.Namespace, option.namespace) \ and misc.string_equal_ignore_case(DefaultAppSource.OptionName, option.name): return True return False
def call(self, request): '''Make API call and translate AWSServiceException to more specific exception''' try: log.debug(request) return_msg = self._client.call(request, self._format) log.debug(u'Request ID: {0}'.format(return_msg.json().values()[0]\ [u'ResponseMetadata'][u'RequestId'])) return return_msg.json() except AwsServiceException as ex: log.debug(misc.to_unicode(ex)) # Translate general IAM exception if misc.string_equal_ignore_case(ex.code, AwsErrorCode.AccessDenied): raise AccessDeniedException(ex) elif misc.string_equal_ignore_case(ex.code, AwsErrorCode.OptInRequired): raise OptInRequiredException(ex) elif misc.string_equal_ignore_case( ex.code, AwsErrorCode.InsufficientPrivileges): raise InsufficientPrivilegesException(ex) elif misc.string_equal_ignore_case( ex.code, AwsErrorCode.InvalidParameterValue): raise InvalidParameterValueException(ex) elif misc.string_equal_ignore_case(ex.code, AwsErrorCode.MissingParameter): raise MissingParameterException(ex) elif misc.string_equal_ignore_case( ex.code, IamErrorCode.EntityAlreadyExists): raise IamEntityAlreadyExistsException(ex) elif misc.string_equal_ignore_case(ex.code, IamErrorCode.NoSuchEntity): raise IamNoSuchEntityException(ex) elif misc.string_equal_ignore_case( ex.code, IamErrorCode.MalformedPolicyDocument): raise IamMalformedPolicyDocumentException(ex) elif misc.string_equal_ignore_case(ex.code, IamErrorCode.LimitExceeded): raise IamLimitExceededException(ex) raise
def has_default_app(parameter_pool, solution_stack, eb_client = None): appsource_options = {DefaultAppSource.Namespace : {DefaultAppSource.OptionName}} if not eb_client: eb_client = api_wrapper.create_eb_client(parameter_pool) spec = TemplateSpecification() spec.template_source.solution_stack_name = solution_stack, options = api_wrapper.retrieve_configuration_options(eb_client = eb_client, solution_stack = solution_stack, options = appsource_options, template_specification = spec) for option in options: if misc.string_equal_ignore_case(DefaultAppSource.Namespace, option.namespace) \ and misc.string_equal_ignore_case(DefaultAppSource.OptionName, option.name): return True return False
def ask_environment_name(cls, parameter_pool): # Auto generate environment name if not specified by user if not parameter_pool.has(ParameterName.EnvironmentName): old_env_name = None app_name = parameter_pool.get_value(ParameterName.ApplicationName) env_name = re.sub(ServiceDefault.Environment.REGEX_NAME_FILTER, u'', app_name, flags = re.UNICODE) if len(env_name) > 0: env_name = env_name + ServiceDefault.Environment.NAME_POSTFIX if len(env_name) > ServiceDefault.Environment.MAX_NAME_LEN: env_name = env_name[:ServiceDefault.Environment.MAX_NAME_LEN] else: env_name = None cls.ask_parameter(parameter_pool, ParameterName.EnvironmentName, autogen_value = env_name) else: old_env_name = parameter_pool.get_value(ParameterName.EnvironmentName) cls.ask_parameter(parameter_pool, ParameterName.EnvironmentName) # Post processing new_env_name = parameter_pool.get_value(ParameterName.EnvironmentName) new_env_source = parameter_pool.get_source(ParameterName.EnvironmentName) # Reload RDS password if environment name changes if old_env_name != new_env_name: location = parameter_pool.get_value(ParameterName.AwsCredentialFile) \ if parameter_pool.has(ParameterName.AwsCredentialFile) else None rds_password = config_file.read_rds_master_password(new_env_name, location) if rds_password: parameter_pool.put(Parameter(ParameterName.RdsMasterPassword, rds_password, new_env_source)) else: parameter_pool.remove(ParameterName.RdsMasterPassword) # Generate option setting file pathname if parameter_pool.get_source(ParameterName.OptionSettingFile) == ParameterSource.Default\ or not misc.string_equal_ignore_case(old_env_name, new_env_name): new_opsetting_path = os.path.join(os.getcwdu(), EbLocalDir.Path, OptionSettingFile.Name + u'.' + new_env_name) old_opsetting_path = parameter_pool.get_value(ParameterName.OptionSettingFile) # Rename old style optionsetting file if parameter_pool.get_source(ParameterName.OptionSettingFile) == ParameterSource.Default\ and parameter_pool.has(ParameterName.OriginalSolutionStack)\ and old_opsetting_path and os.path.exists(old_opsetting_path): os.rename(old_opsetting_path, new_opsetting_path) # Update optionsetting file name in parameter pool parameter_pool.put(Parameter(ParameterName.OptionSettingFile, new_opsetting_path, new_env_source))
def ask_environment_name(cls, parameter_pool): # Auto generate environment name if not specified by user if not parameter_pool.has(ParameterName.EnvironmentName): old_env_name = None app_name = parameter_pool.get_value(ParameterName.ApplicationName, False) env_name = cls.generate_env_name(app_name) cls.ask_parameter(parameter_pool, ParameterName.EnvironmentName, autogen_value=env_name) else: old_env_name = parameter_pool.get_value( ParameterName.EnvironmentName, False) cls.ask_parameter(parameter_pool, ParameterName.EnvironmentName) # Post processing new_env_name = parameter_pool.get_value(ParameterName.EnvironmentName, False) new_env_source = parameter_pool.get_source( ParameterName.EnvironmentName) # Reload RDS password if environment name changes if old_env_name != new_env_name: location = parameter_pool.get_value( ParameterName.AwsCredentialFile) rds_password = config_file.read_rds_master_password( new_env_name, location) if rds_password: parameter_pool.put( Parameter(ParameterName.RdsMasterPassword, rds_password, new_env_source)) else: parameter_pool.remove(ParameterName.RdsMasterPassword) # Generate option setting file pathname if parameter_pool.get_source(ParameterName.OptionSettingFile) == ParameterSource.Default\ or not misc.string_equal_ignore_case(old_env_name, new_env_name): new_opsetting_path = os.path.join( os.getcwdu(), EbLocalDir.Path, OptionSettingFile.Name + u'.' + new_env_name) old_opsetting_path = parameter_pool.get_value( ParameterName.OptionSettingFile, False) # Rename old style optionsetting file if parameter_pool.get_source(ParameterName.OptionSettingFile) == ParameterSource.Default\ and parameter_pool.has(ParameterName.OriginalSolutionStack)\ and old_opsetting_path and os.path.exists(old_opsetting_path): os.rename(old_opsetting_path, new_opsetting_path) # Update optionsetting file name in parameter pool parameter_pool.put( Parameter(ParameterName.OptionSettingFile, new_opsetting_path, new_env_source))
def call(self, request): '''Make API call and translate AWSServiceException to more specific exception''' try: log.debug(request) return_msg = self._client.call(request, self._format) log.debug(u'Request ID: {0}'.format(return_msg.json().values()[0]\ [u'ResponseMetadata'][u'RequestId'])) return return_msg.json() except AwsServiceException as ex: log.debug(misc.to_unicode(ex)) # Translate general IAM exception if misc.string_equal_ignore_case(ex.code, AwsErrorCode.AccessDenied): raise AccessDeniedException(ex) elif misc.string_equal_ignore_case(ex.code, AwsErrorCode.OptInRequired): raise OptInRequiredException(ex) elif misc.string_equal_ignore_case(ex.code, AwsErrorCode.InsufficientPrivileges): raise InsufficientPrivilegesException(ex) elif misc.string_equal_ignore_case(ex.code, AwsErrorCode.InvalidParameterValue): raise InvalidParameterValueException(ex) elif misc.string_equal_ignore_case(ex.code, AwsErrorCode.MissingParameter): raise MissingParameterException(ex) elif misc.string_equal_ignore_case(ex.code, IamErrorCode.EntityAlreadyExists): raise IamEntityAlreadyExistsException(ex) elif misc.string_equal_ignore_case(ex.code, IamErrorCode.NoSuchEntity): raise IamNoSuchEntityException(ex) elif misc.string_equal_ignore_case(ex.code, IamErrorCode.MalformedPolicyDocument): raise IamMalformedPolicyDocumentException(ex) elif misc.string_equal_ignore_case(ex.code, IamErrorCode.LimitExceeded): raise IamLimitExceededException(ex) raise
def ask_environment_name(cls, parameter_pool): # Auto generate environment name if not specified by user if not parameter_pool.has(ParameterName.EnvironmentName): old_env_name = None app_name = parameter_pool.get_value(ParameterName.ApplicationName, False) env_name = cls.generate_env_name(app_name) cls.ask_parameter(parameter_pool, ParameterName.EnvironmentName, autogen_value = env_name) else: old_env_name = parameter_pool.get_value(ParameterName.EnvironmentName, False) #cls.ask_parameter(parameter_pool, ParameterName.EnvironmentName) print "Env Name is %s \n" % old_env_name return old_env_name # Post processing new_env_name = parameter_pool.get_value(ParameterName.EnvironmentName, False) new_env_source = parameter_pool.get_source(ParameterName.EnvironmentName) # Reload RDS password if environment name changes if old_env_name != new_env_name: location = parameter_pool.get_value(ParameterName.AwsCredentialFile) rds_password = config_file.read_rds_master_password(new_env_name, location) if rds_password: parameter_pool.put(Parameter(ParameterName.RdsMasterPassword, rds_password, new_env_source)) else: parameter_pool.remove(ParameterName.RdsMasterPassword) # Generate option setting file pathname if parameter_pool.get_source(ParameterName.OptionSettingFile) == ParameterSource.Default\ or not misc.string_equal_ignore_case(old_env_name, new_env_name): new_opsetting_path = os.path.join(os.getcwdu(), EbLocalDir.Path, OptionSettingFile.Name + u'.' + new_env_name) old_opsetting_path = parameter_pool.get_value(ParameterName.OptionSettingFile, False) # Rename old style optionsetting file if parameter_pool.get_source(ParameterName.OptionSettingFile) == ParameterSource.Default\ and parameter_pool.has(ParameterName.OriginalSolutionStack)\ and old_opsetting_path and os.path.exists(old_opsetting_path): os.rename(old_opsetting_path, new_opsetting_path) # Update optionsetting file name in parameter pool parameter_pool.put(Parameter(ParameterName.OptionSettingFile, new_opsetting_path, new_env_source))
def _sort_snapshots_by_create_time(cls, snapshots): sorted_snapshots = deque() for item in snapshots: if misc.string_equal_ignore_case(item.snapshot_type, DBSnapshot.TypeAutomated): continue #skip if snapshot is created automated if len(sorted_snapshots) < 1: sorted_snapshots.append(item) elif item._snapshot_create_time_raw < sorted_snapshots[-1]._snapshot_create_time_raw: sorted_snapshots.append(item) else: shift = 0 while item._snapshot_create_time_raw < sorted_snapshots[0]._snapshot_create_time_raw: sorted_snapshots.rotate(-1) shift = shift + 1 sorted_snapshots.appendleft(item) sorted_snapshots.rotate(shift) return sorted_snapshots
def _sort_snapshots_by_create_time(cls, snapshots): sorted_snapshots = _deque() for item in snapshots: if misc.string_equal_ignore_case(item.snapshot_type, DBSnapshot.TypeAutomated): continue #skip if snapshot is created automated if len(sorted_snapshots) < 1: sorted_snapshots.append(item) elif item._snapshot_create_time_raw < sorted_snapshots[-1]._snapshot_create_time_raw: sorted_snapshots.append(item) else: shift = 0 while item._snapshot_create_time_raw < sorted_snapshots[0]._snapshot_create_time_raw: sorted_snapshots.rotate(-1) shift = shift + 1 sorted_snapshots.appendleft(item) sorted_snapshots.rotate(shift) return sorted_snapshots
def ask_branch_environment_name(cls, parameter_pool): # Auto generate environment name if not specified by user if not parameter_pool.has(ParameterName.EnvironmentName): old_env_name = None app_name = parameter_pool.get_value(ParameterName.ApplicationName) current_branch = parameter_pool.get_value( ParameterName.CurrentBranch) env_name = re.sub(ServiceDefault.Environment.REGEX_NAME_FILTER, u'', app_name, flags=re.UNICODE) if len(env_name) > 0: env_name = env_name + ServiceDefault.Environment.BRANCH_NAME_SEPERATOR\ + current_branch + ServiceDefault.Environment.NAME_POSTFIX if len(env_name) > ServiceDefault.Environment.MAX_NAME_LEN: env_name = env_name[:ServiceDefault.Environment. MAX_NAME_LEN] else: env_name = None cls.ask_parameter(parameter_pool, ParameterName.EnvironmentName, autogen_value=env_name) else: old_env_name = parameter_pool.get_value( ParameterName.EnvironmentName) cls.ask_parameter(parameter_pool, ParameterName.EnvironmentName) # Generate option setting file pathname new_env_name = parameter_pool.get_value(ParameterName.EnvironmentName) if not misc.string_equal_ignore_case(old_env_name, new_env_name): new_opsetting_path = os.path.join( os.getcwdu(), EbLocalDir.Path, OptionSettingFile.Name + u'.' + new_env_name) parameter_pool.put( Parameter( ParameterName.OptionSettingFile, new_opsetting_path, parameter_pool.get_source(ParameterName.EnvironmentName)))
def ask_branch_environment_name(cls, parameter_pool): # Auto generate environment name if not specified by user if not parameter_pool.has(ParameterName.EnvironmentName): old_env_name = None app_name = parameter_pool.get_value(ParameterName.ApplicationName, False) current_branch = parameter_pool.get_value(ParameterName.CurrentBranch, False) env_name = cls.generate_env_name(app_name \ + ServiceDefault.Environment.BRANCH_NAME_SEPERATOR\ + current_branch) cls.ask_parameter(parameter_pool, ParameterName.EnvironmentName, autogen_value = env_name) else: old_env_name = parameter_pool.get_value(ParameterName.EnvironmentName, False) cls.ask_parameter(parameter_pool, ParameterName.EnvironmentName) # Generate option setting file pathname new_env_name = parameter_pool.get_value(ParameterName.EnvironmentName, False) if not misc.string_equal_ignore_case(old_env_name, new_env_name): new_opsetting_path = os.path.join(os.getcwdu(), EbLocalDir.Path, OptionSettingFile.Name + u'.' + new_env_name) parameter_pool.put(Parameter(ParameterName.OptionSettingFile, new_opsetting_path, parameter_pool.get_source(ParameterName.EnvironmentName)))