Exemple #1
0
    def _update_placement(self, context, function_id, driver_name):
        """update resources provider after program."""
        # TODO(Sundar) Don't apply function trait if bitstream is private
        if not function_id:
            LOG.info("Not get function id for resources provider %s.",
                     self.arq.device_rp_uuid)
            return

        placement = placement_client.PlacementClient()
        try:
            placement.delete_traits_with_prefixes(
                self.arq.device_rp_uuid, [constants.FPGA_FUNCTION_ID])
        except Exception as e:
            LOG.error("Failed to delete traits(%s) from resources provider %s."
                      "Reason: %s", constants.FPGA_FUNCTION_ID,
                      self.arq.device_rp_uuid, e.message)
            self.update_check_state(
                context, constants.ARQ_BIND_FAILED)
            raise

        function_id = function_id.upper().replace('-', '_-')
        # TODO(Sundar) Validate this is a valid trait name
        vendor = driver_name.upper()
        trait_names = ["_".join((
            constants.FPGA_FUNCTION_ID, vendor, function_id))]
        try:
            placement.add_traits_to_rp(
                self.arq.device_rp_uuid, trait_names)
        except Exception as e:
            LOG.error("Failed to add traits(%s) to resources provider %s."
                      "Reason: %s", trait_names,
                      self.arq.device_rp_uuid, e.message)
            # TODO(Shaohe) Rollback? We have _update_placement,
            # should cancel it.
            self.update_check_state(
                context, constants.ARQ_BIND_FAILED)
            raise
        LOG.info("Add traits(%s) to resources provider %s.",
                 trait_names, self.arq.device_rp_uuid)
Exemple #2
0
 def __init__(self, topic, host=None):
     super(ConductorManager, self).__init__()
     self.topic = topic
     self.host = host or CONF.host
     self.placement_client = placement_client.PlacementClient()