Esempio n. 1
0
def test_prepare_deploy_swap_colors():
    previous_apps = _load_marathon_apps()
    blue_app = _load_blue_app()
    initial_instances = 5

    deploy = prepare_deploy(previous_apps, blue_app, initial_instances)

    assert deploy['labels']['HAPROXY_DEPLOYMENT_COLOUR'] == 'green'
    assert deploy['instances'] == initial_instances
Esempio n. 2
0
def test_prepare_deploy_first_deploy():
    previous_apps = []
    blue_app = _load_blue_app()
    initial_instances = 5

    deploy = prepare_deploy(previous_apps, blue_app, initial_instances)

    assert deploy['labels']['HAPROXY_DEPLOYMENT_COLOUR'] == 'blue'
    assert deploy['instances'] == blue_app['instances']
Esempio n. 3
0
def cli(logger, marathon_client, marathon_lb_url, initial_instances, max_wait,
        step_interval, force, env_prefix, template_path, template_names, env_pairs):
    """Perform a blue/green deploy
    """
    values = load_values_from_environment(prefix=env_prefix, overrides=env_pairs)

    rendered_templates = []
    for template_name in template_names:
        rendered_templates.append(render_json_template(template_path, template_name, **values))

    for app in rendered_templates:
        validate_app(app)

        # fetch all previous deploys from marathon and abort if there is more
        # than one stack currently active.
        previous_deploys = fetch_previous_deploys(marathon_client, app)
        if len(previous_deploys) > 1:
            raise DualStackAlreadyExists("Both blue and green apps detected")
        # transform the app to be deployed to apply the correct labels and
        # ID-change that will allow marathon-lb to cut traffic over as necessary.
        new_app = prepare_deploy(previous_deploys, app, initial_instances)

        logger.log('Final App Definition:')
        logger.log(json.dumps(new_app, indent=4, sort_keys=True))
        if force or click.confirm("Continue with deployment?"):
            try:
                deploy_and_swap(marathon_client,
                                new_app,
                                previous_deploys,
                                logger,
                                force,
                                max_wait,
                                step_interval,
                                initial_instances,
                                marathon_lb_url)
            except (DeploymentFailed, SwapApplicationTimeout):
                remove_new_stack(marathon_client, logger, app['id'], force)