27 from netaddr.ip
import IPAddress
28 from cm.models.public_ip
import PublicIP
29 from cm.utils
import log
30 from cm.utils.exception
import CMException
31 from cm.utils.decorators
import admin_cm_log
32 from cm.models.lease
import Lease
42 leases = PublicIP.objects.all()
43 return [lease.dict
for lease
in leases]
56 def add(caller_id, start_address, count):
57 pool = IPAddress(start_address)
58 for i
in xrange(count):
59 if PublicIP.objects.filter(address=str(pool + i)).exists() > 0:
60 log.debug(caller_id,
'Ip %s is a duplicate! Skipping' % str(pool + i))
61 elif not IPAddress(pool + 1).is_unicast():
62 log.debug(caller_id,
'Ip %s is not an unicast address! Skipping' % str(pool + i))
64 log.debug(caller_id,
'Adding public ip %s' % str(pool + i))
65 public_lease = PublicIP()
66 public_lease.address = str(pool + i)
80 def delete(caller_id, public_ip_id_list):
81 for ip_address
in public_ip_id_list:
82 lease = PublicIP.objects.get(id=ip_address)
83 if lease.lease !=
None:
84 raise CMException(
'lease_in_use')
86 for ip_address
in public_ip_id_list:
87 lease = PublicIP.objects.get(id=ip_address)
106 lease = Lease.objects.get(id=lease_id)
108 log.exception(caller_id, str(e))
109 raise CMException(
"lease_not_found")
112 raise CMException(
'lease_not_assigned')
115 public_ip = lease.publicip_set.all()[0]
117 raise CMException(
'public_lease_assigned')
133 for public_ip_id
in public_ip_id_list:
134 public_lease = PublicIP.objects.get(id=public_ip_id)
136 if public_lease.lease:
137 public_lease.unassign()
139 public_lease.user =
None
151 public_lease = PublicIP.objects.get(id=public_ip_id)
152 public_lease.unassign()