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(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) 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 not Green, pull the most recent warning and error events if env_info.health in [EnvironmentHealth.Red, EnvironmentHealth.Yellow]: 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, 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 + 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 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
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) # 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 "" 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 "", ) ) # 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, 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 + " " + 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 # Subcommand _, subcommands = parameter_pool.command subcommand = subcommands[0].upper() if len(subcommands) > 0 else None if subcommand == SubCommandType.OPEN: urlpath = "" if len(subcommands) > 1: urlpath = subcommands[1] if subcommands[1].startswith("/") else "/" + 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