summaryrefslogtreecommitdiffstats
path: root/nova/compute
diff options
context:
space:
mode:
authorJoshua McKenty <jmckenty@joshua-mckentys-macbook-pro.local>2010-07-07 12:15:11 -0700
committerVishvananda Ishaya <vishvananda@gmail.com>2010-07-07 12:15:11 -0700
commitdbe324f7254dd3e01de44bb908150fb8397fe118 (patch)
tree7b2949e0f04402f936553622b2c84e682476ac25 /nova/compute
parentb7ea2f70581f6acd927ea7b65adaffeeb4b8d2ba (diff)
Got dhcpleasor working, with test ENV for testing, and rpc.cast for real world.
Diffstat (limited to 'nova/compute')
-rw-r--r--nova/compute/linux_net.py7
-rw-r--r--nova/compute/network.py25
2 files changed, 24 insertions, 8 deletions
diff --git a/nova/compute/linux_net.py b/nova/compute/linux_net.py
index b44cf9437..c9e5bb1a7 100644
--- a/nova/compute/linux_net.py
+++ b/nova/compute/linux_net.py
@@ -98,11 +98,10 @@ def dnsmasq_cmd(net):
' --pid-file=%s' % dhcp_file(net['vlan'], 'pid'),
' --listen-address=%s' % net.dhcp_listen_address,
' --except-interface=lo',
- ' --dhcp-range=%s,static,120s' % (net.dhcp_range_start),
- ' --dhcp-lease-max=61',
+ ' --dhcp-range=%s,static,600s' % (net.dhcp_range_start),
' --dhcp-hostsfile=%s' % dhcp_file(net['vlan'], 'conf'),
- ' --dhcp-leasefile=%s' % dhcp_file(net['vlan'], 'leases'),
- ' ---dhcp-script=%s' % bin_file('dhcpleasor.py')]
+ ' --dhcp-script=%s' % bin_file('dhcpleasor.py'),
+ ' --leasefile-ro']
return ''.join(cmd)
def hostDHCP(network, host, mac):
diff --git a/nova/compute/network.py b/nova/compute/network.py
index 7a347aa11..96b8e9627 100644
--- a/nova/compute/network.py
+++ b/nova/compute/network.py
@@ -160,7 +160,10 @@ class BaseNetwork(datastore.RedisModel):
self._add_host(user_id, project_id, address, mac)
self.express(address=address)
return address
- raise exception.NoMoreAddresses()
+ raise exception.NoMoreAddresses("Project %s with network %s" % (project_id, str(self.network)))
+
+ def lease_ip(self, ip_str):
+ logging.debug("Leasing allocated IP %s" % (ip_str))
def release_ip(self, ip_str):
if not ip_str in self.assigned:
@@ -419,14 +422,22 @@ def get_vlan_for_project(project_id):
return vlan
raise exception.AddressNotAllocated("Out of VLANs")
+def get_project_id_for_vlan(vlan):
+ assigned_vlans = get_assigned_vlans()
+ for project_id, project_vlan in assigned_vlans.iteritems():
+ if vlan == project_vlan:
+ return project_id
+
+def get_network_by_interface(iface, security_group='default'):
+ vlan = iface.rpartition("br")[2]
+ return get_project_network(get_project_id_for_vlan(vlan), security_group)
def get_network_by_address(address):
- logging.debug("Get Network By Address:")
+ logging.debug("Get Network By Address: %s" % address)
for project in users.UserManager.instance().get_projects():
- logging.debug(" looking at project %s", project.id)
net = get_project_network(project.id)
- logging.debug(" is %s in %s ?" % (address, str(net.assigned)))
if address in net.assigned:
+ logging.debug("Found %s in %s" % (address, project.id))
return net
raise exception.AddressNotAllocated()
@@ -438,6 +449,12 @@ def allocate_ip(user_id, project_id, mac):
def deallocate_ip(address):
return get_network_by_address(address).deallocate_ip(address)
+
+def release_ip(address):
+ return get_network_by_address(address).release_ip(address)
+
+def lease_ip(address):
+ return get_network_by_address(address).lease_ip(address)
def get_project_network(project_id, security_group='default'):
""" get a project's private network, allocating one if needed """