Make "dhcpbridge init" output correctly formatted leases information.

This commit is contained in:
Soren Hansen 2011-03-07 15:12:26 +01:00
parent 9610c61055
commit 81fe66bb19
2 changed files with 28 additions and 4 deletions

View File

@ -94,7 +94,7 @@ def init_leases(interface):
"""Get the list of hosts for an interface.""" """Get the list of hosts for an interface."""
ctxt = context.get_admin_context() ctxt = context.get_admin_context()
network_ref = db.network_get_by_bridge(ctxt, interface) network_ref = db.network_get_by_bridge(ctxt, interface)
return linux_net.get_dhcp_hosts(ctxt, network_ref['id']) return linux_net.get_dhcp_leases(ctxt, network_ref['id'])
def main(): def main():

View File

@ -18,6 +18,7 @@ Implements vlans, bridges, and iptables rules using linux utilities.
""" """
import os import os
import time
from nova import db from nova import db
from nova import exception from nova import exception
@ -56,6 +57,8 @@ flags.DEFINE_bool('use_nova_chains', False,
'use the nova_ routing chains instead of default') 'use the nova_ routing chains instead of default')
flags.DEFINE_string('input_chain', 'INPUT', flags.DEFINE_string('input_chain', 'INPUT',
'chain to add nova_input to') 'chain to add nova_input to')
flags.DEFINE_integer('dhcp_lease_time', 120,
'Lifetime of a DHCP lease')
flags.DEFINE_string('dns_server', None, flags.DEFINE_string('dns_server', None,
'if set, uses specific dns server for dnsmasq') 'if set, uses specific dns server for dnsmasq')
@ -273,8 +276,17 @@ def ensure_bridge(bridge, interface, net_attrs=None):
_confirm_rule("FORWARD", "-j nova-local") _confirm_rule("FORWARD", "-j nova-local")
def get_dhcp_leases(context, network_id):
"""Return a network's hosts config in dnsmasq leasefile format"""
hosts = []
for fixed_ip_ref in db.network_get_associated_fixed_ips(context,
network_id):
hosts.append(_host_lease(fixed_ip_ref))
return '\n'.join(hosts)
def get_dhcp_hosts(context, network_id): def get_dhcp_hosts(context, network_id):
"""Get a string containing a network's hosts config in dnsmasq format""" """Get a string containing a network's hosts config in dhcp-host format"""
hosts = [] hosts = []
for fixed_ip_ref in db.network_get_associated_fixed_ips(context, for fixed_ip_ref in db.network_get_associated_fixed_ips(context,
network_id): network_id):
@ -365,8 +377,19 @@ interface %s
utils.get_my_linklocal(network_ref['bridge'])}) utils.get_my_linklocal(network_ref['bridge'])})
def _host_lease(fixed_ip_ref):
"""Return a host string for an address in leasefile format"""
instance_ref = fixed_ip_ref['instance']
timestamp = time.mktime(instance_ref['updated_at'].timetuple())
return "%d %s %s %s" % (timestamp + FLAGS.dhcp_lease_time,
instance_ref['mac_address'],
instance_ref['hostname'],
fixed_ip_ref['address'])
def _host_dhcp(fixed_ip_ref): def _host_dhcp(fixed_ip_ref):
"""Return a host string for an address""" """Return a host string for an address in dhcp-host format"""
instance_ref = fixed_ip_ref['instance'] instance_ref = fixed_ip_ref['instance']
return "%s,%s.%s,%s" % (instance_ref['mac_address'], return "%s,%s.%s,%s" % (instance_ref['mac_address'],
instance_ref['hostname'], instance_ref['hostname'],
@ -420,7 +443,8 @@ def _dnsmasq_cmd(net):
' --pid-file=%s' % _dhcp_file(net['bridge'], 'pid'), ' --pid-file=%s' % _dhcp_file(net['bridge'], 'pid'),
' --listen-address=%s' % net['gateway'], ' --listen-address=%s' % net['gateway'],
' --except-interface=lo', ' --except-interface=lo',
' --dhcp-range=%s,static,120s' % net['dhcp_start'], ' --dhcp-range=%s,static,%ds' % (net['dhcp_start'],
FLAGS.dhcp_lease_time),
' --dhcp-hostsfile=%s' % _dhcp_file(net['bridge'], 'conf'), ' --dhcp-hostsfile=%s' % _dhcp_file(net['bridge'], 'conf'),
' --dhcp-script=%s' % FLAGS.dhcpbridge, ' --dhcp-script=%s' % FLAGS.dhcpbridge,
' --leasefile-ro'] ' --leasefile-ro']