示例#1
0
 def drv_attr_make_diff(cls, context, dep_id, old_driver_attr_list,
                        new_driver_attr_list):
     """Diff new dirver-side Attribute Object lists with the old one."""
     LOG.info("Start differing attributes.")
     new_key_list = [
         driver_attr_obj.key for driver_attr_obj in new_driver_attr_list
     ]
     old_key_list = [
         driver_attr_obj.key for driver_attr_obj in old_driver_attr_list
     ]
     same = set(new_key_list) & set(old_key_list)
     # key is same, diff the value.
     for s in same:
         # value is not same, update
         new_driver_attr_obj = new_driver_attr_list[new_key_list.index(s)]
         old_driver_attr_obj = old_driver_attr_list[old_key_list.index(s)]
         if new_driver_attr_obj.value != old_driver_attr_obj.value:
             attr_obj = Attribute.get_by_dep_key(context, dep_id, s)
             attr_obj.value = new_driver_attr_obj.value
             attr_obj.save(context)
     # key is deleted.
     deleted = set(old_key_list) - same
     for d in deleted:
         old_driver_attr_obj = old_driver_attr_list[old_key_list.index(d)]
         old_driver_attr_obj.destroy(context, dep_id)
     # key is added.
     added = set(new_key_list) - same
     for a in added:
         new_driver_attr_obj = new_driver_attr_list[new_key_list.index(a)]
         new_driver_attr_obj.create(context, dep_id)
示例#2
0
 def drv_attr_make_diff(self, context, dep_id, old_driver_attr_list,
                        new_driver_attr_list):
     """Diff new driver-side Attribute Object lists with the old one."""
     LOG.info("Start differing attributes.")
     dep_obj = Deployable.get_by_id(context, dep_id)
     driver_dep = DriverDeployable.get_by_name(context, dep_obj.name)
     rp_uuid = self.get_rp_uuid_from_obj(driver_dep)
     new_key_list = [
         driver_attr_obj.key for driver_attr_obj in new_driver_attr_list
     ]
     old_key_list = [
         driver_attr_obj.key for driver_attr_obj in old_driver_attr_list
     ]
     same = set(new_key_list) & set(old_key_list)
     # key is deleted.
     deleted = set(old_key_list) - same
     for d in deleted:
         old_driver_attr_obj = old_driver_attr_list[old_key_list.index(d)]
         self.placement_client.delete_trait_by_name(
             context, rp_uuid, old_driver_attr_obj.value)
         old_driver_attr_obj.delete_by_key(context, dep_id, d)
     # key is added.
     added = set(new_key_list) - same
     for a in added:
         new_driver_attr_obj = new_driver_attr_list[new_key_list.index(a)]
         new_driver_attr_obj.create(context, dep_id)
         self.placement_client.add_traits_to_rp(rp_uuid,
                                                [new_driver_attr_obj.value])
     # key is same, diff the value.
     for s in same:
         # value is not same, update
         new_driver_attr_obj = new_driver_attr_list[new_key_list.index(s)]
         old_driver_attr_obj = old_driver_attr_list[old_key_list.index(s)]
         if new_driver_attr_obj.value != old_driver_attr_obj.value:
             attr_obj = Attribute.get_by_dep_key(context, dep_id, s)
             attr_obj.value = new_driver_attr_obj.value
             attr_obj.save(context)
             # Update traits here.
             if new_driver_attr_obj.key.startswith("trait"):
                 self.placement_client.delete_trait_by_name(
                     context, rp_uuid, old_driver_attr_obj.value)
                 self.placement_client.add_traits_to_rp(
                     rp_uuid, [new_driver_attr_obj.value])
             # Update resource classes here.
             if new_driver_attr_obj.key.startswith("rc"):
                 self.placement_client.ensure_resource_classes(
                     context, [new_driver_attr_obj.value])
                 inv_data = _gen_resource_inventory(
                     new_driver_attr_obj.value, dep_obj.num_accelerators)
                 self.placement_client.update_inventory(rp_uuid, inv_data)
                 self.placement_client.delete_rc_by_name(
                     context, old_driver_attr_obj.value)