Exemplo n.º 1
0
    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
Exemplo n.º 2
0
def _get_solution_stack():
    solution_string = solution_stack_ops.get_default_solution_stack()
    soln_stk = None

    # Test out sstack and tier before we ask any questions (Fast Fail)
    if solution_string:
        if PlatformVersion.is_custom_platform_arn(solution_string):
            try:
                platformops.describe_custom_platform_version(solution_string)
            except NotFoundError:
                raise NotFoundError(
                    'Platform arn {} does not appear to be valid'.format(
                        solution_string))

            soln_stk = PlatformVersion(solution_string)
        else:
            try:
                soln_stk = solution_stack_ops.find_solution_stack_from_string(
                    solution_string)

                if PlatformVersion.is_eb_managed_platform_arn(soln_stk):
                    soln_stk = PlatformVersion.get_platform_name(soln_stk)

            except NotFoundError:
                raise NotFoundError(
                    'Solution stack {} does not appear to be valid'.format(
                        solution_string))

    if not soln_stk:
        raise NotInitializedError

    return soln_stk
Exemplo n.º 3
0
def _get_solution_stack():
    solution_string = solution_stack_ops.get_default_solution_stack()
    soln_stk = None

    if solution_string:
        if PlatformVersion.is_custom_platform_arn(solution_string):
            try:
                platform_version_ops.describe_custom_platform_version(
                    solution_string)
            except NotFoundError:
                raise NotFoundError(
                    alerts['platform.invalidstring'].format(solution_string))

            soln_stk = PlatformVersion(solution_string)
        else:
            try:
                soln_stk = solution_stack_ops.find_solution_stack_from_string(
                    solution_string)

                if PlatformVersion.is_eb_managed_platform_arn(soln_stk):
                    soln_stk = PlatformVersion.get_platform_name(soln_stk)

            except NotFoundError:
                raise NotFoundError(
                    'Solution stack {} does not appear to be valid'.format(
                        solution_string))

    if not soln_stk:
        raise NotInitializedError

    return soln_stk
Exemplo n.º 4
0
    def get_solution_stack(self):
        # Get solution stack from command line arguments
        solution_string = self.app.pargs.platform

        # Get solution stack from config file, if exists
        if not solution_string:
            try:
                solution_string = solution_stack_ops.get_default_solution_stack()
            except NotInitializedError:
                solution_string = None

        # Validate that the platform exists
        if solution_string:
            solution_stack_ops.find_solution_stack_from_string(solution_string)

        return solution_string
Exemplo n.º 5
0
    def get_solution_stack(self):
        # Get solution stack from command line arguments
        solution_string = self.app.pargs.platform

        # Get solution stack from config file, if exists
        if not solution_string:
            try:
                solution_string = solution_stack_ops.get_default_solution_stack()
            except NotInitializedError:
                solution_string = None

        # Validate that the platform exists
        if solution_string:
            solution_stack_ops.find_solution_stack_from_string(solution_string)

        return solution_string
Exemplo n.º 6
0
def get_platform_for_platform_string(platform_string):
    if PlatformVersion.is_valid_arn(platform_string):
        return PlatformVersion(platform_string).hydrate(
            elasticbeanstalk.describe_platform_version)

    if platform_branch_ops.is_platform_branch_name(platform_string):
        return platform_version_ops.get_preferred_platform_version_for_branch(platform_string)

    return solution_stack_ops.find_solution_stack_from_string(platform_string)
    def test_find_solution_stack_from_string__return_latest_custom_platform(
            self, latest_custom_platform_retriever_mock,
            available_solution_stacks_mock):
        available_solution_stacks_mock.return_value = []
        latest_custom_platform_arn = 'arn:aws:elasticbeanstalk:us-west-2:123123123:platform/custom-platform-2/1.0.3'
        latest_custom_platform_retriever_mock.return_value = PlatformVersion(
            latest_custom_platform_arn)

        self.assertEqual(
            PlatformVersion(latest_custom_platform_arn),
            solution_stack_ops.find_solution_stack_from_string(
                latest_custom_platform_arn, find_newer=True))
    def test_find_solution_stack_from_string__retrieves_latest(
            self, solution_stacks_retriever_mock):
        solution_stacks = [
            SolutionStack('64bit Amazon Linux 2017.03 v4.2.1 running Node.js'),
            SolutionStack('64bit Amazon Linux 2017.03 v4.2.0 running Node.js')
        ]
        solution_stacks_retriever_mock.return_value = solution_stacks

        self.assertEqual(
            SolutionStack('64bit Amazon Linux 2017.03 v4.2.1 running Node.js'),
            solution_stack_ops.find_solution_stack_from_string(
                '64bit Amazon Linux 2017.03 v4.2.0 running Node.js',
                find_newer=True))
Exemplo n.º 9
0
def get_solution_stack(platform, sstack, interactive):
    customer_provided_platform = not not platform
    if not platform:
        try:
            platform = solution_stack_ops.get_default_solution_stack()
        except NotInitializedError:
            platform = None

    # Validate that the platform exists
    if platform:
        solution_stack_ops.find_solution_stack_from_string(platform)

    platform = platform or sstack

    if fileoperations.env_yaml_exists():
        platform = platform or extract_solution_stack_from_env_yaml()

    if not platform or (interactive and not customer_provided_platform):
        platform = solution_stack_ops.get_solution_stack_from_customer(
        ).platform_shorthand

    return platform
Exemplo n.º 10
0
    def put(self):
        app_name = self.get_app_name()
        name = self._get_cfg_name('put')
        platform = solution_stack_ops.get_default_solution_stack()

        if not PlatformVersion.is_valid_arn(platform):
            platform = solution_stack_ops.find_solution_stack_from_string(
                platform)
            platform = platform.name

        saved_configs.update_config(app_name, name)
        filename = fileoperations.get_filename_without_extension(name)
        saved_configs.validate_config_file(app_name, filename, platform)
    def test_find_solution_stack_from_string__retrieves_latest_python_solution_Stack(
            self, solution_stacks_retriever_mock):
        solution_stacks = [
            SolutionStack(
                '64bit Amazon Linux 2014.09 v1.1.0 running Python 2.7'),
            SolutionStack(
                '64bit Amazon Linux 2014.09 v1.1.0 running Python 3.6')
        ]
        solution_stacks_retriever_mock.return_value = solution_stacks

        self.assertEqual(
            SolutionStack(
                '64bit Amazon Linux 2014.09 v1.1.0 running Python 2.7'),
            solution_stack_ops.find_solution_stack_from_string(
                'Python 2.7', find_newer=True))
    def test_find_solution_stack_from_string__eb_managed_platform(
            self, platform_arn_to_solution_stack_mock,
            solution_stack_lister_mock):
        solution_stack_lister_mock.return_value = [
            '64bit Amazon Linux 2017.09 v2.7.1 running Tomcat 8 Java 8'
        ]
        platform_arn_to_solution_stack_mock.return_value = SolutionStack(
            '64bit Amazon Linux 2017.09 v2.7.1 running Tomcat 8 Java 8')

        self.assertEqual(
            SolutionStack(
                '64bit Amazon Linux 2017.09 v2.7.1 running Tomcat 8 Java 8'),
            solution_stack_ops.find_solution_stack_from_string(
                'arn:aws:elasticbeanstalk:us-west-2::platform/Tomcat 8 with Java 8 running on 64bit Amazon Linux/2.7.1'
            ))
Exemplo n.º 13
0
def get_platform(solution_string, iprofile=None):
    """
    Set a PlatformVersion or a SolutionStack based on the `solution_string`.
    :param solution_string: The value of the `--platform` argument input by the customer
    :param iprofile: The instance profile, if any, the customer passed as argument
    :return: a PlatformVersion or a SolutionStack object depending on whether the match was
        against an ARN of a Solution Stack name.
    """
    solution = solution_stack_ops.find_solution_stack_from_string(solution_string)
    solution = solution or solution_stack_ops.get_solution_stack_from_customer()

    if isinstance(solution, SolutionStack):
        if solution.language_name == 'Multi-container Docker' and not iprofile:
            io.log_warning(prompts['ecs.permissions'])

    return solution
    def test_find_solution_stack_from_string__custom_platform(
            self, custom_platforms_lister_mock, solution_stack_lister_mock):
        solution_stack_lister_mock.return_value = []
        custom_platforms_lister_mock.return_value = [
            'arn:aws:elasticbeanstalk:us-west-2:12345678:platform/custom-platform-1/1.0.0',
        ]

        custom_platform_inputs = [
            'arn:aws:elasticbeanstalk:us-west-2:12345678:platform/custom-platform-1/1.0.0',
            'custom-platform-1'
        ]

        for custom_platform_input in custom_platform_inputs:
            self.assertEqual(
                PlatformVersion(
                    'arn:aws:elasticbeanstalk:us-west-2:12345678:platform/custom-platform-1/1.0.0'
                ),
                solution_stack_ops.find_solution_stack_from_string(
                    custom_platform_input))
Exemplo n.º 15
0
def upgrade_env(app_name, env_name, timeout, confirm, noroll):
    env = elasticbeanstalk.get_environment_settings(app_name, env_name)
    latest = solution_stack_ops.find_solution_stack_from_string(
        env.platform.name, find_newer=True)

    if latest.name == env.platform.name:
        io.echo(prompts['upgrade.alreadylatest'])
        return
    else:
        single = elasticbeanstalk.get_option_setting(
            env.option_settings, namespaces.ENVIRONMENT,
            'EnvironmentType') == 'SingleInstance'
        rolling_enabled = elasticbeanstalk.get_option_setting(
            env.option_settings, namespaces.ROLLING_UPDATES,
            option_names.ROLLING_UPDATE_ENABLED) == 'true'
        webserver = env.tier.name.lower() == 'webserver'

        io.echo()
        io.echo(prompts['upgrade.infodialog'].format(env_name))
        io.echo('Current platform:', env.platform)
        io.echo('Latest platform: ', latest.name)
        io.echo()

        warning = _get_warning_message(confirm, single, rolling_enabled,
                                       webserver, noroll)
        if warning:
            io.log_warning(warning)
            io.echo(prompts['upgrade.altmessage'])
            io.echo()

        if not confirm:
            io.validate_action(prompts['upgrade.validate'], env.name)

        add_rolling = _should_add_rolling(single, rolling_enabled, noroll)

        do_upgrade(env_name,
                   add_rolling,
                   timeout,
                   latest.name,
                   health_based=webserver,
                   platform_arn=latest.name)
Exemplo n.º 16
0
def _alert_if_platform_is_older_than_the_latest(env):
    latest = solution_stack_ops.find_solution_stack_from_string(env.platform.name, find_newer=True)
    if env.platform != latest:
        io.log_alert(alerts['platform.old'])
Exemplo n.º 17
0
    def do_command(self):
        app_name = self.get_app_name()
        env_name = self.get_env_name()
        clone_name = self.app.pargs.clone_name
        cname = self.app.pargs.cname
        scale = self.app.pargs.scale
        nohang = self.app.pargs.nohang
        tags = self.app.pargs.tags
        envvars = self.app.pargs.envvars
        exact = self.app.pargs.exact
        timeout = self.app.pargs.timeout
        provided_clone_name = clone_name is not None
        platform = None

        env = elasticbeanstalk.get_environment(app_name=app_name,
                                               env_name=env_name)
        tier = env.tier
        if 'worker' in tier.name.lower() and cname:
            raise InvalidOptionsError(strings['worker.cname'])

        if cname:
            if not elasticbeanstalk.is_cname_available(cname):
                raise AlreadyExistsError(strings['cname.unavailable'].replace(
                    '{cname}', cname))

        tags = tagops.get_and_validate_tags(tags)
        envvars = get_and_validate_envars(envvars)

        if not clone_name:
            if len(env_name) < 16:
                unique_name = env_name + '-clone'
            else:
                unique_name = 'my-cloned-env'

            env_list = elasticbeanstalk.get_environment_names(app_name)

            unique_name = utils.get_unique_name(unique_name, env_list)

            clone_name = io.prompt_for_environment_name(
                default_name=unique_name,
                prompt_text='Enter name for Environment Clone')

        if tier.name.lower() == 'webserver':
            if not cname and not provided_clone_name:
                cname = get_cname_from_customer(clone_name)
            elif not cname:
                cname = None

        if not exact:
            if not provided_clone_name:
                latest = solution_stack_ops.find_solution_stack_from_string(
                    env.platform.name, find_newer=True)

                if latest != env.platform:
                    io.echo()
                    io.echo(prompts['clone.latest'])
                    lst = [
                        'Latest  (' + str(latest) + ')',
                        'Same    (' + str(env.platform) + ')'
                    ]
                    result = utils.prompt_for_item_in_list(lst)
                    if result == lst[0]:
                        platform = latest
                else:
                    platform = latest
            else:
                platform = solution_stack_ops.find_solution_stack_from_string(
                    env.platform.name, find_newer=True)
                if platform != env.platform:
                    io.log_warning(prompts['clone.latestwarn'])

        clone_request = CloneEnvironmentRequest(
            app_name=app_name,
            env_name=clone_name,
            original_name=env_name,
            cname=cname,
            platform=platform,
            scale=scale,
            tags=tags,
        )

        clone_request.option_settings += envvars

        cloneops.make_cloned_env(clone_request, nohang=nohang, timeout=timeout)
Exemplo n.º 18
0
    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 test_find_solution_stack_from_string(self,
                                             custom_platforms_lister_mock,
                                             solution_stack_lister_mock):
        solution_strings = [
            'docker-1.11.2',
            'docker-1.12.6',
            'docker-1.6.2',
            'docker-1.7.1',
            'docker-1.9.1',
            'docker-17.03.1-ce',
            'glassfish-4.0-java-7-(preconfigured-docker)',
            'glassfish-4.1-java-8-(preconfigured-docker)',
            'go-1.3-(preconfigured-docker)',
            'go-1.4',
            'go-1.4-(preconfigured-docker)',
            'go-1.5',
            'go-1.6',
            'go-1.8',
            'iis-10.0',
            'iis-7.5',
            'iis-8',
            'iis-8.5',
            'java-7',
            'java-8',
            'multi-container-docker-1.11.2-(generic)',
            'multi-container-docker-1.6.2-(generic)',
            'multi-container-docker-1.9.1-(generic)',
            'multi-container-docker-17.03.1-ce-(generic)',
            'node.js',
            'packer-1.0.0',
            'packer-1.0.3',
            'php-5.3',
            'php-5.4',
            'php-5.5',
            'php-5.6',
            'php-7.0',
            'python',
            'python-2.7',
            'python-3.4',
            'python-3.4-(preconfigured-docker)',
            'ruby-1.9.3',
            'ruby-2.0-(passenger-standalone)',
            'ruby-2.0-(puma)',
            'ruby-2.1-(passenger-standalone)',
            'ruby-2.1-(puma)',
            'ruby-2.2-(passenger-standalone)',
            'ruby-2.2-(puma)',
            'ruby-2.3-(passenger-standalone)',
            'ruby-2.3-(puma)',
            'tomcat-6',
            'tomcat-7',
            'tomcat-7-java-6',
            'tomcat-7-java-7',
            'tomcat-8-java-8',
            'Node.js',
            'PHP',
            'Python',
            'Ruby',
            'Tomcat',
            'IIS',
            'Docker',
            'Multi-container Docker',
            'Glassfish',
            'Go',
            'Java',
            'Packer',
            '64bit Windows Server Core 2016 v1.2.0 running IIS 10.0',
            '64bit Windows Server 2016 v1.2.0 running IIS 10.0',
            '64bit Windows Server Core 2012 R2 v1.2.0 running IIS 8.5',
            '64bit Windows Server 2012 R2 v1.2.0 running IIS 8.5',
            '64bit Windows Server 2012 v1.2.0 running IIS 8',
            '64bit Windows Server 2008 R2 v1.2.0 running IIS 7.5',
            '64bit Amazon Linux 2017.03 v2.5.3 running Java 8',
            '64bit Amazon Linux 2017.03 v2.5.3 running Java 7',
            '64bit Amazon Linux 2017.03 v4.2.1 running Node.js',
            '64bit Amazon Linux 2017.03 v4.2.0 running Node.js',
            '64bit Amazon Linux 2017.03 v4.1.1 running Node.js',
            '64bit Amazon Linux 2015.09 v2.0.8 running Node.js',
            '64bit Amazon Linux 2015.03 v1.4.6 running Node.js',
            '64bit Amazon Linux 2014.03 v1.1.0 running Node.js',
            '32bit Amazon Linux 2014.03 v1.1.0 running Node.js',
            '64bit Amazon Linux 2017.03 v2.4.3 running PHP 5.4',
            '64bit Amazon Linux 2017.03 v2.4.3 running PHP 5.5',
            '64bit Amazon Linux 2017.03 v2.4.3 running PHP 5.6',
            '64bit Amazon Linux 2017.03 v2.4.3 running PHP 7.0',
            '64bit Amazon Linux 2017.03 v2.4.2 running PHP 5.4',
            '64bit Amazon Linux 2017.03 v2.4.2 running PHP 5.6',
            '64bit Amazon Linux 2017.03 v2.4.2 running PHP 7.0',
            '64bit Amazon Linux 2017.03 v2.4.1 running PHP 5.6',
            '64bit Amazon Linux 2016.03 v2.1.6 running PHP 5.4',
            '64bit Amazon Linux 2016.03 v2.1.6 running PHP 5.5',
            '64bit Amazon Linux 2016.03 v2.1.6 running PHP 5.6',
            '64bit Amazon Linux 2016.03 v2.1.6 running PHP 7.0',
            '64bit Amazon Linux 2015.03 v1.4.6 running PHP 5.6',
            '64bit Amazon Linux 2015.03 v1.4.6 running PHP 5.5',
            '64bit Amazon Linux 2015.03 v1.4.6 running PHP 5.4',
            '64bit Amazon Linux 2014.03 v1.1.0 running PHP 5.5',
            '64bit Amazon Linux 2014.03 v1.1.0 running PHP 5.4',
            '32bit Amazon Linux 2014.03 v1.1.0 running PHP 5.5',
            '32bit Amazon Linux 2014.03 v1.1.0 running PHP 5.4',
            '64bit Amazon Linux running PHP 5.3',
            '32bit Amazon Linux running PHP 5.3',
            '64bit Amazon Linux 2017.03 v2.5.0 running Python 3.4',
            '64bit Amazon Linux 2017.03 v2.5.0 running Python',
            '64bit Amazon Linux 2017.03 v2.5.0 running Python 2.7',
            '64bit Amazon Linux 2015.03 v1.4.6 running Python 3.4',
            '64bit Amazon Linux 2015.03 v1.4.6 running Python 2.7',
            '64bit Amazon Linux 2015.03 v1.4.6 running Python',
            '64bit Amazon Linux 2014.03 v1.1.0 running Python 2.7',
            '64bit Amazon Linux 2014.03 v1.1.0 running Python',
            '32bit Amazon Linux 2014.03 v1.1.0 running Python 2.7',
            '32bit Amazon Linux 2014.03 v1.1.0 running Python',
            '64bit Amazon Linux running Python',
            '32bit Amazon Linux running Python',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 2.3 (Puma)',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 2.2 (Puma)',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 2.1 (Puma)',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 2.0 (Puma)',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 2.3 (Passenger Standalone)',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 2.2 (Passenger Standalone)',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 2.1 (Passenger Standalone)',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 2.0 (Passenger Standalone)',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 1.9.3',
            '64bit Amazon Linux 2015.03 v1.4.6 running Ruby 2.2 (Puma)',
            '64bit Amazon Linux 2015.03 v1.4.6 running Ruby 2.2 (Passenger Standalone)',
            '64bit Amazon Linux 2015.03 v1.4.6 running Ruby 2.1 (Puma)',
            '64bit Amazon Linux 2015.03 v1.4.6 running Ruby 2.1 (Passenger Standalone)',
            '64bit Amazon Linux 2015.03 v1.4.6 running Ruby 2.0 (Puma)',
            '64bit Amazon Linux 2015.03 v1.4.6 running Ruby 2.0 (Passenger Standalone)',
            '64bit Amazon Linux 2015.03 v1.4.6 running Ruby 1.9.3',
            '64bit Amazon Linux 2014.03 v1.1.0 running Ruby 2.1 (Puma)',
            '64bit Amazon Linux 2014.03 v1.1.0 running Ruby 2.1 (Passenger Standalone)',
            '64bit Amazon Linux 2014.03 v1.1.0 running Ruby 2.0 (Puma)',
            '64bit Amazon Linux 2014.03 v1.1.0 running Ruby 2.0 (Passenger Standalone)',
            '64bit Amazon Linux 2014.03 v1.1.0 running Ruby 1.9.3',
            '32bit Amazon Linux 2014.03 v1.1.0 running Ruby 1.9.3',
            '64bit Amazon Linux 2017.03 v2.6.3 running Tomcat 8 Java 8',
            '64bit Amazon Linux 2017.03 v2.6.3 running Tomcat 7 Java 7',
            '64bit Amazon Linux 2017.03 v2.6.3 running Tomcat 7 Java 6',
            '64bit Amazon Linux 2017.03 v2.6.1 running Tomcat 8 Java 8',
            '64bit Amazon Linux 2015.03 v1.4.5 running Tomcat 8 Java 8',
            '64bit Amazon Linux 2015.03 v1.4.5 running Tomcat 7 Java 7',
            '64bit Amazon Linux 2015.03 v1.4.5 running Tomcat 7 Java 6',
            '64bit Amazon Linux 2015.03 v1.4.4 running Tomcat 7 Java 7',
            '64bit Amazon Linux 2014.03 v1.1.0 running Tomcat 7 Java 7',
            '64bit Amazon Linux 2014.03 v1.1.0 running Tomcat 7 Java 6',
            '32bit Amazon Linux 2014.03 v1.1.0 running Tomcat 7 Java 7',
            '32bit Amazon Linux 2014.03 v1.1.0 running Tomcat 7 Java 6',
            '64bit Amazon Linux running Tomcat 7',
            '64bit Amazon Linux running Tomcat 6',
            '32bit Amazon Linux running Tomcat 7',
            '32bit Amazon Linux running Tomcat 6',
            '64bit Windows Server Core 2012 R2 running IIS 8.5',
            '64bit Windows Server 2012 R2 running IIS 8.5',
            '64bit Windows Server 2012 running IIS 8',
            '64bit Windows Server 2008 R2 running IIS 7.5',
            '64bit Amazon Linux 2017.03 v2.7.2 running Docker 17.03.1-ce',
            '64bit Amazon Linux 2017.03 v2.7.1 running Docker 17.03.1-ce',
            '64bit Amazon Linux 2017.03 v2.6.0 running Docker 1.12.6',
            '64bit Amazon Linux 2016.09 v2.3.0 running Docker 1.11.2',
            '64bit Amazon Linux 2016.03 v2.1.6 running Docker 1.11.2',
            '64bit Amazon Linux 2016.03 v2.1.0 running Docker 1.9.1',
            '64bit Amazon Linux 2015.09 v2.0.6 running Docker 1.7.1',
            '64bit Amazon Linux 2015.03 v1.4.6 running Docker 1.6.2',
            '64bit Amazon Linux 2017.03 v2.7.3 running Multi-container Docker 17.03.1-ce (Generic)',
            '64bit Amazon Linux 2016.03 v2.1.6 running Multi-container Docker 1.11.2 (Generic)',
            '64bit Amazon Linux 2016.03 v2.1.0 running Multi-container Docker 1.9.1 (Generic)',
            '64bit Amazon Linux 2015.03 v1.4.6 running Multi-container Docker 1.6.2 (Generic)',
            '64bit Debian jessie v2.7.2 running GlassFish 4.1 Java 8 (Preconfigured - Docker)',
            '64bit Debian jessie v2.7.2 running GlassFish 4.0 Java 7 (Preconfigured - Docker)',
            '64bit Debian jessie v1.4.6 running GlassFish 4.1 Java 8 (Preconfigured - Docker)',
            '64bit Debian jessie v1.4.6 running GlassFish 4.0 Java 7 (Preconfigured - Docker)',
            '64bit Debian jessie v2.7.2 running Go 1.4 (Preconfigured - Docker)',
            '64bit Debian jessie v2.7.2 running Go 1.3 (Preconfigured - Docker)',
            '64bit Debian jessie v1.4.6 running Go 1.4 (Preconfigured - Docker)',
            '64bit Debian jessie v1.4.6 running Go 1.3 (Preconfigured - Docker)',
            '64bit Debian jessie v2.7.2 running Python 3.4 (Preconfigured - Docker)',
            '64bit Debian jessie v1.4.6 running Python 3.4 (Preconfigured - Docker)',
            '64bit Amazon Linux 2017.03 v2.5.1 running Go 1.8',
            '64bit Amazon Linux 2016.09 v2.3.3 running Go 1.6',
            '64bit Amazon Linux 2016.09 v2.3.0 running Go 1.5',
            '64bit Amazon Linux 2016.03 v2.1.0 running Go 1.4',
            '64bit Amazon Linux 2017.03 v2.3.1 running Packer 1.0.3',
            '64bit Amazon Linux 2017.03 v2.2.2 running Packer 1.0.0',
            'Node.js',
            'PHP 5.6',
            'PHP 5.3',
            'Python 3.4',
            'Python',
            'Ruby 2.3 (Puma)',
            'Ruby 2.3 (Passenger Standalone)',
            'Tomcat 8 Java 8',
            'Tomcat 7',
            'IIS 8.5',
            'IIS 8.5',
            'IIS 8',
            'Docker 1.12.6',
            'Multi-container Docker 17.03.1-ce (Generic)',
            'Multi-container Docker 1.11.2 (Generic)',
            'GlassFish 4.1 Java 8 (Preconfigured - Docker)',
            'Go 1.4 (Preconfigured - Docker)',
            'Python 3.4 (Preconfigured - Docker)',
            'Java 8',
            'Java 7',
            'Go 1.8',
            'Go 1.6',
            'Go 1.5',
            'Go 1.4',
            'Packer 1.0.0',
        ]
        solution_stacks = [
            '64bit Windows Server Core 2016 v1.2.0 running IIS 10.0',
            '64bit Windows Server 2016 v1.2.0 running IIS 10.0',
            '64bit Windows Server Core 2012 R2 v1.2.0 running IIS 8.5',
            '64bit Windows Server 2012 R2 v1.2.0 running IIS 8.5',
            '64bit Windows Server 2012 v1.2.0 running IIS 8',
            '64bit Windows Server 2008 R2 v1.2.0 running IIS 7.5',
            '64bit Amazon Linux 2017.03 v2.5.3 running Java 8',
            '64bit Amazon Linux 2017.03 v2.5.3 running Java 7',
            '64bit Amazon Linux 2017.03 v4.2.1 running Node.js',
            '64bit Amazon Linux 2017.03 v4.2.0 running Node.js',
            '64bit Amazon Linux 2017.03 v4.1.1 running Node.js',
            '64bit Amazon Linux 2015.09 v2.0.8 running Node.js',
            '64bit Amazon Linux 2015.03 v1.4.6 running Node.js',
            '64bit Amazon Linux 2014.03 v1.1.0 running Node.js',
            '32bit Amazon Linux 2014.03 v1.1.0 running Node.js',
            '64bit Amazon Linux 2017.03 v2.4.3 running PHP 5.4',
            '64bit Amazon Linux 2017.03 v2.4.3 running PHP 5.5',
            '64bit Amazon Linux 2017.03 v2.4.3 running PHP 5.6',
            '64bit Amazon Linux 2017.03 v2.4.3 running PHP 7.0',
            '64bit Amazon Linux 2017.03 v2.4.2 running PHP 5.4',
            '64bit Amazon Linux 2017.03 v2.4.2 running PHP 5.6',
            '64bit Amazon Linux 2017.03 v2.4.2 running PHP 7.0',
            '64bit Amazon Linux 2017.03 v2.4.1 running PHP 5.6',
            '64bit Amazon Linux 2016.03 v2.1.6 running PHP 5.4',
            '64bit Amazon Linux 2016.03 v2.1.6 running PHP 5.5',
            '64bit Amazon Linux 2016.03 v2.1.6 running PHP 5.6',
            '64bit Amazon Linux 2016.03 v2.1.6 running PHP 7.0',
            '64bit Amazon Linux 2015.03 v1.4.6 running PHP 5.6',
            '64bit Amazon Linux 2015.03 v1.4.6 running PHP 5.5',
            '64bit Amazon Linux 2015.03 v1.4.6 running PHP 5.4',
            '64bit Amazon Linux 2014.03 v1.1.0 running PHP 5.5',
            '64bit Amazon Linux 2014.03 v1.1.0 running PHP 5.4',
            '32bit Amazon Linux 2014.03 v1.1.0 running PHP 5.5',
            '32bit Amazon Linux 2014.03 v1.1.0 running PHP 5.4',
            '64bit Amazon Linux running PHP 5.3',
            '32bit Amazon Linux running PHP 5.3',
            '64bit Amazon Linux 2017.03 v2.5.0 running Python 3.4',
            '64bit Amazon Linux 2017.03 v2.5.0 running Python',
            '64bit Amazon Linux 2017.03 v2.5.0 running Python 2.7',
            '64bit Amazon Linux 2015.03 v1.4.6 running Python 3.4',
            '64bit Amazon Linux 2015.03 v1.4.6 running Python 2.7',
            '64bit Amazon Linux 2015.03 v1.4.6 running Python',
            '64bit Amazon Linux 2014.03 v1.1.0 running Python 2.7',
            '64bit Amazon Linux 2014.03 v1.1.0 running Python',
            '32bit Amazon Linux 2014.03 v1.1.0 running Python 2.7',
            '32bit Amazon Linux 2014.03 v1.1.0 running Python',
            '64bit Amazon Linux running Python',
            '32bit Amazon Linux running Python',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 2.3 (Puma)',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 2.2 (Puma)',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 2.1 (Puma)',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 2.0 (Puma)',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 2.3 (Passenger Standalone)',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 2.2 (Passenger Standalone)',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 2.1 (Passenger Standalone)',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 2.0 (Passenger Standalone)',
            '64bit Amazon Linux 2017.03 v2.4.3 running Ruby 1.9.3',
            '64bit Amazon Linux 2015.03 v1.4.6 running Ruby 2.2 (Puma)',
            '64bit Amazon Linux 2015.03 v1.4.6 running Ruby 2.2 (Passenger Standalone)',
            '64bit Amazon Linux 2015.03 v1.4.6 running Ruby 2.1 (Puma)',
            '64bit Amazon Linux 2015.03 v1.4.6 running Ruby 2.1 (Passenger Standalone)',
            '64bit Amazon Linux 2015.03 v1.4.6 running Ruby 2.0 (Puma)',
            '64bit Amazon Linux 2015.03 v1.4.6 running Ruby 2.0 (Passenger Standalone)',
            '64bit Amazon Linux 2015.03 v1.4.6 running Ruby 1.9.3',
            '64bit Amazon Linux 2014.03 v1.1.0 running Ruby 2.1 (Puma)',
            '64bit Amazon Linux 2014.03 v1.1.0 running Ruby 2.1 (Passenger Standalone)',
            '64bit Amazon Linux 2014.03 v1.1.0 running Ruby 2.0 (Puma)',
            '64bit Amazon Linux 2014.03 v1.1.0 running Ruby 2.0 (Passenger Standalone)',
            '64bit Amazon Linux 2014.03 v1.1.0 running Ruby 1.9.3',
            '32bit Amazon Linux 2014.03 v1.1.0 running Ruby 1.9.3',
            '64bit Amazon Linux 2017.03 v2.6.3 running Tomcat 8 Java 8',
            '64bit Amazon Linux 2017.03 v2.6.3 running Tomcat 7 Java 7',
            '64bit Amazon Linux 2017.03 v2.6.3 running Tomcat 7 Java 6',
            '64bit Amazon Linux 2017.03 v2.6.1 running Tomcat 8 Java 8',
            '64bit Amazon Linux 2015.03 v1.4.5 running Tomcat 8 Java 8',
            '64bit Amazon Linux 2015.03 v1.4.5 running Tomcat 7 Java 7',
            '64bit Amazon Linux 2015.03 v1.4.5 running Tomcat 7 Java 6',
            '64bit Amazon Linux 2015.03 v1.4.4 running Tomcat 7 Java 7',
            '64bit Amazon Linux 2014.03 v1.1.0 running Tomcat 7 Java 7',
            '64bit Amazon Linux 2014.03 v1.1.0 running Tomcat 7 Java 6',
            '32bit Amazon Linux 2014.03 v1.1.0 running Tomcat 7 Java 7',
            '32bit Amazon Linux 2014.03 v1.1.0 running Tomcat 7 Java 6',
            '64bit Amazon Linux running Tomcat 7',
            '64bit Amazon Linux running Tomcat 6',
            '32bit Amazon Linux running Tomcat 7',
            '32bit Amazon Linux running Tomcat 6',
            '64bit Windows Server Core 2012 R2 running IIS 8.5',
            '64bit Windows Server 2012 R2 running IIS 8.5',
            '64bit Windows Server 2012 running IIS 8',
            '64bit Windows Server 2008 R2 running IIS 7.5',
            '64bit Amazon Linux 2017.03 v2.7.2 running Docker 17.03.1-ce',
            '64bit Amazon Linux 2017.03 v2.7.1 running Docker 17.03.1-ce',
            '64bit Amazon Linux 2017.03 v2.6.0 running Docker 1.12.6',
            '64bit Amazon Linux 2016.09 v2.3.0 running Docker 1.11.2',
            '64bit Amazon Linux 2016.03 v2.1.6 running Docker 1.11.2',
            '64bit Amazon Linux 2016.03 v2.1.0 running Docker 1.9.1',
            '64bit Amazon Linux 2015.09 v2.0.6 running Docker 1.7.1',
            '64bit Amazon Linux 2015.03 v1.4.6 running Docker 1.6.2',
            '64bit Amazon Linux 2017.03 v2.7.3 running Multi-container Docker 17.03.1-ce (Generic)',
            '64bit Amazon Linux 2016.03 v2.1.6 running Multi-container Docker 1.11.2 (Generic)',
            '64bit Amazon Linux 2016.03 v2.1.0 running Multi-container Docker 1.9.1 (Generic)',
            '64bit Amazon Linux 2015.03 v1.4.6 running Multi-container Docker 1.6.2 (Generic)',
            '64bit Debian jessie v2.7.2 running GlassFish 4.1 Java 8 (Preconfigured - Docker)',
            '64bit Debian jessie v2.7.2 running GlassFish 4.0 Java 7 (Preconfigured - Docker)',
            '64bit Debian jessie v1.4.6 running GlassFish 4.1 Java 8 (Preconfigured - Docker)',
            '64bit Debian jessie v1.4.6 running GlassFish 4.0 Java 7 (Preconfigured - Docker)',
            '64bit Debian jessie v2.7.2 running Go 1.4 (Preconfigured - Docker)',
            '64bit Debian jessie v2.7.2 running Go 1.3 (Preconfigured - Docker)',
            '64bit Debian jessie v1.4.6 running Go 1.4 (Preconfigured - Docker)',
            '64bit Debian jessie v1.4.6 running Go 1.3 (Preconfigured - Docker)',
            '64bit Debian jessie v2.7.2 running Python 3.4 (Preconfigured - Docker)',
            '64bit Debian jessie v1.4.6 running Python 3.4 (Preconfigured - Docker)',
            '64bit Amazon Linux 2017.03 v2.5.1 running Go 1.8',
            '64bit Amazon Linux 2016.09 v2.3.3 running Go 1.6',
            '64bit Amazon Linux 2016.09 v2.3.0 running Go 1.5',
            '64bit Amazon Linux 2016.03 v2.1.0 running Go 1.4',
            '64bit Amazon Linux 2017.03 v2.3.1 running Packer 1.0.3',
            '64bit Amazon Linux 2017.03 v2.2.2 running Packer 1.0.0',
        ]

        solution_stacks = [
            SolutionStack(solution_stack) for solution_stack in solution_stacks
        ]
        custom_platforms = [
            'arn:aws:elasticbeanstalk:us-west-2:12345678:platform/custom-platform-1/1.0.0',
        ]
        solution_stack_lister_mock.return_value = solution_stacks
        custom_platforms_lister_mock.return_value = custom_platforms

        for solution_string in solution_strings:
            solution_stack_ops.find_solution_stack_from_string(solution_string)