def execute(self, parameter_pool):
        eb_client = ElasticBeanstalkClient(
            parameter_pool.get_value(ParameterName.AwsAccessKeyId),
            parameter_pool.get_value(ParameterName.AwsSecretAccessKey),
            parameter_pool.get_value(ParameterName.ServiceEndpoint),
        )
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName)
        prompt.action(TerminateEnvironmentOpMessage.Start.format(env_name))

        try:
            response = eb_client.terminate_environment(env_name)
        except:
            raise
        else:
            log.info(u"Received response for TerminateEnvironemnt call.")
            prompt.result(TerminateEnvironmentOpMessage.Succeed.format(env_name))

            self._log_api_result(self.__class__.__name__, u"TerminateEnvironment", response.result)

            parameter_pool.put(
                Parameter(
                    ParameterName.TerminateEnvironmentRequestID, response.request_id, ParameterSource.OperationOutput
                )
            )

            ret_result = OperationResult(
                self, response.request_id, TerminateEnvironmentOpMessage.Succeed, response.result
            )
        return ret_result
    def execute(self, parameter_pool):
        create_eb_local_dir()

        app_name = parameter_pool.get_value(ParameterName.ApplicationName)
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName)
        location = parameter_pool.get_value(ParameterName.OptionSettingFile)            

        prompt.action(SaveConfigurationSettingOpMessage.Start.format(env_name))
        
        try:
            option_settings = api_wrapper.retrieve_configuration_settings(parameter_pool,
                                                                          app_name,
                                                                          env_name)
            config_file.save_env_option_setting_file(location, option_settings)
        except Exception as ex:
            # Never fail. Just log event if any exception
            log.info('Cannot dump environment option settings before termination, because '.\
                     format(misc.to_unicode(ex)))
            option_settings = None
        else:
            log.info(SaveConfigurationSettingOpMessage.Succeed.format(location))
            prompt.info(SaveConfigurationSettingOpMessage.Succeed.format(location))
                   
        ret_result = OperationResult(self,
                                     None, 
                                     None,
                                     option_settings)
        return ret_result
    def execute(self, parameter_pool):
        eb_client = self._get_eb_client(parameter_pool)
        app_name = parameter_pool.get_value(ParameterName.ApplicationName, False)
        prompt.action(DeleteApplicationOpMessage.Start.format(app_name))

        try:
            response = eb_client.delete_application(app_name, u'true')
        except OperationInProgressException:
            log.info(u'Deleting Application "{0}" already in progress'.format(app_name))
            prompt.result(DeleteApplicationOpMessage.AlreadyDelete.format(app_name))
   
            ret_result = OperationResult(self,
                                         None, 
                                         DeleteApplicationOpMessage.AlreadyDelete.format(app_name),
                                         None)
        else:
            log.info(u'Received response for DeleteApplication call.')
            self._log_api_result(self.__class__.__name__, u'DeleteApplication', response.result)            
            prompt.result(DeleteApplicationOpMessage.Succeed.format(app_name))
    
            ret_result = OperationResult(self,
                                         response.request_id, 
                                         DeleteApplicationOpMessage.Succeed.format(app_name),
                                         response.result)

        
            
        return ret_result
Example #4
0
    def execute(self, parameter_pool):
        eb_client = self._get_eb_client(parameter_pool)
        
        prompt.action(ListSolutionStackOpMessage.Start)

        response = eb_client.list_available_solutionstacks()
        
        name_set = set()
        name_string = '\n\t' 
        for stack in response.result:
            name_set.add(stack.solutionstack_name)
            name_string +=  stack.solutionstack_name + '\n\t'
        
        log.info('Available solution stacks: \n{0}'.format(name_string))
        prompt.result(ListSolutionStackOpMessage.Result.format(name_string))

        parameter_pool.put(Parameter(ParameterName.AvailableSolutionStacks,
                                     name_set,
                                     ParameterSource.OperationOutput))        
        
        ret_result = OperationResult(self,
                                      response.request_id, 
                                      ListSolutionStackOpMessage.Result.format(name_string),
                                      response.result)
            
        return ret_result
    def execute(self, parameter_pool):
        eb_client = self._get_eb_client(parameter_pool)
        app_name = parameter_pool.get_value(ParameterName.ApplicationName, False)
        version_name = eb_utils.check_app_version(parameter_pool, eb_client)         
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName, False)
        stack_name = parameter_pool.get_value(ParameterName.SolutionStack, False)
        tier = parameter_pool.get_value(ParameterName.EnvironmentTier, False)

        spec = TemplateSpecification()
        
        # Try load option setting file if exist
        option_location = parameter_pool.get_value(ParameterName.OptionSettingFile, False)
        option_settings = config_file.load_env_option_setting_file(option_location,
                                                                   quiet = True)
        if option_settings is not None and len(option_settings) > 0:
            prompt.info(CreateEnvironmentOpMessage.UsingOptionSetting.format(option_location))
        else:
            option_settings = dict()

        option_remove = dict()
        
        # Process extensions first before we process options
        self._extension_handler(parameter_pool, spec, stack_name, option_settings, option_remove)
        
        # Process options
        self._option_setting_handler(parameter_pool, spec, stack_name, None, option_settings, option_remove)
                 
        prompt.action(CreateEnvironmentOpMessage.Start.format(env_name))
        try:
            response = eb_client.create_environment(application = app_name,
                                                    environment = env_name,
                                                    solution_stack = stack_name,
                                                    version_label = version_name,
                                                    option_settings = option_settings,
                                                    option_remove = option_remove,
                                                    template_specification = spec,
                                                    tier = tier)
        except AlreadyExistException:
            log.info(u'Environment "{0}" already exist.'.format(env_name))
            prompt.result(CreateEnvironmentOpMessage.AlreadyExist.format(env_name))
   
            ret_result = OperationResult(self, 
                                         None, 
                                        CreateEnvironmentOpMessage.AlreadyExist.format(env_name), 
                                         None)
        else:
            log.info(u'Received response for CreateEnvironemnt call.')
            prompt.info(CreateEnvironmentOpMessage.Succeed)
            prompt.result(CreateEnvironmentOpMessage.WaitAfterLaunch.format(env_name))
            self._log_api_result(self.__class__.__name__, u'CreateEnvironment', response.result)            
            
            parameter_pool.put(Parameter(ParameterName.CreateEnvironmentRequestID,
                                         response.request_id,
                                         ParameterSource.OperationOutput))
            
            ret_result = OperationResult(self,
                                         response.request_id, 
                                         CreateEnvironmentOpMessage.Succeed,
                                         response.result)
        return ret_result
    def execute(self, parameter_pool):
        eb_client = self._get_eb_client(parameter_pool)
        app_name = parameter_pool.get_value(ParameterName.ApplicationName, False)
        prompt.action(DeleteApplicationOpMessage.Start.format(app_name))

        try:
            response = eb_client.delete_application(app_name, 'true')
        except OperationInProgressException:
            log.info('Deleting Application "{0}" already in progress'.format(app_name))
            prompt.result(DeleteApplicationOpMessage.AlreadyDelete.format(app_name))
   
            ret_result = OperationResult(self,
                                         None, 
                                         DeleteApplicationOpMessage.AlreadyDelete.format(app_name),
                                         None)
        else:
            log.info('Received response for DeleteApplication call.')
            self._log_api_result(self.__class__.__name__, 'DeleteApplication', response.result)            
            prompt.result(DeleteApplicationOpMessage.Succeed.format(app_name))
    
            ret_result = OperationResult(self,
                                         response.request_id, 
                                         DeleteApplicationOpMessage.Succeed.format(app_name),
                                         response.result)

        
            
        return ret_result
Example #7
0
    def execute(self, parameter_pool):
        eb_client = ElasticBeanstalkClient(parameter_pool.get_value(ParameterName.AwsAccessKeyId), 
                                           parameter_pool.get_value(ParameterName.AwsSecretAccessKey),
                                           parameter_pool.get_value(ParameterName.ServiceEndpoint))

        prompt.action(ListSolutionStackOpMessage.Start)

        response = eb_client.list_available_solutionstacks()
        
        name_set = set()
        name_string = '\n\t' 
        for stack in response.result:
            name_set.add(stack.solutionstack_name)
            name_string +=  stack.solutionstack_name + '\n\t'
        
        log.info('Available solution stacks: \n{0}'.format(name_string))
        prompt.result(ListSolutionStackOpMessage.Result.format(name_string))

        parameter_pool.put(Parameter(ParameterName.AvailableSolutionStacks,
                                     name_set,
                                     ParameterSource.OperationOutput))        
        
        ret_result = OperationResult(self,
                                      response.request_id, 
                                      ListSolutionStackOpMessage.Result.format(name_string),
                                      response.result)
            
        return ret_result
    def execute(self, parameter_pool):
        eb_client = self._get_eb_client(parameter_pool)
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName, False)
        prompt.action(TerminateEnvironmentOpMessage.Start.format(env_name))

        try:
            response = eb_client.terminate_environment(env_name)
        except:
            raise
        else:
            log.info("Received response for TerminateEnvironemnt call.")
            prompt.result(TerminateEnvironmentOpMessage.Succeed.format(env_name))

            self._log_api_result(self.__class__.__name__, "TerminateEnvironment", response.result)

            parameter_pool.put(
                Parameter(
                    ParameterName.TerminateEnvironmentRequestID, response.request_id, ParameterSource.OperationOutput
                )
            )

            ret_result = OperationResult(
                self, response.request_id, TerminateEnvironmentOpMessage.Succeed, response.result
            )
        return ret_result
Example #9
0
    def execute(self, parameter_pool):
        eb_client = self._get_eb_client(parameter_pool)
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName)
        prompt.action(TerminateEnvironmentOpMessage.Start.format(env_name))

        try:
            response = eb_client.terminate_environment(env_name)
        except:
            raise
        else:
            log.info(u'Received response for TerminateEnvironemnt call.')
            prompt.result(
                TerminateEnvironmentOpMessage.Succeed.format(env_name))

            self._log_api_result(self.__class__.__name__,
                                 u'TerminateEnvironment', response.result)

            parameter_pool.put(
                Parameter(ParameterName.TerminateEnvironmentRequestID,
                          response.request_id,
                          ParameterSource.OperationOutput))

            ret_result = OperationResult(self, response.request_id,
                                         TerminateEnvironmentOpMessage.Succeed,
                                         response.result)
        return ret_result
Example #10
0
    def execute(self, parameter_pool):
        create_eb_local_dir()

        app_name = parameter_pool.get_value(ParameterName.ApplicationName)
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName)
        location = parameter_pool.get_value(ParameterName.OptionSettingFile)            

        prompt.action(SaveConfigurationSettingOpMessage.Start.format(env_name))
        
        try:
            option_settings = api_wrapper.retrieve_configuration_settings(parameter_pool,
                                                                          app_name,
                                                                          env_name)
            config_file.save_env_option_setting_file(location, option_settings)
        except Exception as ex:
            # Never fail. Just log event if any exception
            log.info(u'Cannot dump environment option settings before termination, because '.\
                     format(misc.to_unicode(ex)))
            option_settings = None
        else:
            log.info(SaveConfigurationSettingOpMessage.Succeed.format(location))
            prompt.info(SaveConfigurationSettingOpMessage.Succeed.format(location))
                   
        ret_result = OperationResult(self,
                                     None, 
                                     None,
                                     option_settings)
        return ret_result
Example #11
0
    def execute(self, parameter_pool):
        eb_client = ElasticBeanstalkClient(
            parameter_pool.get_value(ParameterName.AwsAccessKeyId),
            parameter_pool.get_value(ParameterName.AwsSecretAccessKey),
            parameter_pool.get_value(ParameterName.ServiceEndpoint))

        prompt.action(ListSolutionStackOpMessage.Start)

        response = eb_client.list_available_solutionstacks()

        name_set = set()
        name_string = u'\n\t'
        for stack in response.result:
            name_set.add(stack.solutionstack_name)
            name_string += stack.solutionstack_name + u'\n\t'

        log.info(u'Available solution stacks: \n{0}'.format(name_string))
        prompt.result(ListSolutionStackOpMessage.Result.format(name_string))

        parameter_pool.put(
            Parameter(ParameterName.AvailableSolutionStacks, name_set,
                      ParameterSource.OperationOutput))

        ret_result = OperationResult(
            self, response.request_id,
            ListSolutionStackOpMessage.Result.format(name_string),
            response.result)

        return ret_result
    def execute(self, parameter_pool):
        eb_client = self._get_eb_client(parameter_pool)
        
        prompt.action(ListSolutionStackOpMessage.Start)

        response = eb_client.list_available_solutionstacks()
        
        name_set = set()
        name_string = u'\n\t' 
        for stack in response.result:
            name_set.add(stack.solutionstack_name)
            name_string +=  stack.solutionstack_name + u'\n\t'
        
        log.info(u'Available solution stacks: \n{0}'.format(name_string))
        prompt.result(ListSolutionStackOpMessage.Result.format(name_string))

        parameter_pool.put(Parameter(ParameterName.AvailableSolutionStacks,
                                     name_set,
                                     ParameterSource.OperationOutput))        
        
        ret_result = OperationResult(self,
                                      response.request_id, 
                                      ListSolutionStackOpMessage.Result.format(name_string),
                                      response.result)
            
        return ret_result
    def execute(self, parameter_pool):
        eb_client = self._get_eb_client(parameter_pool)
        app_name = parameter_pool.get_value(ParameterName.ApplicationName,
                                            False)
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName,
                                            False)
        stack_name = parameter_pool.get_value(ParameterName.SolutionStack,
                                              False)
        prompt.action(
            UpdateEnvironmentOptionSettingOpMessage.Start.format(env_name))

        spec = TemplateSpecification()

        # Try load option setting file if exist
        option_location = parameter_pool.get_value(
            ParameterName.OptionSettingFile, False)
        option_settings = config_file.load_env_option_setting_file(
            option_location, quiet=True)
        if option_settings is not None and len(option_settings) > 0:
            prompt.info(
                UpdateEnvironmentOptionSettingOpMessage.UsingOptionSetting.
                format(option_location))
        else:
            option_settings = dict()

        option_remove = dict()
        self._option_setting_handler(parameter_pool, spec, stack_name,
                                     option_settings, option_remove)

        self._validate_change(parameter_pool, eb_client, app_name, env_name,
                              option_settings, option_remove, spec)

        try:
            response = eb_client.update_environment(
                env_name,
                option_settings=option_settings,
                option_remove=option_remove,
                template_specification=spec)
        except:
            raise
        else:
            log.info(u'Received response for UpdateEnvironemnt call.')
            prompt.result(
                UpdateEnvironmentOptionSettingOpMessage.Succeed.format(
                    env_name))

            self._log_api_result(self.__class__.__name__, u'UpdateEnvironment',
                                 response.result)

            parameter_pool.put(
                Parameter(ParameterName.UpdateEnvironmentRequestID,
                          response.request_id,
                          ParameterSource.OperationOutput))

            ret_result = OperationResult(
                self, response.request_id,
                UpdateEnvironmentOptionSettingOpMessage.Succeed.format(
                    env_name), response.result)
        return ret_result
    def execute(self, parameter_pool):
        eb_client = self._get_eb_client(parameter_pool)
        app_name = parameter_pool.get_value(ParameterName.ApplicationName, False)
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName, False)
        stack_name = parameter_pool.get_value(ParameterName.SolutionStack, False)
        prompt.action(UpdateEnvironmentOptionSettingOpMessage.Start.format(env_name))
        tier = parameter_pool.get_value(ParameterName.EnvironmentTier, False)

        spec = TemplateSpecification()

        # Try load option setting file if exist
        option_location = parameter_pool.get_value(ParameterName.OptionSettingFile, False)
        option_settings = config_file.load_env_option_setting_file(option_location, quiet=True)
        if option_settings is not None and len(option_settings) > 0:
            prompt.info(UpdateEnvironmentOptionSettingOpMessage.UsingOptionSetting.format(option_location))
        else:
            option_settings = dict()

        option_remove = dict()

        # Process extensions first before we process options
        self._extension_handler(parameter_pool, spec, stack_name, option_settings, option_remove)

        # Process options
        self._option_setting_handler(parameter_pool, spec, stack_name, env_name, option_settings, option_remove)

        self._validate_change(parameter_pool, eb_client, app_name, env_name, option_settings, option_remove, spec)

        try:
            response = eb_client.update_environment(
                env_name,
                option_settings=option_settings,
                option_remove=option_remove,
                template_specification=spec,
                tier=tier,
            )
        except:
            raise
        else:
            log.info("Received response for UpdateEnvironemnt call.")
            prompt.result(UpdateEnvironmentOptionSettingOpMessage.Succeed.format(env_name))

            self._log_api_result(self.__class__.__name__, "UpdateEnvironment", response.result)

            parameter_pool.put(
                Parameter(
                    ParameterName.UpdateEnvironmentRequestID, response.request_id, ParameterSource.OperationOutput
                )
            )

            ret_result = OperationResult(
                self,
                response.request_id,
                UpdateEnvironmentOptionSettingOpMessage.Succeed.format(env_name),
                response.result,
            )
        return ret_result
    def execute(self, parameter_pool):
        eb_client = ElasticBeanstalkClient(
            parameter_pool.get_value(ParameterName.AwsAccessKeyId),
            parameter_pool.get_value(ParameterName.AwsSecretAccessKey),
            parameter_pool.get_value(ParameterName.ServiceEndpoint))
        app_name = parameter_pool.get_value(ParameterName.ApplicationName)
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName)
        stack_name = parameter_pool.get_value(ParameterName.SolutionStack)
        prompt.action(
            UpdateEnvironmentOptionSettingOpMessage.Start.format(env_name))

        location = parameter_pool.get_value(ParameterName.OptionSettingFile)
        option_settings = config_file.load_env_option_setting_file(location,
                                                                   quiet=True)
        if option_settings is not None and len(option_settings) > 0:
            prompt.info(
                UpdateEnvironmentOptionSettingOpMessage.UsingOptionSetting.
                format(location))
        else:
            option_settings = []

        option_remove = set()
        spec = TemplateSpecification()
        rds_utils.rds_handler(parameter_pool, spec, stack_name,
                              option_settings, option_remove)
        self._option_setting_handler(option_settings, option_remove)

        self._validate_change(parameter_pool, eb_client, app_name, env_name,
                              option_settings, option_remove, spec)

        try:
            response = eb_client.update_environment(
                env_name,
                option_settings=option_settings,
                option_remove=option_remove,
                template_specification=spec)
        except:
            raise
        else:
            log.info('Received response for UpdateEnvironemnt call.')
            prompt.result(
                UpdateEnvironmentOptionSettingOpMessage.Succeed.format(
                    env_name))

            self._log_api_result(self.__class__.__name__, 'UpdateEnvironment',
                                 response.result)

            parameter_pool.put(
                Parameter(ParameterName.UpdateEnvironmentRequestID,
                          response.request_id,
                          ParameterSource.OperationOutput))

            ret_result = OperationResult(
                self, response.request_id,
                UpdateEnvironmentOptionSettingOpMessage.Succeed.format(
                    env_name), response.result)
        return ret_result
Example #16
0
    def execute(self, parameter_pool):
        eb_client = ElasticBeanstalkClient(parameter_pool.get_value(ParameterName.AwsAccessKeyId), 
                                           parameter_pool.get_value(ParameterName.AwsSecretAccessKey),
                                           parameter_pool.get_value(ParameterName.ServiceEndpoint))
        app_name = parameter_pool.get_value(ParameterName.ApplicationName)
        version_name = parameter_pool.get_value(ParameterName.ApplicationVersionName)        
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName)
        stack_name = parameter_pool.get_value(ParameterName.SolutionStack)

        # Try load option setting file if exist
        option_file_location = parameter_pool.get_value(ParameterName.OptionSettingFile)             
        option_settings = config_file.load_env_option_setting_file(option_file_location,
                                                                   quiet = True)
        if option_settings is not None and len(option_settings) > 0:
            prompt.info(CreateEnvironmentOpMessage.UsingOptionSetting.format(option_file_location))
        else:
            option_settings = []

        option_remove = set()
        spec = TemplateSpecification()
        rds_utils.rds_handler(parameter_pool, spec, stack_name, option_settings, option_remove)
        self._option_setting_handler(option_settings, option_remove)
                 
        prompt.action(CreateEnvironmentOpMessage.Start.format(env_name))
        try:
            response = eb_client.create_environment(application = app_name,
                                                    environment = env_name,
                                                    solution_stack = stack_name,
                                                    version_label = version_name,
                                                    option_settings = option_settings,
                                                    option_remove = option_remove,
                                                    template_specification = spec,
                                                    )
        except AlreadyExistException:
            log.info(u'Environment "{0}" already exist.'.format(env_name))
            prompt.result(CreateEnvironmentOpMessage.AlreadyExist.format(env_name))
   
            ret_result = OperationResult(self, 
                                         None, 
                                        CreateEnvironmentOpMessage.AlreadyExist.format(env_name), 
                                         None)
        else:
            log.info(u'Received response for CreateEnvironemnt call.')
            prompt.info(CreateEnvironmentOpMessage.Succeed)
            prompt.result(CreateEnvironmentOpMessage.WaitAfterLaunch.format(env_name))
            self._log_api_result(self.__class__.__name__, u'CreateEnvironment', response.result)            
            
            parameter_pool.put(Parameter(ParameterName.CreateEnvironmentRequestID,
                                         response.request_id,
                                         ParameterSource.OperationOutput))
            
            ret_result = OperationResult(self,
                                         response.request_id, 
                                         CreateEnvironmentOpMessage.Succeed,
                                         response.result)
        return ret_result
    def execute(self, parameter_pool):
        eb_client = ElasticBeanstalkClient(
            parameter_pool.get_value(ParameterName.AwsAccessKeyId),
            parameter_pool.get_value(ParameterName.AwsSecretAccessKey),
            parameter_pool.get_value(ParameterName.ServiceEndpoint),
        )
        app_name = parameter_pool.get_value(ParameterName.ApplicationName)
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName)
        stack_name = parameter_pool.get_value(ParameterName.SolutionStack)
        prompt.action(UpdateEnvironmentOptionSettingOpMessage.Start.format(env_name))

        location = parameter_pool.get_value(ParameterName.OptionSettingFile)
        option_settings = config_file.load_env_option_setting_file(location, quiet=True)
        if option_settings is not None and len(option_settings) > 0:
            prompt.info(UpdateEnvironmentOptionSettingOpMessage.UsingOptionSetting.format(location))
        else:
            option_settings = []

        option_remove = set()
        spec = rds_utils.rds_handler(parameter_pool, stack_name, option_settings, option_remove)
        self._validate_change(parameter_pool, eb_client, app_name, env_name, option_settings, option_remove, spec)

        try:
            response = eb_client.update_environment(
                env_name, option_settings=option_settings, option_remove=option_remove, template_specification=spec
            )
        except:
            raise
        else:
            log.info(u"Received response for UpdateEnvironemnt call.")
            prompt.result(UpdateEnvironmentOptionSettingOpMessage.Succeed.format(env_name))

            self._log_api_result(self.__class__.__name__, u"UpdateEnvironment", response.result)

            parameter_pool.put(
                Parameter(
                    ParameterName.UpdateEnvironmentRequestID, response.request_id, ParameterSource.OperationOutput
                )
            )

            ret_result = OperationResult(
                self,
                response.request_id,
                UpdateEnvironmentOptionSettingOpMessage.Succeed.format(env_name),
                response.result,
            )
        return ret_result
Example #18
0
    def execute(self, parameter_pool):
        eb_client = ElasticBeanstalkClient(
            parameter_pool.get_value(ParameterName.AwsAccessKeyId),
            parameter_pool.get_value(ParameterName.AwsSecretAccessKey),
            parameter_pool.get_value(ParameterName.ServiceEndpoint))

        app_name = parameter_pool.get_value(ParameterName.ApplicationName)
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName)
        prompt.action(DeleteApplicationOpMessage.Start.format(app_name))

        try:
            response = eb_client.delete_application(app_name, 'true')
        except OperationInProgressException:
            log.info('Deleting Application "{0}" already in progress'.format(
                app_name))
            prompt.result(
                DeleteApplicationOpMessage.AlreadyDelete.format(app_name))

            ret_result = OperationResult(
                self, None,
                DeleteApplicationOpMessage.AlreadyDelete.format(app_name),
                None)
        else:
            log.info('Received response for DeleteApplication call.')
            self._log_api_result(self.__class__.__name__, 'DeleteApplication',
                                 response.result)
            prompt.result(DeleteApplicationOpMessage.Succeed.format(app_name))

            credential_file_loc = config_file.default_aws_credential_file_location(
            )
            param_list = [rds_utils.password_key_name(env_name)]
            config_file.trim_aws_credential_file(credential_file_loc,
                                                 parameter_pool, param_list,
                                                 True)

            ret_result = OperationResult(
                self, response.request_id,
                DeleteApplicationOpMessage.Succeed.format(app_name),
                response.result)

        return ret_result
Example #19
0
    def execute(self, parameter_pool):
        create_eb_local_dir()

        app_name = parameter_pool.get_value(ParameterName.ApplicationName)
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName)
        location = parameter_pool.get_value(ParameterName.OptionSettingFile)            

        prompt.action(SaveConfigurationSettingOpMessage.Start.format(env_name))
        
        option_settings = api_wrapper.retrieve_configuration_settings(parameter_pool,
                                                                      app_name,
                                                                      env_name)
        config_file.save_env_option_setting_file(location, option_settings)
           
        log.info(SaveConfigurationSettingOpMessage.Succeed.format(location))           
        prompt.info(SaveConfigurationSettingOpMessage.Succeed.format(location))
                   
        ret_result = OperationResult(self,
                                     None, 
                                     None,
                                     option_settings)
        return ret_result
    def execute(self, parameter_pool):
        eb_client = ElasticBeanstalkClient(parameter_pool.get_value(ParameterName.AwsAccessKeyId), 
                                           parameter_pool.get_value(ParameterName.AwsSecretAccessKey),
                                           parameter_pool.get_value(ParameterName.ServiceEndpoint))

        app_name = parameter_pool.get_value(ParameterName.ApplicationName)
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName)
        prompt.action(DeleteApplicationOpMessage.Start.format(app_name))

        try:
            response = eb_client.delete_application(app_name, 'true')
        except OperationInProgressException:
            log.info('Deleting Application "{0}" already in progress'.format(app_name))
            prompt.result(DeleteApplicationOpMessage.AlreadyDelete.format(app_name))
   
            ret_result = OperationResult(self,
                                         None, 
                                         DeleteApplicationOpMessage.AlreadyDelete.format(app_name),
                                         None)
        else:
            log.info('Received response for DeleteApplication call.')
            self._log_api_result(self.__class__.__name__, 'DeleteApplication', response.result)            
            prompt.result(DeleteApplicationOpMessage.Succeed.format(app_name))
    
            credential_file_loc = config_file.default_aws_credential_file_location()
            param_list = [rds_utils.password_key_name(env_name)]
            config_file.trim_aws_credential_file(credential_file_loc, parameter_pool, param_list, True)
    
            ret_result = OperationResult(self,
                                         response.request_id, 
                                         DeleteApplicationOpMessage.Succeed.format(app_name),
                                         response.result)

        
            
        return ret_result
Example #21
0
    def execute(self, parameter_pool):
        eb_client = self._get_eb_client(parameter_pool)
        app_name = parameter_pool.get_value(ParameterName.ApplicationName,
                                            False)
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName,
                                            False)
        prompt.action(DescribeEnvironmentOpMessage.Start.format(env_name))

        response = eb_client.describe_environments(app_name,
                                                   env_name,
                                                   include_deleted=u'false')
        log.info(u'Received response for DescribeEnvironemnts call.')
        self._log_api_result(self.__class__.__name__, u'DescribeEnvironments',
                             response.result)

        # Also look up environment resources for future use
        resources = None
        try:
            resources = api_wrapper.retrieve_environment_resources(
                parameter_pool, env_name)
        except InvalidParameterValueException:
            pass

        env_present = (len(response.result) > 0) and bool(resources)

        if env_present:  # If have result
            env_info = response.result[0]

            message = DescribeEnvironmentOpMessage.Result.format(
                env_info.cname, env_info.status, env_info.health)
            prompt.result(message)

            # Display sqs queue info before environment detail
            if resources.queues:
                for queue in resources.queues:
                    message = DescribeEnvironmentOpMessage.QueueInfo.format(
                        queue.name, queue.url)
                    prompt.result(message)

            tier_serialized = env_info.tier.to_serialized_string(
            ) if env_info.tier else u''
            prompt.info(
                DescribeEnvironmentOpMessage.Detail.format(
                    env_info.environment_name, env_info.environment_id,
                    tier_serialized, env_info.solution_stack_name,
                    env_info.version_label, env_info.date_created,
                    env_info.date_updated,
                    env_info.description if env_info.description else u''))

            # If not Green, pull the most recent warning and error events
            if env_info.health in [EnvironmentHealth.Red, EnvironmentHealth.Yellow] \
                or (env_info.status == EnvironmentStatus.Ready \
                    and env_info.health == EnvironmentHealth.Grey):
                events = eb_client.describe_events(
                    app_name,
                    env_name,
                    max_records=ServiceDefault.STATUS_EVENT_MAX_NUM,
                    severity=ServiceDefault.STATUS_EVENT_LEVEL)
                if len(events.result) > 0:
                    # Having one error event
                    for event in events.result:
                        msg = u'{0}\t{1}\t{2}'.format(event.event_date,
                                                      event.severity,
                                                      event.message)
                        log.info(u'Found last error event: {0}'.format(msg))
                        prompt.plain(msg)

            # Display RDS instance host info
            try:
                logical_id, rds_property = rds_utils.retrieve_rds_instance_property\
                                                        (parameter_pool, resources)
                if rds_property is not None:
                    prompt.result(DescribeEnvironmentOpMessage.RdsInfo.format\
                                  (logical_id,
                                   rds_property.endpoint.address,
                                   rds_property.endpoint.port))
                    prompt.info(DescribeEnvironmentOpMessage.RdsDetail.format\
                                  (rds_property.engine + u' ' + rds_property.engine_version,
                                   rds_property.allocated_storage,
                                   rds_property.db_instance_class,
                                   rds_property.multi_az,
                                   rds_property.master_username,
                                   rds_property.instance_create_time,
                                   rds_property.db_instance_status))

            except BaseException as ex:
                log.error(
                    u'Encountered error when retrieve environment resources: {0}.'
                    .format(ex))
                raise

            # Subcommand
            _, subcommands = parameter_pool.command
            subcommand = subcommands[0].upper(
            ) if len(subcommands) > 0 else None
            if subcommand == SubCommandType.OPEN:
                urlpath = u''
                if len(subcommands) > 1:
                    urlpath = subcommands[1] if subcommands[1].startswith(
                        u'/') else u'/' + subcommands[1]
                shell_utils.open_url(env_info.cname + urlpath, False)

        else:
            # No result. Environment not exist.
            message = DescribeEnvironmentOpMessage.NoEnvironment.format(
                env_name)
            prompt.result(message)

        ret_result = OperationResult(self, response.request_id, message,
                                     response.result)
        return ret_result
Example #22
0
    def _wait_for_env_operation_finish(self,
                                       eb_client,
                                       env_name,
                                       original_request_id,
                                       pending_status,
                                       expected_health,
                                       operation_name,
                                       action_name,
                                       wait_timeout,
                                       poll_delay,
                                       include_deleted='false',
                                       initial_delay=0,
                                       quiet=False):
        '''
        Loop polling environment status while it is in specified pending_status
        and/or health state, until status changes and/or health state meet expectation, 
        or reach wait_timeout threshold. While polling retrieve events related to 
        specified request_id or all recent events if not specified. 
        '''
        # Just return if not specify either pending status and health expectation
        if pending_status is None and expected_health is None:
            return

        if quiet:
            ori_prompt_level = prompt.get_level()
            prompt.set_level(OutputLevel.Quiet)

        prompt.action(BaseOpMessage.WaitForEnv.format(env_name, action_name))
        prompt.info(BaseOpMessage.UserCanInterrupt)
        _time.sleep(initial_delay)  # Wait before

        polling_start_time = _time.time()
        event_start_time = None if original_request_id is not None \
            else misc.unixtime_to_utc(_time.time())
        while _time.time() - polling_start_time < wait_timeout:

            # Retrieve related events
            log.info('Retrieving events for Environment "{0}" after UTC time {1}.'.\
                     format(env_name, event_start_time))

            event_response = eb_client.describe_events(
                None,
                env_name,
                request_id=original_request_id,
                start_time=event_start_time)

            self._log_api_result(operation_name, 'DescribeEvents',
                                 event_response.result)

            # Output events related to environment launch
            if len(event_response.result) > 0:
                # Having new events
                event_response.result.reverse()
                for event in event_response.result:
                    log.info('{0}\t{1}\t{2}'.format\
                             (event.event_date, event.severity, event.message))
                    prompt.plain('{0}\t{1}\t{2}'.format\
                                (event.event_date, event.severity, event.message))

                    event_start_time = misc.unixtime_to_utc(
                        event.event_date_raw + 0.001)


#            else:
#                prompt.action(BaseOpMessage.Running)

# Describe environment status
            env_response = eb_client.describe_environments(
                environment_names=env_name, include_deleted=include_deleted)
            if len(env_response.result) < 1:
                raise EnvironmentNotExistError(
                    BaseOpMessage.EnvNotExist.format(env_name))

            if pending_status is None:
                # No specified pending status
                if expected_health is not None \
                    and env_response.result[0].health.lower() == expected_health.lower():
                    # Meet with expected health, stop polling
                    break
            else:
                # Has specified pending status
                if env_response.result[0].status.lower(
                ) != pending_status.lower():
                    # Not in pending status
                    if expected_health is None:
                        # No expected health, stop polling
                        break
                    elif env_response.result[0].health.lower(
                    ) == expected_health.lower():
                        # Meet with expected health, stop polling
                        break

            log.info('Received response for DescribeEnvironemnts call.')
            self._log_api_result(operation_name, 'DescribeEnvironments',
                                 env_response.result)

            _time.sleep(poll_delay)
        else:
            log.error('Breach timeout threshold of waiting environment {0}.'.\
                      format(action_name))

        if quiet:
            prompt.set_level(ori_prompt_level)

        return env_response.result
    def execute(self, parameter_pool):
        eb_client = self._get_eb_client(parameter_pool)
        app_name = parameter_pool.get_value(ParameterName.ApplicationName, False)
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName, False)
        prompt.action(DescribeEnvironmentOpMessage.Start.format(env_name))

        response = eb_client.describe_environments(app_name, 
                                                   env_name, 
                                                   include_deleted = u'false')
        log.info(u'Received response for DescribeEnvironemnts call.')
        self._log_api_result(self.__class__.__name__, u'DescribeEnvironments', response.result)

        # Also look up environment resources for future use
        resources = None
        try:
            resources = api_wrapper.retrieve_environment_resources(parameter_pool, env_name)
        except InvalidParameterValueException:
            pass
        
        env_present = (len(response.result) > 0) and bool(resources)
        
        if env_present:    # If have result 
            env_info = response.result[0]
            
            message = DescribeEnvironmentOpMessage.Result.format(env_info.cname, 
                                                                 env_info.status, 
                                                                 env_info.health)
            prompt.result(message)
            
            # Display sqs queue info before environment detail
            if resources.queues:
                for queue in resources.queues:
                    message = DescribeEnvironmentOpMessage.QueueInfo.format(queue.name, queue.url)
                    prompt.result(message)
            
            tier_serialized = env_info.tier.to_serialized_string() if env_info.tier else u''
            prompt.info(DescribeEnvironmentOpMessage.Detail.format(env_info.environment_name, 
                                                                   env_info.environment_id,
                                                                   tier_serialized, 
                                                                   env_info.solution_stack_name,
                                                                   env_info.version_label, 
                                                                   env_info.date_created, 
                                                                   env_info.date_updated, 
                                                                   env_info.description if env_info.description else u''))

            # If not Green, pull the most recent warning and error events
            if env_info.health in [EnvironmentHealth.Red, EnvironmentHealth.Yellow] \
                or (env_info.status == EnvironmentStatus.Ready \
                    and env_info.health == EnvironmentHealth.Grey):
                events = eb_client.describe_events(app_name, 
                                                   env_name, 
                                                   max_records = ServiceDefault.STATUS_EVENT_MAX_NUM, 
                                                   severity = ServiceDefault.STATUS_EVENT_LEVEL)
                if len(events.result) > 0:
                    # Having one error event
                    for event in events.result:
                        msg = u'{0}\t{1}\t{2}'.format(event.event_date, 
                                                      event.severity, 
                                                      event.message)
                        log.info(u'Found last error event: {0}'.format(msg))
                        prompt.plain(msg)                
                        
            
            # Display RDS instance host info
            try:
                logical_id, rds_property = rds_utils.retrieve_rds_instance_property\
                                                        (parameter_pool, resources)
                if rds_property is not None:
                    prompt.result(DescribeEnvironmentOpMessage.RdsInfo.format\
                                  (logical_id, 
                                   rds_property.endpoint.address, 
                                   rds_property.endpoint.port))
                    prompt.info(DescribeEnvironmentOpMessage.RdsDetail.format\
                                  (rds_property.engine + u' ' + rds_property.engine_version, 
                                   rds_property.allocated_storage, 
                                   rds_property.db_instance_class, 
                                   rds_property.multi_az, 
                                   rds_property.master_username, 
                                   rds_property.instance_create_time, 
                                   rds_property.db_instance_status))
                        
            except BaseException as ex:
                log.error(u'Encountered error when retrieve environment resources: {0}.'.format(ex))
                raise

            # Subcommand
            _, subcommands = parameter_pool.command
            subcommand = subcommands[0].upper() if len(subcommands) > 0 else None
            if subcommand == SubCommandType.OPEN:
                urlpath = u''
                if len(subcommands) > 1:
                    urlpath = subcommands[1] if subcommands[1].startswith(u'/') else u'/' + subcommands[1]
                shell_utils.open_url(env_info.cname + urlpath, False)
                        
        else:
            # No result. Environment not exist.
            message = DescribeEnvironmentOpMessage.NoEnvironment.format(env_name) 
            prompt.result(message)
            
        ret_result = OperationResult(self, response.request_id, message, response.result)
        return ret_result
Example #24
0
    def _wait_for_env_operation_finish(self, 
                                       eb_client, 
                                       env_name, 
                                       original_request_id,
                                       pending_status,
                                       expected_health,
                                       operation_name, 
                                       action_name,
                                       wait_timeout, 
                                       poll_delay, 
                                       include_deleted = u'false',
                                       initial_delay = 0,
                                       quiet = False
                                       ):
        '''
        Loop polling environment status while it is in specified pending_status
        and/or health state, until status changes and/or health state meet expectation, 
        or reach wait_timeout threshold. While polling retrieve events related to 
        specified request_id or all recent events if not specified. 
        '''
        # Just return if not specify either pending status and health expectation
        if pending_status is None and expected_health is None:
            return

        if quiet:
            ori_prompt_level = prompt.get_level()
            prompt.set_level(OutputLevel.Quiet)
        
        prompt.action(BaseOpMessage.WaitForEnv.format(env_name, action_name))
        prompt.info(BaseOpMessage.UserCanInterrupt)
        _time.sleep(initial_delay) # Wait before 
        
        polling_start_time = _time.time()
        event_start_time = None if original_request_id is not None \
            else misc.unixtime_to_utc(_time.time())
        while _time.time() - polling_start_time < wait_timeout:
            
            # Retrieve related events
            log.info(u'Retrieving events for Environment "{0}" after UTC time {1}.'.\
                     format(env_name, event_start_time))
            
            event_response = eb_client.describe_events(None, 
                                                       env_name, 
                                                       request_id = original_request_id, 
                                                       start_time = event_start_time)
                
            self._log_api_result(operation_name, u'DescribeEvents', event_response.result)
            
            # Output events related to environment launch
            if len(event_response.result) > 0:
                # Having new events
                event_response.result.reverse()
                for event in event_response.result:
                    log.info(u'{0}\t{1}\t{2}'.format\
                             (event.event_date, event.severity, event.message))
                    prompt.plain(u'{0}\t{1}\t{2}'.format\
                                (event.event_date, event.severity, event.message))
                    
                    event_start_time = misc.unixtime_to_utc(event.event_date_raw + 0.001)
#            else:
#                prompt.action(BaseOpMessage.Running)            
            
            # Describe environment status
            env_response = eb_client.describe_environments(environment_names = env_name, 
                                                           include_deleted = include_deleted)
            if len(env_response.result) < 1:
                raise EnvironmentNotExistError(BaseOpMessage.EnvNotExist.format(env_name))
            
            if pending_status is None:
                # No specified pending status
                if expected_health is not None \
                    and env_response.result[0].health.lower() == expected_health.lower():
                    # Meet with expected health, stop polling
                    break;
            else:
                # Has specified pending status
                if env_response.result[0].status.lower() != pending_status.lower():
                    # Not in pending status
                    if expected_health is None:
                        # No expected health, stop polling
                        break;
                    elif env_response.result[0].health.lower() == expected_health.lower():
                        # Meet with expected health, stop polling
                        break;
                    
            log.info(u'Received response for DescribeEnvironemnts call.')
            self._log_api_result(operation_name, u'DescribeEnvironments', env_response.result)
            
            _time.sleep(poll_delay)
        else:
            log.error(u'Breach timeout threshold of waiting environment {0}.'.\
                      format(action_name))
        
        if quiet:
            prompt.set_level(ori_prompt_level)
                    
        return env_response.result
    def execute(self, parameter_pool):
        eb_client = self._get_eb_client(parameter_pool)
        app_name = parameter_pool.get_value(ParameterName.ApplicationName, False)
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName, False)
        prompt.action(DescribeEnvironmentOpMessage.Start.format(env_name))

        response = eb_client.describe_environments(app_name, 
                                                   env_name, 
                                                   include_deleted = 'false')
        log.info('Received response for DescribeEnvironemnts call.')
        self._log_api_result(self.__class__.__name__, 'DescribeEnvironments', response.result)            

        if len(response.result) > 0:    # If have result 
            env_info = response.result[0]
            message = DescribeEnvironmentOpMessage.Result.format(env_info.cname, 
                                                                 env_info.status, 
                                                                 env_info.health)          
            prompt.result(message)
            prompt.info(DescribeEnvironmentOpMessage.Detail.format(env_info.environment_name, 
                                                                   env_info.environment_id, 
                                                                   env_info.solution_stack_name, 
                                                                   env_info.version_label, 
                                                                   env_info.date_created, 
                                                                   env_info.date_updated, 
                                                                   env_info.description if env_info.description else ''))

            # If not Green, pull the most recent warning and error events
            if env_info.health in [EnvironmentHealth.Red, EnvironmentHealth.Yellow] \
                or (env_info.status == EnvironmentStatus.Ready \
                    and env_info.health == EnvironmentHealth.Grey):
                events = eb_client.describe_events(app_name, 
                                                   env_name, 
                                                   max_records = ServiceDefault.STATUS_EVENT_MAX_NUM, 
                                                   severity = ServiceDefault.STATUS_EVENT_LEVEL)
                if len(events.result) > 0:
                    # Having one error event
                    for event in events.result:
                        msg = '{0}\t{1}\t{2}'.format(event.event_date, 
                                                      event.severity, 
                                                      event.message)
                        log.info('Found last error event: {0}'.format(msg))
                        prompt.plain(msg)                
                        
                        
            # Display RDS instance host info
            try:
                logical_id, rds_property = rds_utils.retrieve_rds_instance_property\
                                                        (parameter_pool, env_name)
                if rds_property is not None:
                    prompt.result(DescribeEnvironmentOpMessage.RdsInfo.format\
                                  (logical_id, 
                                   rds_property.endpoint.address, 
                                   rds_property.endpoint.port))
                    prompt.info(DescribeEnvironmentOpMessage.RdsDetail.format\
                                  (rds_property.engine + ' ' + rds_property.engine_version, 
                                   rds_property.allocated_storage, 
                                   rds_property.db_instance_class, 
                                   rds_property.multi_az, 
                                   rds_property.master_username, 
                                   rds_property.instance_create_time, 
                                   rds_property.db_instance_status))
                        
            except BaseException as ex:
                log.error('Encountered error when retrieve environment resources: {0}.'.format(ex))
                raise
                        
        else:
            # No result. Environment not exist.
            message = DescribeEnvironmentOpMessage.NoEnvironment.format(env_name) 
            prompt.result(message)
            
        ret_result = OperationResult(self, response.request_id, message, response.result)
        return ret_result
Example #26
0
    def execute(self, parameter_pool):
        eb_client = self._get_eb_client(parameter_pool)
        app_name = parameter_pool.get_value(ParameterName.ApplicationName,
                                            False)
        version_name = eb_utils.check_app_version(parameter_pool, eb_client)
        env_name = parameter_pool.get_value(ParameterName.EnvironmentName,
                                            False)
        stack_name = parameter_pool.get_value(ParameterName.SolutionStack,
                                              False)
        tier = parameter_pool.get_value(ParameterName.EnvironmentTier, False)

        spec = TemplateSpecification()

        # Try load option setting file if exist
        option_location = parameter_pool.get_value(
            ParameterName.OptionSettingFile, False)
        option_settings = config_file.load_env_option_setting_file(
            option_location, quiet=True)
        if option_settings is not None and len(option_settings) > 0:
            prompt.info(
                CreateEnvironmentOpMessage.UsingOptionSetting.format(
                    option_location))
        else:
            option_settings = dict()

        option_remove = dict()

        # Process extensions first before we process options
        self._extension_handler(parameter_pool, spec, stack_name,
                                option_settings, option_remove)

        # Process options
        self._option_setting_handler(parameter_pool, spec, stack_name, None,
                                     option_settings, option_remove)

        prompt.action(CreateEnvironmentOpMessage.Start.format(env_name))
        try:
            response = eb_client.create_environment(
                application=app_name,
                environment=env_name,
                solution_stack=stack_name,
                version_label=version_name,
                option_settings=option_settings,
                option_remove=option_remove,
                template_specification=spec,
                tier=tier)
        except AlreadyExistException:
            log.info(u'Environment "{0}" already exist.'.format(env_name))
            prompt.result(
                CreateEnvironmentOpMessage.AlreadyExist.format(env_name))

            ret_result = OperationResult(
                self, None,
                CreateEnvironmentOpMessage.AlreadyExist.format(env_name), None)
        else:
            log.info(u'Received response for CreateEnvironemnt call.')
            prompt.info(CreateEnvironmentOpMessage.Succeed)
            prompt.result(
                CreateEnvironmentOpMessage.WaitAfterLaunch.format(env_name))
            self._log_api_result(self.__class__.__name__, u'CreateEnvironment',
                                 response.result)

            parameter_pool.put(
                Parameter(ParameterName.CreateEnvironmentRequestID,
                          response.request_id,
                          ParameterSource.OperationOutput))

            ret_result = OperationResult(self, response.request_id,
                                         CreateEnvironmentOpMessage.Succeed,
                                         response.result)
        return ret_result