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.')
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')
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.')
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")
def assert_snapshots_enabled(request): if not snapshots_enabled_for_user(request.user): raise faults.NotImplemented("Snapshots disabled")
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)
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.")
def revert_resize(request, vm, args): raise faults.NotImplemented('Resize not supported.')
def rebuild(request, vm, args): raise faults.NotImplemented('Rebuild not supported.')
def change_password(request, vm, args): raise faults.NotImplemented('Changing password is not supported.')
def confirm_resize(request, server_id, args): raise faults.NotImplemented('Resize not supported.')
def update_floating_ip(request, floating_ip_id): """Update a floating IP.""" raise faults.NotImplemented("Updating a floating IP is not supported.")
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)