예제 #1
0
def switch(request, project_id):
    """Switch session parameters to project with project_id"""

    if project_id is None:
        raise ValueError(_("Missing 'project_id'"))

    next_url = reverse("main")  # _build_next_url(request)

    try:
        keystone = Keystone(request)
    except exceptions.AuthorizationFailure:
        msg = _("Unable to retrieve Keystone data")
        messages.add_message(request, messages.ERROR, msg)
        log.error(f"{request.user}: {msg}")

        return HttpResponseRedirect(next_url)

    try:
        project = keystone.project_get(project_id)
    except Exception as err:
        messages.add_message(request, messages.ERROR, _("Can't find this project"))
        log.exception("{}{}".format(_("Exception:").encode("UTF-8"), err))
        return HttpResponseRedirect(next_url)

    save_current_project(request.user.id, project.id)
    set_current_project(request, project)

    log.info("User [{}] switched to project [{}]".format(request.user, project_id))
    messages.add_message(request, messages.INFO, _("Project selected: {}".format(project.name)))

    return HttpResponseRedirect(next_url)
예제 #2
0
def swift_cloud_project_status(request):
    project_id = request.GET.get('project_id')

    if not project_id:
        raise Http404

    try:
        keystone = Keystone(request)
        project = keystone.project_get(project_id)
    except Exception as err:
        log.exception(f"Keystone error: {err}")
        return render(request, "vault/swift_cloud/project_status.html", {
            "project": None,
            "error": "Keystone Error"
        })

    sct_client = SCTClient(settings.SWIFT_CLOUD_TOOLS_URL,
                           settings.SWIFT_CLOUD_TOOLS_API_KEY)
    status = ""
    data = {}

    try:
        response = sct_client.transfer_get(project_id)
        if response.ok:
            data = response.json()
        else:
            status = _("Couldn't get migration data")
    except Exception as err:
        log.exception(f"Swift Cloud Tools Error: {err}")

    if response.status_code == 404:
        status = _("Migration not initialized yet")

    if response.status_code < 300:
        status = _("Waiting in migration queue")

    if data.get("initial_date") and not data.get("final_date"):
        status = _("Migrating...")

    if data.get("final_date"):
        status = _("Migration Completed")

    http_conn, storage_url = get_conn_and_storage_url(request, project_id)
    auth_token = request.session.get('auth_token')
    head_account = {}

    try:
        head_account = client.head_account(storage_url,
                                           auth_token,
                                           http_conn=http_conn)
    except Exception as err:
        log.exception(f'Exception: {err}')

    if head_account.get("x-account-meta-cloud-remove"):
        status = _("Marked for removal")

    return render(
        request, "vault/swift_cloud/project_status.html", {
            "project": project,
            "status": status,
            "metadata": json.dumps(head_account),
            "migration_data": json.dumps(data)
        })