ebcli/controllers/platform/status.py (101 lines of code) (raw):

# Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You # may not use this file except in compliance with the License. A copy of # the License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF # ANY KIND, either express or implied. See the License for the specific # language governing permissions and limitations under the License. from ebcli.core import io from ebcli.core.abstractcontroller import AbstractBaseController from ebcli.objects.exceptions import InvalidPlatformVersionError from ebcli.objects.platform import PlatformVersion from ebcli.operations import platformops, platform_version_ops, solution_stack_ops from ebcli.resources.strings import strings, flag_text class PlatformShowController(AbstractBaseController): class Meta: requires_directory_initialization = True label = 'platform show' aliases = ['show'] aliases_only = True stacked_on = 'platform' stacked_type = 'nested' description = strings['platformshow.info'] usage = AbstractBaseController.Meta.usage.format(cmd='platform show') def do_command(self): app_name = self.get_app_name() env_name = self.get_env_name(noerror=True) # This could be an ARN or a solution stack platform / or solution stack short name config_platform = solution_stack_ops.get_default_solution_stack() want_solution_stack = False if PlatformVersion.is_custom_platform_arn(config_platform): platform_name, latest_platform = self.get_latest_custom_platform(config_platform) else: want_solution_stack = True platform_name, latest_platform = self.get_latest_solution_stack(config_platform) io.echo('Current default platform:', config_platform) if config_platform.lower() is platform_name.lower(): io.echo('Most recent platform: ', latest_platform) else: io.echo('New environments will be running: ', platform_name) if env_name: if want_solution_stack: platform = platformops.get_environment_platform( app_name, env_name, want_solution_stack=want_solution_stack ).name else: platform = platformops.get_environment_platform( app_name, env_name, want_solution_stack=want_solution_stack ).arn io.echo() io.echo('Platform info for environment "{env_name}":' .format(env_name=env_name)) io.echo('Current:', platform) io.echo('Latest: ', latest_platform) if latest_platform is platform: io.echo(strings['platformstatus.upgrade']) def get_latest_solution_stack(self, solution_stack): full_platform = solution_stack_ops.find_solution_stack_from_string(solution_stack) latest_platform = solution_stack_ops.find_solution_stack_from_string( full_platform.platform_shorthand, find_newer=True ) return full_platform.name, latest_platform.name def get_latest_custom_platform(self, platform_arn): latest_platform = platform_version_ops.get_latest_custom_platform_version(platform_arn) return platform_arn, latest_platform.platform_shorthand class GenericPlatformStatusController(AbstractBaseController): class Meta: is_platform_workspace_only_command = True requires_directory_initialization = True description = strings['platformshowversion.info'] arguments = [ ( ['version'], dict( action='store', nargs='?', default=None, help=flag_text['platformshowversion.version'] ) ), ] epilog = strings['platformshowversion.epilog'] @classmethod def clone(cls): return type('Meta', cls.__bases__, dict(cls.__dict__)) def do_command(self): try: platformops.get_version_status(self.app.pargs.version) except InvalidPlatformVersionError: if not self.app.pargs.version: io.log_error("This workspace is currently associated with a deleted version.") else: raise InvalidPlatformVersionError(strings['exit.nosuchplatformversion']) class PlatformWorkspaceStatusController(GenericPlatformStatusController): Meta = GenericPlatformStatusController.Meta.clone() Meta.label = 'platform status' Meta.aliases = ['status'] Meta.aliases_only = True Meta.stacked_on = 'platform' Meta.stacked_type = 'nested' Meta.usage = 'eb platform status <version> [options...]' class EBPStatusController(GenericPlatformStatusController): Meta = GenericPlatformStatusController.Meta.clone() Meta.label = 'status' Meta.usage = 'ebp status <version> [options...]'