def update_metadata(request, server_id): # Normal Response Code: 201 # Error Response Codes: computeFault (400, 500), # serviceUnavailable (503), # unauthorized (401), # badRequest (400), # buildInProgress (409), # badMediaType(415), # overLimit (413) req = utils.get_request_dict(request) log.info('update_server_metadata %s %s', server_id, req) vm = util.get_vm(server_id, request.user_uniq, non_suspended=True) try: metadata = req['metadata'] assert isinstance(metadata, dict) except (KeyError, AssertionError): raise faults.BadRequest("Malformed request") for key, val in metadata.items(): meta, created = vm.metadata.get_or_create(meta_key=key) meta.meta_value = val meta.save() vm.save() vm_meta = dict((m.meta_key, m.meta_value) for m in vm.metadata.all()) return util.render_metadata(request, vm_meta, status=201)
def update_metadata(request, image_id): # Normal Response Code: 201 # Error Response Codes: computeFault (400, 500), # serviceUnavailable (503), # unauthorized (401), # badRequest (400), # buildInProgress (409), # badMediaType(415), # overLimit (413) req = utils.get_request_dict(request) log.info("update_image_metadata %s %s", image_id, req) with image_backend(request.user_uniq) as backend: image = backend.get_image(image_id) try: metadata = req["metadata"] assert isinstance(metadata, dict) except (KeyError, AssertionError): raise faults.BadRequest("Malformed request.") properties = image["properties"] properties.update(metadata) backend.update_metadata(image_id, dict(properties=properties)) return util.render_metadata(request, properties, status=201)
def update_metadata(request, image_id): # Normal Response Code: 201 # Error Response Codes: computeFault (400, 500), # serviceUnavailable (503), # unauthorized (401), # badRequest (400), # buildInProgress (409), # badMediaType(415), # overLimit (413) req = utils.get_json_body(request) log.info('update_image_metadata %s %s', image_id, req) with backend.PlanktonBackend(request.credentials.userid) as b: image = b.get_image(image_id) try: metadata = req['metadata'] assert isinstance(metadata, dict) except (KeyError, AssertionError): raise faults.BadRequest('Malformed request.') properties = image['properties'] properties.update(metadata) b.update_metadata(image_id, dict(properties=properties)) return util.render_metadata(request, properties, status=201)
def update_metadata(request, server_id): # Normal Response Code: 201 # Error Response Codes: computeFault (400, 500), # serviceUnavailable (503), # unauthorized (401), # badRequest (400), # buildInProgress (409), # badMediaType(415), # overLimit (413) req = utils.get_request_dict(request) log.info('update_server_metadata %s %s', server_id, req) vm = util.get_vm(server_id, request.user_uniq, non_suspended=True) metadata = utils.get_attribute(req, "metadata", required=True, attr_type=dict) for key, val in metadata.items(): if not isinstance(key, (basestring, int)) or\ not isinstance(val, (basestring, int)): raise faults.BadRequest("Malformed Request. Invalid metadata.") meta, created = vm.metadata.get_or_create(meta_key=key) meta.meta_value = val meta.save() vm.save() vm_meta = dict((m.meta_key, m.meta_value) for m in vm.metadata.all()) return util.render_metadata(request, vm_meta, status=201)
def list_metadata(request, server_id): # Normal Response Codes: 200, 203 # Error Response Codes: computeFault (400, 500), # serviceUnavailable (503), # unauthorized (401), # badRequest (400), # overLimit (413) vm = util.get_vm(server_id, request.user_uniq, request.user_projects) metadata = dict((m.meta_key, m.meta_value) for m in vm.metadata.all()) return util.render_metadata(request, metadata, use_values=False, status=200)
def list_metadata(request, image_id): # Normal Response Codes: 200, 203 # Error Response Codes: computeFault (400, 500), # serviceUnavailable (503), # unauthorized (401), # badRequest (400), # overLimit (413) log.debug("list_image_metadata %s", image_id) with image_backend(request.user_uniq) as backend: image = backend.get_image(image_id) metadata = image["properties"] return util.render_metadata(request, metadata, use_values=False, status=200)
def list_metadata(request, image_id): # Normal Response Codes: 200, 203 # Error Response Codes: computeFault (400, 500), # serviceUnavailable (503), # unauthorized (401), # badRequest (400), # overLimit (413) log.debug('list_image_metadata %s', image_id) with backend.PlanktonBackend(request.credentials.userid) as b: image = b.get_image(image_id) metadata = image['properties'] return util.render_metadata(request, metadata, use_values=False, status=200)
def update_metadata(request, server_id): # Normal Response Code: 201 # Error Response Codes: computeFault (400, 500), # serviceUnavailable (503), # unauthorized (401), # badRequest (400), # buildInProgress (409), # badMediaType(415), # overLimit (413) req = utils.get_json_body(request) credentials = request.credentials userid = credentials.userid log.debug("User: %s, VM: %s, Action: update_metadata, Request: %s", userid, server_id, req) vm = util.get_vm(server_id, credentials, non_suspended=True, non_deleted=True) metadata = utils.get_attribute(req, "metadata", required=True, attr_type=dict) if len(metadata) + len(vm.metadata.all()) - \ len(vm.metadata.all().filter(meta_key__in=metadata.keys())) > \ settings.CYCLADES_VM_MAX_METADATA: raise faults.BadRequest("Virtual Machines cannot have more than %s " "metadata items" % settings.CYCLADES_VM_MAX_METADATA) for key, val in metadata.items(): if len(key) > VirtualMachineMetadata.KEY_LENGTH: raise faults.BadRequest("Malformed Request. Metadata key is too" " long") if len(val) > VirtualMachineMetadata.VALUE_LENGTH: raise faults.BadRequest("Malformed Request. Metadata value is too" " long") if not isinstance(key, (basestring, int)) or\ not isinstance(val, (basestring, int)): raise faults.BadRequest("Malformed Request. Invalid metadata.") meta, created = vm.metadata.get_or_create(meta_key=key) meta.meta_value = val meta.save() vm.save() log.info("User %s updated metadata of VM %s", userid, vm.id) vm_meta = dict((m.meta_key, m.meta_value) for m in vm.metadata.all()) return util.render_metadata(request, vm_meta, status=201)
def list_metadata(request, image_id): # Normal Response Codes: 200, 203 # Error Response Codes: computeFault (400, 500), # serviceUnavailable (503), # unauthorized (401), # badRequest (400), # overLimit (413) log.debug('list_image_metadata %s', image_id) with backend.PlanktonBackend(request.user_uniq) as b: image = b.get_image(image_id) metadata = image['properties'] return util.render_metadata(request, metadata, use_values=False, status=200)
def update_metadata(request, server_id): # Normal Response Code: 201 # Error Response Codes: computeFault (400, 500), # serviceUnavailable (503), # unauthorized (401), # badRequest (400), # buildInProgress (409), # badMediaType(415), # overLimit (413) req = utils.get_json_body(request) log.info('update_server_metadata %s %s', server_id, req) vm = util.get_vm(server_id, request.user_uniq, non_suspended=True, non_deleted=True) metadata = utils.get_attribute(req, "metadata", required=True, attr_type=dict) if len(metadata) + len(vm.metadata.all()) - \ len(vm.metadata.all().filter(meta_key__in=metadata.keys())) > \ settings.CYCLADES_VM_MAX_METADATA: raise faults.BadRequest("Virtual Machines cannot have more than %s " "metadata items" % settings.CYCLADES_VM_MAX_METADATA) for key, val in metadata.items(): if len(key) > VirtualMachineMetadata.KEY_LENGTH: raise faults.BadRequest("Malformed Request. Metadata key is too" " long") if len(val) > VirtualMachineMetadata.VALUE_LENGTH: raise faults.BadRequest("Malformed Request. Metadata value is too" " long") if not isinstance(key, (basestring, int)) or\ not isinstance(val, (basestring, int)): raise faults.BadRequest("Malformed Request. Invalid metadata.") meta, created = vm.metadata.get_or_create(meta_key=key) meta.meta_value = val meta.save() vm.save() vm_meta = dict((m.meta_key, m.meta_value) for m in vm.metadata.all()) return util.render_metadata(request, vm_meta, status=201)