Esempio n. 1
0
 def update_computehost(self, host_id, values):
     if values:
         cant_update_extra_capability = []
         for value in values:
             capabilities = db_api.host_extra_capability_get_all_per_name(
                 host_id,
                 value,
             )
             if capabilities:
                 for raw_capability in capabilities:
                     capability = {
                         'capability_name': value,
                         'capability_value': values[value],
                     }
                     try:
                         db_api.host_extra_capability_update(
                             raw_capability['id'], capability)
                     except (db_ex.BlazarDBException, RuntimeError):
                         cant_update_extra_capability.append(
                             raw_capability['capability_name'])
             else:
                 new_capability = {
                     'computehost_id': host_id,
                     'capability_name': value,
                     'capability_value': values[value],
                 }
                 try:
                     db_api.host_extra_capability_create(new_capability)
                 except (db_ex.BlazarDBException, RuntimeError):
                     cant_update_extra_capability.append(
                         new_capability['capability_name'])
         if cant_update_extra_capability:
             raise manager_ex.CantAddExtraCapability(
                 host=host_id, keys=cant_update_extra_capability)
     return self.get_computehost(host_id)
Esempio n. 2
0
    def update_computehost(self, host_id, values):
        # nothing to update
        if not values:
            return self.get_computehost(host_id)

        cant_update_extra_capability = []
        previous_capabilities = self._get_extra_capabilities(host_id)
        updated_keys = set(values.keys()) & set(previous_capabilities.keys())
        new_keys = set(values.keys()) - set(previous_capabilities.keys())

        for key in updated_keys:
            raw_capability = next(
                iter(
                    db_api.host_extra_capability_get_all_per_name(
                        host_id, key)))
            capability = {
                'capability_name': key,
                'capability_value': values[key],
            }
            if self.is_updatable_extra_capability(raw_capability):
                try:
                    db_api.host_extra_capability_update(
                        raw_capability['id'], capability)
                except (db_ex.BlazarDBException, RuntimeError):
                    cant_update_extra_capability.append(
                        raw_capability['capability_name'])
            else:
                LOG.info(
                    "Capability %s can't be updated because "
                    "existing reservations require it.",
                    raw_capability['capability_name'])
                cant_update_extra_capability.append(
                    raw_capability['capability_name'])

        for key in new_keys:
            new_capability = {
                'computehost_id': host_id,
                'capability_name': key,
                'capability_value': values[key],
            }
            try:
                db_api.host_extra_capability_create(new_capability)
            except (db_ex.BlazarDBException, RuntimeError):
                cant_update_extra_capability.append(
                    new_capability['capability_name'])

        if cant_update_extra_capability:
            raise manager_ex.CantAddExtraCapability(
                host=host_id, keys=cant_update_extra_capability)

        LOG.info('Extra capabilities on compute host %s updated with %s',
                 host_id, values)
        return self.get_computehost(host_id)