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
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']
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)