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)
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()