示例#1
0
 def create_mapping(self,
                    cost,
                    map_type='rate',
                    value=None,
                    service_id=None,
                    field_id=None,
                    group_id=None):
     if field_id and service_id:
         raise api.ClientHashMapError('You can only specify one parent.')
     elif not service_id and not field_id:
         raise api.ClientHashMapError('You must specify one parent.')
     elif value and service_id:
         raise api.ClientHashMapError('You can\'t specify a value'
                                      ' and a service_id.')
     elif not value and field_id:
         raise api.ClientHashMapError('You must specify a value'
                                      ' for a field mapping.')
     field_fk = None
     if field_id:
         field_db = self.get_field(uuid=field_id)
         field_fk = field_db.id
     service_fk = None
     if service_id:
         service_db = self.get_service(uuid=service_id)
         service_fk = service_db.id
     group_fk = None
     if group_id:
         group_db = self.get_group(uuid=group_id)
         group_fk = group_db.id
     session = db.get_session()
     try:
         with session.begin():
             field_map = models.HashMapMapping(
                 mapping_id=uuidutils.generate_uuid(),
                 value=value,
                 cost=cost,
                 field_id=field_fk,
                 service_id=service_fk,
                 map_type=map_type)
             if group_fk:
                 field_map.group_id = group_fk
             session.add(field_map)
     except exception.DBDuplicateEntry:
         if field_id:
             puuid = field_id
             ptype = 'field'
         else:
             puuid = service_id
             ptype = 'service'
         raise api.MappingAlreadyExists(value, puuid, ptype)
     except exception.DBError:
         raise api.NoSuchType(map_type)
     # FIXME(sheeprine): backref are not populated as they used to be.
     #                   Querying the item again to get backref.
     field_map = self.get_mapping(field_map.mapping_id)
     return field_map
示例#2
0
 def create_threshold(self,
                      level,
                      cost,
                      map_type='rate',
                      service_id=None,
                      field_id=None,
                      group_id=None,
                      tenant_id=None):
     if field_id and service_id:
         raise api.ClientHashMapError('You can only specify one parent.')
     elif not service_id and not field_id:
         raise api.ClientHashMapError('You must specify one parent.')
     field_fk = None
     if field_id:
         field_db = self.get_field(uuid=field_id)
         field_fk = field_db.id
     service_fk = None
     if service_id:
         service_db = self.get_service(uuid=service_id)
         service_fk = service_db.id
     group_fk = None
     if group_id:
         group_db = self.get_group(uuid=group_id)
         group_fk = group_db.id
     session = db.get_session()
     try:
         with session.begin():
             threshold_db = models.HashMapThreshold(
                 threshold_id=uuidutils.generate_uuid(),
                 level=level,
                 cost=cost,
                 field_id=field_fk,
                 service_id=service_fk,
                 map_type=map_type,
                 tenant_id=tenant_id)
             if group_fk:
                 threshold_db.group_id = group_fk
             session.add(threshold_db)
     except exception.DBDuplicateEntry:
         if field_id:
             puuid = field_id
             ptype = 'field'
         else:
             puuid = service_id
             ptype = 'service'
         raise api.ThresholdAlreadyExists(level, puuid, ptype)
     except exception.DBError:
         raise api.NoSuchType(map_type)
     # FIXME(sheeprine): backref are not populated as they used to be.
     #                   Querying the item again to get backref.
     threshold_db = self.get_threshold(threshold_db.threshold_id)
     return threshold_db