db_models.IpamAllocationPool).filter_by(
id=allocation_pool_id)
+ def update_range(self, session, db_range, first_ip=None, last_ip=None):
+ """Updates db_range to have new first_ip and last_ip.
+
+ :param session: database session
+ :param db_range: IpamAvailabilityRange db object
+ :param first_ip: first ip address in range
+ :param last_ip: last ip address in range
+ :return: count of updated rows
+ """
+ opts = {}
+ if first_ip:
+ opts['first_ip'] = str(first_ip)
+ if last_ip:
+ opts['last_ip'] = str(last_ip)
+ if not opts:
+ raise ipam_exc.IpamAvailabilityRangeNoChanges()
+ try:
+ return session.query(
+ db_models.IpamAvailabilityRange).filter_by(
+ allocation_pool_id=db_range.allocation_pool_id).filter_by(
+ first_ip=db_range.first_ip).filter_by(
+ last_ip=db_range.last_ip).update(opts)
+ except orm_exc.ObjectDeletedError:
+ raise db_exc.RetryRequest(ipam_exc.IPAllocationFailed)
+
+ def delete_range(self, session, db_range):
+ """Return count of deleted ranges
+
+ :param session: database session
+ :param db_range: IpamAvailabilityRange db object
+ """
+ try:
+ return session.query(
+ db_models.IpamAvailabilityRange).filter_by(
+ allocation_pool_id=db_range.allocation_pool_id).filter_by(
+ first_ip=db_range.first_ip).filter_by(
+ last_ip=db_range.last_ip).delete()
+ except orm_exc.ObjectDeletedError:
+ raise db_exc.RetryRequest(ipam_exc.IPAllocationFailed)
+
def create_range(self, session, allocation_pool_id,
range_start, range_end):
- """Create an availabilty range for a given pool.
+ """Create an availability range for a given pool.
This method does not perform any validation on parameters; it simply
persist data on the database.