def _delete_machine(self, request): """Handles datastore operations for CatalogMachineDeletionRequests.""" entry = models.CatalogMachineEntry.generate_key( request.dimensions).get() if not entry: logging.info('Catalog entry not found') return rpc_messages.CatalogManipulationResponse( error=rpc_messages.CatalogManipulationRequestError. ENTRY_NOT_FOUND, machine_deletion_request=request, ) entry.key.delete() return rpc_messages.CatalogManipulationResponse( machine_deletion_request=request, )
def add_machine(self, request): """Handles an incoming CatalogMachineAdditionRequest.""" user = auth.get_current_identity().to_bytes() logging.info( 'Received CatalogMachineAdditionRequest:\nUser: %s\n%s', user, request, ) error = self.check_backend(request) or self.check_hostname(request) if error: return rpc_messages.CatalogManipulationResponse( error=error, machine_addition_request=request, ) if request.policies.pubsub_topic: if not pubsub.validate_topic(request.policies.pubsub_topic): logging.warning( 'Invalid topic for Cloud Pub/Sub: %s', request.policies.pubsub_topic, ) return rpc_messages.CatalogManipulationResponse( error=rpc_messages.CatalogManipulationRequestError. INVALID_TOPIC, machine_addition_request=request, ) if not request.policies.pubsub_project: logging.info( 'Cloud Pub/Sub project unspecified, using default: %s', PUBSUB_DEFAULT_PROJECT, ) request.policies.pubsub_project = PUBSUB_DEFAULT_PROJECT if request.policies.pubsub_project: error = None if not pubsub.validate_project(request.policies.pubsub_project): logging.warning( 'Invalid project for Cloud Pub/Sub: %s', request.policies.pubsub_project, ) error = rpc_messages.CatalogManipulationRequestError.INVALID_PROJECT elif not request.policies.pubsub_topic: logging.warning( 'Cloud Pub/Sub project specified without specifying topic: %s', request.policies.pubsub_project, ) error = rpc_messages.CatalogManipulationRequestError.UNSPECIFIED_TOPIC if error: return rpc_messages.CatalogManipulationResponse( error=error, machine_addition_request=request) return self._add_machine(request)
def add_machines(self, request): """Handles an incoming CatalogMachineBatchAdditionRequest. Batches are intended to save on RPCs only. The batched requests will not execute transactionally. """ user = auth.get_current_identity().to_bytes() logging.info( 'Received CatalogMachineBatchAdditionRequest:\nUser: %s\n%s', user, request, ) responses = [] for request in request.requests: logging.info( 'Processing CatalogMachineAdditionRequest:\n%s', request, ) error = self.check_backend(request) or self.check_hostname(request) if error: responses.append( rpc_messages.CatalogManipulationResponse( error=error, machine_addition_request=request, )) else: responses.append(self._add_machine(request)) return rpc_messages.CatalogBatchManipulationResponse( responses=responses)
def _modify_capacity(self, request): """Handles datastore operations for CatalogCapacityModificationRequests.""" models.CatalogCapacityEntry.create_and_put( request.dimensions, request.count, ) return rpc_messages.CatalogManipulationResponse( capacity_modification_request=request, )
def _add_machine(self, request): """Handles datastore operations for CatalogMachineAdditionRequests.""" entry = models.CatalogMachineEntry.generate_key( request.dimensions).get() if entry: # Enforces per-backend hostname uniqueness. logging.warning('Hostname reuse:\nOriginally used for: \n%s', entry) return rpc_messages.CatalogManipulationResponse( error=rpc_messages.CatalogManipulationRequestError. HOSTNAME_REUSE, machine_addition_request=request, ) models.CatalogMachineEntry.create_and_put( request.dimensions, request.policies, models.CatalogMachineEntryStates.AVAILABLE, ) return rpc_messages.CatalogManipulationResponse( machine_addition_request=request, )
def _add_machine(self, request): """Handles datastore operations for CatalogMachineAdditionRequests.""" entry = models.CatalogMachineEntry.generate_key( request.dimensions).get() if entry: # Enforces per-backend hostname uniqueness. logging.warning('Hostname reuse:\nOriginally used for: \n%s', entry) return rpc_messages.CatalogManipulationResponse( error=rpc_messages.CatalogManipulationRequestError. HOSTNAME_REUSE, machine_addition_request=request, ) models.CatalogMachineEntry( key=models.CatalogMachineEntry.generate_key(request.dimensions), dimensions=request.dimensions, pubsub_subscription_project=PUBSUB_DEFAULT_PROJECT, pubsub_topic_project=PUBSUB_DEFAULT_PROJECT, policies=request.policies, state=models.CatalogMachineEntryStates.NEW, ).put() return rpc_messages.CatalogManipulationResponse( machine_addition_request=request, )
def modify_capacity(self, request): """Handles an incoming CatalogCapacityModificationRequest.""" user = auth.get_current_identity().to_bytes() logging.info( 'Received CatalogCapacityModificationRequest:\nUser: %s\n%s', user, request, ) error = self.check_backend(request) if error: return rpc_messages.CatalogManipulationResponse( capacity_modification_request=request, error=error, ) return self._modify_capacity(request)
def delete_machine(self, request): """Handles an incoming CatalogMachineDeletionRequest.""" user = auth.get_current_identity().to_bytes() logging.info( 'Received CatalogMachineDeletionRequest:\nUser: %s\n%s', user, request, ) error = self.check_backend(request) or self.check_hostname(request) if error: return rpc_messages.CatalogManipulationResponse( error=error, machine_deletion_request=request, ) return self._delete_machine(request)