コード例 #1
0
 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, )
コード例 #2
0
 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)
コード例 #3
0
    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)
コード例 #4
0
 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, )
コード例 #5
0
 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, )
コード例 #6
0
 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, )
コード例 #7
0
 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)
コード例 #8
0
 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)