Beispiel #1
0
def change_password(request, vm, args):
    # Normal Response Code: 202
    # Error Response Codes: computeFault (400, 500),
    #                       serviceUnavailable (503),
    #                       unauthorized (401),
    #                       badRequest (400),
    #                       badMediaType(415),
    #                       itemNotFound (404),
    #                       buildInProgress (409),
    #                       overLimit (413)

    raise faults.NotImplemented('Changing password is not supported.')
Beispiel #2
0
def os_get_spice_console(request, vm, args):
    # Normal Response Code: 200
    # Error Response Codes: computeFault (400, 500),
    #                       serviceUnavailable (503),
    #                       unauthorized (401),
    #                       badRequest (400),
    #                       badMediaType(415),
    #                       itemNotFound (404),
    #                       buildInProgress (409),
    #                       overLimit (413)

    log.info('Get Spice console for VM %s: %s', vm, args)

    raise faults.NotImplemented('Spice console not implemented')
Beispiel #3
0
def revert_resize(request, vm, args):
    # Normal Response Code: 202
    # Error Response Codes: computeFault (400, 500),
    #                       serviceUnavailable (503),
    #                       unauthorized (401),
    #                       badRequest (400),
    #                       badMediaType(415),
    #                       itemNotFound (404),
    #                       buildInProgress (409),
    #                       serverCapacityUnavailable (503),
    #                       overLimit (413),
    #                       resizeNotAllowed (403)

    raise faults.NotImplemented('Resize not supported.')
Beispiel #4
0
def validate_volume_termination(volume_type, delete_on_termination):
    """Validate volume's termination mode based on volume's type.

    NOTE: Currently, detached volumes are not supported, so all volumes
    must be terminated upon instance deletion.

    """
    if delete_on_termination is False:
        # Only ext_* volumes can be preserved
        if volume_type.template != "ext":
            raise faults.BadRequest("Volumes of '%s' disk template cannot have"
                                    " 'delete_on_termination' attribute set"
                                    " to 'False'" % volume_type.disk_template)
        # But currently all volumes must be terminated
        raise faults.NotImplemented("Volumes with the 'delete_on_termination'"
                                    " attribute set to False are not"
                                    " supported")
Beispiel #5
0
def assert_snapshots_enabled(request):
    if not snapshots_enabled_for_user(request.user):
        raise faults.NotImplemented("Snapshots disabled")
Beispiel #6
0
def create_volume(request):
    """Create a new Volume."""

    req = utils.get_json_body(request)
    user_id = request.user_uniq

    log.debug("User: %s, Action: create_volume, Request: %s", user_id, req)

    vol_dict = utils.get_attribute(req,
                                   "volume",
                                   attr_type=dict,
                                   required=True)
    name = utils.get_attribute(vol_dict,
                               "display_name",
                               attr_type=basestring,
                               required=True)

    # Get and validate 'size' parameter
    size = utils.get_attribute(vol_dict,
                               "size",
                               attr_type=(basestring, int),
                               required=True)
    try:
        size = int(size)
        if size <= 0:
            raise ValueError
    except (TypeError, ValueError):
        raise faults.BadRequest("Volume 'size' needs to be a positive integer"
                                " value. '%s' cannot be accepted." % size)

    project = vol_dict.get("project")
    if project is None:
        project = user_id
    shared_to_project = vol_dict.get("shared_to_project", False)

    # Optional parameters
    volume_type_id = utils.get_attribute(vol_dict,
                                         "volume_type",
                                         attr_type=(basestring, int),
                                         required=False)
    description = utils.get_attribute(vol_dict,
                                      "display_description",
                                      attr_type=basestring,
                                      required=False,
                                      default="")
    metadata = utils.get_attribute(vol_dict,
                                   "metadata",
                                   attr_type=dict,
                                   required=False,
                                   default={})

    # Id of the volume to clone from
    source_volume_id = utils.get_attribute(vol_dict,
                                           "source_volid",
                                           required=False)

    # Id of the snapshot to create the volume from
    source_snapshot_id = utils.get_attribute(vol_dict,
                                             "snapshot_id",
                                             required=False)

    snapshots_enabled = util.snapshots_enabled_for_user(request.user)
    if source_snapshot_id and not snapshots_enabled:
        raise faults.NotImplemented("Making a clone from a snapshot is not"
                                    " implemented")

    # Reference to an Image stored in Glance
    source_image_id = utils.get_attribute(vol_dict, "imageRef", required=False)

    # Get server ID to attach the volume.
    server_id = utils.get_attribute(vol_dict, "server_id", required=False)

    server = None
    if server_id:
        try:
            server = get_vm(server_id,
                            user_id,
                            request.user_projects,
                            for_update=True,
                            non_deleted=True)
        except faults.ItemNotFound:
            raise faults.BadRequest("Server %s not found" % server_id)

    # Create the volume
    volume = volumes.create(user_id=user_id,
                            size=size,
                            name=name,
                            source_volume_id=source_volume_id,
                            source_snapshot_id=source_snapshot_id,
                            source_image_id=source_image_id,
                            volume_type_id=volume_type_id,
                            description=description,
                            metadata=metadata,
                            server=server,
                            project_id=project,
                            shared_to_project=shared_to_project)

    server_id = server.id if server else None
    log.info("User %s created volume %s attached to server %s, shared: %s",
             user_id, volume.id, server_id, shared_to_project)

    # Render response
    data = json.dumps(dict(volume=volume_to_dict(volume, detail=False)))
    return HttpResponse(data, status=202)
Beispiel #7
0
def update_floating_ip(request, floating_ip_id, view=_floatingip_details_view):
    """Update a floating IP."""
    raise faults.NotImplemented("Updating a floating IP is not supported.")
Beispiel #8
0
def revert_resize(request, vm, args):
    raise faults.NotImplemented('Resize not supported.')
Beispiel #9
0
def rebuild(request, vm, args):
    raise faults.NotImplemented('Rebuild not supported.')
Beispiel #10
0
def change_password(request, vm, args):
    raise faults.NotImplemented('Changing password is not supported.')
Beispiel #11
0
def confirm_resize(request, server_id, args):
    raise faults.NotImplemented('Resize not supported.')
Beispiel #12
0
def update_floating_ip(request, floating_ip_id):
    """Update a floating IP."""
    raise faults.NotImplemented("Updating a floating IP is not supported.")
Beispiel #13
0
def create_volume(request):
    """Create a new Volume."""

    req = utils.get_json_body(request)
    log.debug("create_volume %s", req)
    user_id = request.user_uniq

    vol_dict = utils.get_attribute(req,
                                   "volume",
                                   attr_type=dict,
                                   required=True)
    name = utils.get_attribute(vol_dict,
                               "display_name",
                               attr_type=basestring,
                               required=True)

    # Get and validate 'size' parameter
    size = utils.get_attribute(vol_dict,
                               "size",
                               attr_type=(basestring, int),
                               required=True)
    try:
        size = int(size)
        if size <= 0:
            raise ValueError
    except (TypeError, ValueError):
        raise faults.BadRequest("Volume 'size' needs to be a positive integer"
                                " value. '%s' cannot be accepted." % size)

    project = vol_dict.get("project")
    if project is None:
        project = user_id

    # Optional parameters
    volume_type_id = utils.get_attribute(vol_dict,
                                         "volume_type",
                                         attr_type=(basestring, int),
                                         required=False)
    description = utils.get_attribute(vol_dict,
                                      "display_description",
                                      attr_type=basestring,
                                      required=False,
                                      default="")
    metadata = utils.get_attribute(vol_dict,
                                   "metadata",
                                   attr_type=dict,
                                   required=False,
                                   default={})

    # Id of the volume to clone from
    source_volume_id = utils.get_attribute(vol_dict,
                                           "source_volid",
                                           required=False)

    # Id of the snapshot to create the volume from
    source_snapshot_id = utils.get_attribute(vol_dict,
                                             "snapshot_id",
                                             required=False)
    if source_snapshot_id and not settings.CYCLADES_SNAPSHOTS_ENABLED:
        raise faults.NotImplemented("Making a clone from a snapshot is not"
                                    " implemented")

    # Reference to an Image stored in Glance
    source_image_id = utils.get_attribute(vol_dict, "imageRef", required=False)

    # Get server ID to attach the volume. Since we currently do not supported
    # detached volumes, server_id attribute is mandatory.
    server_id = utils.get_attribute(vol_dict, "server_id", required=True)

    # Create the volume
    volume = volumes.create(user_id=user_id,
                            size=size,
                            name=name,
                            source_volume_id=source_volume_id,
                            source_snapshot_id=source_snapshot_id,
                            source_image_id=source_image_id,
                            volume_type_id=volume_type_id,
                            description=description,
                            metadata=metadata,
                            server_id=server_id,
                            project=project)

    # Render response
    data = json.dumps(dict(volume=volume_to_dict(volume, detail=False)))
    return HttpResponse(data, status=202)