Fixes to dhcp lease code to use a flagfile
This commit is contained in:
parent
67d4e16a8c
commit
0b396e1315
@ -18,22 +18,25 @@
|
||||
# under the License.
|
||||
|
||||
"""
|
||||
dhcpleasor.py
|
||||
nova-dhcpbridge
|
||||
|
||||
Handle lease database updates from DHCP servers.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
|
||||
#TODO(joshua): there is concern that the user dnsmasq runs under will not
|
||||
# have nova in the path. This should be verified and if it is
|
||||
# not true the ugly line below can be removed
|
||||
sys.path.append(os.path.abspath(os.path.join(__file__, "../../")))
|
||||
|
||||
logging.debug(sys.path)
|
||||
import getopt
|
||||
from os import environ
|
||||
from nova import rpc
|
||||
from nova import utils
|
||||
|
||||
from nova.compute import linux_net
|
||||
from nova.compute import network
|
||||
from nova import rpc
|
||||
|
||||
from nova import flags
|
||||
FLAGS = flags.FLAGS
|
||||
@ -64,11 +67,12 @@ def init_leases(interface):
|
||||
return res
|
||||
|
||||
|
||||
def main(argv=None):
|
||||
if argv is None:
|
||||
argv = sys.argv
|
||||
interface = environ.get('DNSMASQ_INTERFACE', 'br0')
|
||||
if int(environ.get('TESTING', '0')):
|
||||
def main():
|
||||
flagfile = os.environ.get('FLAGFILE', FLAGS.dhcpbridge_flagfile)
|
||||
utils.default_flagfile(flagfile)
|
||||
argv = FLAGS(sys.argv)
|
||||
interface = os.environ.get('DNSMASQ_INTERFACE', 'br0')
|
||||
if int(os.environ.get('TESTING', '0')):
|
||||
FLAGS.fake_rabbit = True
|
||||
FLAGS.redis_db = 8
|
||||
FLAGS.network_size = 32
|
3
debian/nova-api.conf
vendored
3
debian/nova-api.conf
vendored
@ -1,5 +1,6 @@
|
||||
--daemonize=1
|
||||
--ca_path=/var/lib/nova/CA
|
||||
--keys_path=/var/lib/nova/keys
|
||||
--networks_path=/var/lib/nova/networks
|
||||
--dhcpbridge_flagfile=/etc/nova/nova-dhcpbridge.conf
|
||||
--fake_users=1
|
||||
--datastore_path=/var/lib/nova/keeper
|
||||
|
1
debian/nova-api.install
vendored
1
debian/nova-api.install
vendored
@ -1,2 +1,3 @@
|
||||
bin/nova-api usr/bin
|
||||
debian/nova-api.conf etc/nova
|
||||
debian/nova-dhcpbridge.conf etc/nova
|
||||
|
2
debian/nova-compute.conf
vendored
2
debian/nova-compute.conf
vendored
@ -1,8 +1,6 @@
|
||||
--ca_path=/var/lib/nova/CA
|
||||
--keys_path=/var/lib/nova/keys
|
||||
--datastore_path=/var/lib/nova/keeper
|
||||
--instances_path=/var/lib/nova/instances
|
||||
--networks_path=/var/lib/nova/networks
|
||||
--simple_network_template=/usr/share/nova/interfaces.template
|
||||
--libvirt_xml_template=/usr/share/nova/libvirt.xml.template
|
||||
--vpn_client_template=/usr/share/nova/client.ovpn.template
|
||||
|
2
debian/nova-dhcp.conf
vendored
Normal file
2
debian/nova-dhcp.conf
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
--networks_path=/var/lib/nova/networks
|
||||
--fake_users=1
|
1
debian/nova-objectstore.conf
vendored
1
debian/nova-objectstore.conf
vendored
@ -1,7 +1,6 @@
|
||||
--daemonize=1
|
||||
--ca_path=/var/lib/nova/CA
|
||||
--keys_path=/var/lib/nova/keys
|
||||
--datastore_path=/var/lib/nova/keeper
|
||||
--fake_users=1
|
||||
--images_path=/var/lib/nova/images
|
||||
--buckets_path=/var/lib/nova/buckets
|
||||
|
1
debian/nova-volume.conf
vendored
1
debian/nova-volume.conf
vendored
@ -1,7 +1,6 @@
|
||||
--daemonize=1
|
||||
--ca_path=/var/lib/nova/CA
|
||||
--keys_path=/var/lib/nova/keys
|
||||
--datastore_path=/var/lib/nova/keeper
|
||||
--fake_users=1
|
||||
--images_path=/var/lib/nova/images
|
||||
--buckets_path=/var/lib/nova/buckets
|
||||
|
@ -27,12 +27,16 @@ import subprocess
|
||||
from nova import flags
|
||||
FLAGS=flags.FLAGS
|
||||
|
||||
def execute(cmd):
|
||||
flags.DEFINE_string('dhcpbridge_flagfile',
|
||||
'/etc/nova-dhcpbridge.conf',
|
||||
'location of flagfile for dhcpbridge')
|
||||
|
||||
def execute(cmd, addl_env=None):
|
||||
if FLAGS.fake_network:
|
||||
logging.debug("FAKE NET: %s" % cmd)
|
||||
return "fake", 0
|
||||
else:
|
||||
return nova.utils.execute(cmd)
|
||||
return nova.utils.execute(cmd, addl_env=addl_env)
|
||||
|
||||
def runthis(desc, cmd):
|
||||
if FLAGS.fake_network:
|
||||
@ -60,7 +64,7 @@ def remove_rule(cmd):
|
||||
|
||||
def bind_public_ip(ip, interface):
|
||||
runthis("Binding IP to interface: %s", "sudo ip addr add %s dev %s" % (ip, interface))
|
||||
|
||||
|
||||
def unbind_public_ip(ip, interface):
|
||||
runthis("Binding IP to interface: %s", "sudo ip addr del %s dev %s" % (ip, interface))
|
||||
|
||||
@ -98,7 +102,7 @@ def dnsmasq_cmd(net):
|
||||
' --except-interface=lo',
|
||||
' --dhcp-range=%s,static,600s' % (net.dhcp_range_start),
|
||||
' --dhcp-hostsfile=%s' % dhcp_file(net['vlan'], 'conf'),
|
||||
' --dhcp-script=%s' % bin_file('dhcpleasor.py'),
|
||||
' --dhcp-script=%s' % bin_file('nova-dhcpbridge'),
|
||||
' --leasefile-ro']
|
||||
return ''.join(cmd)
|
||||
|
||||
@ -138,7 +142,9 @@ def start_dnsmasq(network):
|
||||
if os.path.exists(lease_file):
|
||||
os.unlink(lease_file)
|
||||
|
||||
Popen(dnsmasq_cmd(network).split(" "))
|
||||
# FLAGFILE in env
|
||||
env = {'FLAGFILE' : FLAGS.dhcpbridge_flagfile}
|
||||
execute(dnsmasq_cmd(network), addl_env=env)
|
||||
|
||||
def stop_dnsmasq(network):
|
||||
""" stops the dnsmasq instance for a given network """
|
||||
|
@ -253,7 +253,7 @@ class BaseNetwork(datastore.BasicModel):
|
||||
raise compute_exception.NoMoreAddresses("Project %s with network %s" %
|
||||
(project_id, str(self.network)))
|
||||
|
||||
def lease_ip(self, ip_str):
|
||||
def lease_ip(self, ip_str):
|
||||
logging.debug("Leasing allocated IP %s" % (ip_str))
|
||||
|
||||
def release_ip(self, ip_str):
|
||||
@ -563,10 +563,10 @@ 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)
|
||||
|
||||
|
@ -18,19 +18,18 @@
|
||||
|
||||
import os
|
||||
import logging
|
||||
import unittest
|
||||
|
||||
from nova import vendor
|
||||
import IPy
|
||||
|
||||
from nova import flags
|
||||
from nova import test
|
||||
from nova import exception
|
||||
from nova.compute.exception import NoMoreAddresses
|
||||
from nova.compute import network
|
||||
from nova.auth import users
|
||||
from nova import utils
|
||||
from nova.auth import users
|
||||
from nova.compute import network
|
||||
from nova.compute.exception import NoMoreAddresses
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
|
||||
class NetworkTestCase(test.TrialTestCase):
|
||||
def setUp(self):
|
||||
@ -182,14 +181,20 @@ def binpath(script):
|
||||
|
||||
class FakeDNSMasq(object):
|
||||
def issue_ip(self, mac, ip, hostname, interface):
|
||||
cmd = "%s add %s %s %s" % (binpath('dhcpleasor.py'), mac, ip, hostname)
|
||||
env = {'DNSMASQ_INTERFACE': interface, 'TESTING' : '1'}
|
||||
cmd = "%s add %s %s %s" % (binpath('nova-dhcpbridge'),
|
||||
mac, ip, hostname)
|
||||
env = {'DNSMASQ_INTERFACE': interface,
|
||||
'TESTING' : '1',
|
||||
'FLAGFILE' : FLAGS.dhcpbridge_flagfile}
|
||||
(out, err) = utils.execute(cmd, addl_env=env)
|
||||
logging.debug("ISSUE_IP: %s, %s " % (out, err))
|
||||
|
||||
def release_ip(self, mac, ip, hostname, interface):
|
||||
cmd = "%s del %s %s %s" % (binpath('dhcpleasor.py'), mac, ip, hostname)
|
||||
env = {'DNSMASQ_INTERFACE': interface, 'TESTING' : '1'}
|
||||
cmd = "%s del %s %s %s" % (binpath('nova-dhcpbridge'),
|
||||
mac, ip, hostname)
|
||||
env = {'DNSMASQ_INTERFACE': interface,
|
||||
'TESTING' : '1',
|
||||
'FLAGFILE' : FLAGS.dhcpbridge_flagfile}
|
||||
(out, err) = utils.execute(cmd, addl_env=env)
|
||||
logging.debug("RELEASE_IP: %s, %s " % (out, err))
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user