Refactored network model access into data abstraction layer.
Also changed the name to floating_ip.
This commit is contained in:
		@@ -25,7 +25,7 @@ import logging
 | 
				
			|||||||
import os
 | 
					import os
 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#TODO(joshua): there is concern that the user dnsmasq runs under will not
 | 
					# 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
 | 
					#               have nova in the path. This should be verified and if it is
 | 
				
			||||||
#               not true the ugly line below can be removed
 | 
					#               not true the ugly line below can be removed
 | 
				
			||||||
sys.path.append(os.path.abspath(os.path.join(__file__, "../../")))
 | 
					sys.path.append(os.path.abspath(os.path.join(__file__, "../../")))
 | 
				
			||||||
@@ -36,6 +36,7 @@ from nova import utils
 | 
				
			|||||||
from nova.network import linux_net
 | 
					from nova.network import linux_net
 | 
				
			||||||
from nova.network import service
 | 
					from nova.network import service
 | 
				
			||||||
from nova import datastore # for redis_db flag
 | 
					from nova import datastore # for redis_db flag
 | 
				
			||||||
 | 
					from nova.auth import manager # for auth flags
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FLAGS = flags.FLAGS
 | 
					FLAGS = flags.FLAGS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -43,16 +44,16 @@ FLAGS = flags.FLAGS
 | 
				
			|||||||
def add_lease(_mac, ip, _hostname, _interface):
 | 
					def add_lease(_mac, ip, _hostname, _interface):
 | 
				
			||||||
    """Set the IP that was assigned by the DHCP server."""
 | 
					    """Set the IP that was assigned by the DHCP server."""
 | 
				
			||||||
    if FLAGS.fake_rabbit:
 | 
					    if FLAGS.fake_rabbit:
 | 
				
			||||||
        logging.debug("leasing_ip")
 | 
					        logging.debug("leasing ip")
 | 
				
			||||||
        from nova import models
 | 
					        from nova import models
 | 
				
			||||||
        print models.FixedIp.count()
 | 
					        print models.FixedIp.count()
 | 
				
			||||||
        print models.Network.count()
 | 
					        print models.Network.count()
 | 
				
			||||||
        print FLAGS.sql_connection
 | 
					        print FLAGS.sql_connection
 | 
				
			||||||
        service.VlanNetworkService().lease_ip(ip)
 | 
					        service.VlanNetworkService().lease_fixed_ip(ip)
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        rpc.cast("%s.%s" % (FLAGS.network_topic, FLAGS.node_name),
 | 
					        rpc.cast("%s.%s" % (FLAGS.network_topic, FLAGS.node_name),
 | 
				
			||||||
                 {"method": "lease_ip",
 | 
					                 {"method": "lease_fixed_ip",
 | 
				
			||||||
                  "args": {"fixed_ip_str": ip}})
 | 
					                  "args": {"address": ip}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def old_lease(_mac, _ip, _hostname, _interface):
 | 
					def old_lease(_mac, _ip, _hostname, _interface):
 | 
				
			||||||
@@ -63,12 +64,12 @@ def old_lease(_mac, _ip, _hostname, _interface):
 | 
				
			|||||||
def del_lease(_mac, ip, _hostname, _interface):
 | 
					def del_lease(_mac, ip, _hostname, _interface):
 | 
				
			||||||
    """Called when a lease expires."""
 | 
					    """Called when a lease expires."""
 | 
				
			||||||
    if FLAGS.fake_rabbit:
 | 
					    if FLAGS.fake_rabbit:
 | 
				
			||||||
        logging.debug("releasing_ip")
 | 
					        logging.debug("releasing ip")
 | 
				
			||||||
        service.VlanNetworkService().release_ip(ip)
 | 
					        service.VlanNetworkService().release_fixed_ip(ip)
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        rpc.cast("%s.%s" % (FLAGS.network_topic, FLAGS.node_name),
 | 
					        rpc.cast("%s.%s" % (FLAGS.network_topic, FLAGS.node_name),
 | 
				
			||||||
                 {"method": "release_ip",
 | 
					                 {"method": "release_fixed_ip",
 | 
				
			||||||
                  "args": {"fixed_ip_str": ip}})
 | 
					                  "args": {"address": ip}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def init_leases(interface):
 | 
					def init_leases(interface):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -311,7 +311,7 @@ class CloudController(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def _get_address(self, context, public_ip):
 | 
					    def _get_address(self, context, public_ip):
 | 
				
			||||||
        # FIXME(vish) this should move into network.py
 | 
					        # FIXME(vish) this should move into network.py
 | 
				
			||||||
        address = network_model.ElasticIp.lookup(public_ip)
 | 
					        address = network_model.FloatingIp.lookup(public_ip)
 | 
				
			||||||
        if address and (context.user.is_admin() or address['project_id'] == context.project.id):
 | 
					        if address and (context.user.is_admin() or address['project_id'] == context.project.id):
 | 
				
			||||||
            return address
 | 
					            return address
 | 
				
			||||||
        raise exception.NotFound("Address at ip %s not found" % public_ip)
 | 
					        raise exception.NotFound("Address at ip %s not found" % public_ip)
 | 
				
			||||||
@@ -459,7 +459,7 @@ class CloudController(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def format_addresses(self, context):
 | 
					    def format_addresses(self, context):
 | 
				
			||||||
        addresses = []
 | 
					        addresses = []
 | 
				
			||||||
        for address in network_model.ElasticIp.all():
 | 
					        for address in network_model.FloatingIp.all():
 | 
				
			||||||
            # TODO(vish): implement a by_project iterator for addresses
 | 
					            # TODO(vish): implement a by_project iterator for addresses
 | 
				
			||||||
            if (context.user.is_admin() or
 | 
					            if (context.user.is_admin() or
 | 
				
			||||||
                address['project_id'] == context.project.id):
 | 
					                address['project_id'] == context.project.id):
 | 
				
			||||||
@@ -481,7 +481,7 @@ class CloudController(object):
 | 
				
			|||||||
    def allocate_address(self, context, **kwargs):
 | 
					    def allocate_address(self, context, **kwargs):
 | 
				
			||||||
        network_topic = yield self._get_network_topic(context)
 | 
					        network_topic = yield self._get_network_topic(context)
 | 
				
			||||||
        public_ip = yield rpc.call(network_topic,
 | 
					        public_ip = yield rpc.call(network_topic,
 | 
				
			||||||
                         {"method": "allocate_elastic_ip",
 | 
					                         {"method": "allocate_floating_ip",
 | 
				
			||||||
                          "args": {"user_id": context.user.id,
 | 
					                          "args": {"user_id": context.user.id,
 | 
				
			||||||
                                   "project_id": context.project.id}})
 | 
					                                   "project_id": context.project.id}})
 | 
				
			||||||
        defer.returnValue({'addressSet': [{'publicIp': public_ip}]})
 | 
					        defer.returnValue({'addressSet': [{'publicIp': public_ip}]})
 | 
				
			||||||
@@ -492,8 +492,8 @@ class CloudController(object):
 | 
				
			|||||||
        # NOTE(vish): Should we make sure this works?
 | 
					        # NOTE(vish): Should we make sure this works?
 | 
				
			||||||
        network_topic = yield self._get_network_topic(context)
 | 
					        network_topic = yield self._get_network_topic(context)
 | 
				
			||||||
        rpc.cast(network_topic,
 | 
					        rpc.cast(network_topic,
 | 
				
			||||||
                         {"method": "deallocate_elastic_ip",
 | 
					                         {"method": "deallocate_floating_ip",
 | 
				
			||||||
                          "args": {"elastic_ip": public_ip}})
 | 
					                          "args": {"floating_ip": public_ip}})
 | 
				
			||||||
        defer.returnValue({'releaseResponse': ["Address released."]})
 | 
					        defer.returnValue({'releaseResponse': ["Address released."]})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @rbac.allow('netadmin')
 | 
					    @rbac.allow('netadmin')
 | 
				
			||||||
@@ -503,8 +503,8 @@ class CloudController(object):
 | 
				
			|||||||
        address = self._get_address(context, public_ip)
 | 
					        address = self._get_address(context, public_ip)
 | 
				
			||||||
        network_topic = yield self._get_network_topic(context)
 | 
					        network_topic = yield self._get_network_topic(context)
 | 
				
			||||||
        rpc.cast(network_topic,
 | 
					        rpc.cast(network_topic,
 | 
				
			||||||
                         {"method": "associate_elastic_ip",
 | 
					                         {"method": "associate_floating_ip",
 | 
				
			||||||
                          "args": {"elastic_ip": address['address'],
 | 
					                          "args": {"floating_ip": address['address'],
 | 
				
			||||||
                                   "fixed_ip": instance['private_dns_name'],
 | 
					                                   "fixed_ip": instance['private_dns_name'],
 | 
				
			||||||
                                   "instance_id": instance['instance_id']}})
 | 
					                                   "instance_id": instance['instance_id']}})
 | 
				
			||||||
        defer.returnValue({'associateResponse': ["Address associated."]})
 | 
					        defer.returnValue({'associateResponse': ["Address associated."]})
 | 
				
			||||||
@@ -515,8 +515,8 @@ class CloudController(object):
 | 
				
			|||||||
        address = self._get_address(context, public_ip)
 | 
					        address = self._get_address(context, public_ip)
 | 
				
			||||||
        network_topic = yield self._get_network_topic(context)
 | 
					        network_topic = yield self._get_network_topic(context)
 | 
				
			||||||
        rpc.cast(network_topic,
 | 
					        rpc.cast(network_topic,
 | 
				
			||||||
                         {"method": "disassociate_elastic_ip",
 | 
					                         {"method": "disassociate_floating_ip",
 | 
				
			||||||
                          "args": {"elastic_ip": address['address']}})
 | 
					                          "args": {"floating_ip": address['address']}})
 | 
				
			||||||
        defer.returnValue({'disassociateResponse': ["Address disassociated."]})
 | 
					        defer.returnValue({'disassociateResponse': ["Address disassociated."]})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @defer.inlineCallbacks
 | 
					    @defer.inlineCallbacks
 | 
				
			||||||
@@ -617,15 +617,15 @@ class CloudController(object):
 | 
				
			|||||||
                logging.warning("Instance %s was not found during terminate"
 | 
					                logging.warning("Instance %s was not found during terminate"
 | 
				
			||||||
                                % i)
 | 
					                                % i)
 | 
				
			||||||
                continue
 | 
					                continue
 | 
				
			||||||
            elastic_ip = network_model.get_public_ip_for_instance(i)
 | 
					            floating_ip = network_model.get_public_ip_for_instance(i)
 | 
				
			||||||
            if elastic_ip:
 | 
					            if floating_ip:
 | 
				
			||||||
                logging.debug("Disassociating address %s" % elastic_ip)
 | 
					                logging.debug("Disassociating address %s" % floating_ip)
 | 
				
			||||||
                # NOTE(vish): Right now we don't really care if the ip is
 | 
					                # NOTE(vish): Right now we don't really care if the ip is
 | 
				
			||||||
                #             disassociated.  We may need to worry about
 | 
					                #             disassociated.  We may need to worry about
 | 
				
			||||||
                #             checking this later.  Perhaps in the scheduler?
 | 
					                #             checking this later.  Perhaps in the scheduler?
 | 
				
			||||||
                rpc.cast(network_topic,
 | 
					                rpc.cast(network_topic,
 | 
				
			||||||
                         {"method": "disassociate_elastic_ip",
 | 
					                         {"method": "disassociate_floating_ip",
 | 
				
			||||||
                          "args": {"elastic_ip": elastic_ip}})
 | 
					                          "args": {"floating_ip": floating_ip}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            fixed_ip = instance.get('private_dns_name', None)
 | 
					            fixed_ip = instance.get('private_dns_name', None)
 | 
				
			||||||
            if fixed_ip:
 | 
					            if fixed_ip:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -278,12 +278,12 @@ class FixedIp(Base, NovaBase):
 | 
				
			|||||||
            raise exception.NotFound("No model for ip str %s" % ip_str)
 | 
					            raise exception.NotFound("No model for ip str %s" % ip_str)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ElasticIp(Base, NovaBase):
 | 
					class FloatingIp(Base, NovaBase):
 | 
				
			||||||
    __tablename__ = 'elastic_ips'
 | 
					    __tablename__ = 'floating_ips'
 | 
				
			||||||
    id = Column(Integer, primary_key=True)
 | 
					    id = Column(Integer, primary_key=True)
 | 
				
			||||||
    ip_str = Column(String(255), unique=True)
 | 
					    ip_str = Column(String(255), unique=True)
 | 
				
			||||||
    fixed_ip_id = Column(Integer, ForeignKey('fixed_ips.id'), nullable=True)
 | 
					    fixed_ip_id = Column(Integer, ForeignKey('fixed_ips.id'), nullable=True)
 | 
				
			||||||
    fixed_ip = relationship(FixedIp, backref=backref('elastic_ips'))
 | 
					    fixed_ip = relationship(FixedIp, backref=backref('floating_ips'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    project_id = Column(String(255)) #, ForeignKey('projects.id'), nullable=False)
 | 
					    project_id = Column(String(255)) #, ForeignKey('projects.id'), nullable=False)
 | 
				
			||||||
    node_name = Column(String(255))  #, ForeignKey('physical_node.id'))
 | 
					    node_name = Column(String(255))  #, ForeignKey('physical_node.id'))
 | 
				
			||||||
@@ -305,7 +305,7 @@ class Network(Base, NovaBase):
 | 
				
			|||||||
    kind = Column(String(255))
 | 
					    kind = Column(String(255))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    injected = Column(Boolean, default=False)
 | 
					    injected = Column(Boolean, default=False)
 | 
				
			||||||
    network_str = Column(String(255))
 | 
					    cidr = Column(String(255))
 | 
				
			||||||
    netmask = Column(String(255))
 | 
					    netmask = Column(String(255))
 | 
				
			||||||
    bridge = Column(String(255))
 | 
					    bridge = Column(String(255))
 | 
				
			||||||
    gateway = Column(String(255))
 | 
					    gateway = Column(String(255))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,8 +21,8 @@ Unit Tests for network code
 | 
				
			|||||||
import IPy
 | 
					import IPy
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
import logging
 | 
					import logging
 | 
				
			||||||
import tempfile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from nova import db
 | 
				
			||||||
from nova import exception
 | 
					from nova import exception
 | 
				
			||||||
from nova import flags
 | 
					from nova import flags
 | 
				
			||||||
from nova import models
 | 
					from nova import models
 | 
				
			||||||
@@ -30,7 +30,6 @@ from nova import test
 | 
				
			|||||||
from nova import utils
 | 
					from nova import utils
 | 
				
			||||||
from nova.auth import manager
 | 
					from nova.auth import manager
 | 
				
			||||||
from nova.network import service
 | 
					from nova.network import service
 | 
				
			||||||
from nova.network.exception import NoMoreAddresses, NoMoreNetworks
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
FLAGS = flags.FLAGS
 | 
					FLAGS = flags.FLAGS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -59,49 +58,52 @@ class NetworkTestCase(test.TrialTestCase):
 | 
				
			|||||||
                                                             name))
 | 
					                                                             name))
 | 
				
			||||||
            # create the necessary network data for the project
 | 
					            # create the necessary network data for the project
 | 
				
			||||||
            self.service.set_network_host(self.projects[i].id)
 | 
					            self.service.set_network_host(self.projects[i].id)
 | 
				
			||||||
        instance = models.Instance()
 | 
					        instance_id = db.instance_create(None,
 | 
				
			||||||
        instance.mac_address = utils.generate_mac()
 | 
					                                         {'mac_address': utils.generate_mac()})
 | 
				
			||||||
        instance.hostname = 'fake'
 | 
					        self.instance_id = instance_id
 | 
				
			||||||
        instance.save()
 | 
					        instance_id = db.instance_create(None,
 | 
				
			||||||
        self.instance_id = instance.id
 | 
					                                         {'mac_address': utils.generate_mac()})
 | 
				
			||||||
 | 
					        self.instance2_id = instance_id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def tearDown(self):  # pylint: disable=C0103
 | 
					    def tearDown(self):  # pylint: disable=C0103
 | 
				
			||||||
        super(NetworkTestCase, self).tearDown()
 | 
					        super(NetworkTestCase, self).tearDown()
 | 
				
			||||||
        # TODO(termie): this should really be instantiating clean datastores
 | 
					        # TODO(termie): this should really be instantiating clean datastores
 | 
				
			||||||
        #               in between runs, one failure kills all the tests
 | 
					        #               in between runs, one failure kills all the tests
 | 
				
			||||||
 | 
					        db.instance_destroy(None, self.instance_id)
 | 
				
			||||||
 | 
					        db.instance_destroy(None, self.instance2_id)
 | 
				
			||||||
        for project in self.projects:
 | 
					        for project in self.projects:
 | 
				
			||||||
            self.manager.delete_project(project)
 | 
					            self.manager.delete_project(project)
 | 
				
			||||||
        self.manager.delete_user(self.user)
 | 
					        self.manager.delete_user(self.user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_public_network_association(self):
 | 
					    def test_public_network_association(self):
 | 
				
			||||||
        """Makes sure that we can allocaate a public ip"""
 | 
					        """Makes sure that we can allocaate a public ip"""
 | 
				
			||||||
        # FIXME better way of adding elastic ips
 | 
					        # TODO(vish): better way of adding floating ips
 | 
				
			||||||
        pubnet = IPy.IP(flags.FLAGS.public_range)
 | 
					        pubnet = IPy.IP(flags.FLAGS.public_range)
 | 
				
			||||||
        ip_str = str(pubnet[0])
 | 
					        ip_str = str(pubnet[0])
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            elastic_ip = models.ElasticIp.find_by_ip_str(ip_str)
 | 
					            floating_ip = models.FloatingIp.find_by_ip_str(ip_str)
 | 
				
			||||||
        except exception.NotFound:
 | 
					        except exception.NotFound:
 | 
				
			||||||
            elastic_ip = models.ElasticIp()
 | 
					            floating_ip = models.FloatingIp()
 | 
				
			||||||
            elastic_ip.ip_str = ip_str
 | 
					            floating_ip.ip_str = ip_str
 | 
				
			||||||
            elastic_ip.node_name = FLAGS.node_name
 | 
					            floating_ip.node_name = FLAGS.node_name
 | 
				
			||||||
            elastic_ip.save()
 | 
					            floating_ip.save()
 | 
				
			||||||
        eaddress = self.service.allocate_elastic_ip(self.projects[0].id)
 | 
					        eaddress = self.service.allocate_floating_ip(self.projects[0].id)
 | 
				
			||||||
        faddress = self.service.allocate_fixed_ip(self.projects[0].id,
 | 
					        faddress = self.service.allocate_fixed_ip(self.projects[0].id,
 | 
				
			||||||
                                                 self.instance_id)
 | 
					                                                 self.instance_id)
 | 
				
			||||||
        self.assertEqual(eaddress, str(pubnet[0]))
 | 
					        self.assertEqual(eaddress, str(pubnet[0]))
 | 
				
			||||||
        self.service.associate_elastic_ip(eaddress, faddress)
 | 
					        self.service.associate_floating_ip(eaddress, faddress)
 | 
				
			||||||
        # FIXME datamodel abstraction
 | 
					        # FIXME datamodel abstraction
 | 
				
			||||||
        self.assertEqual(elastic_ip.fixed_ip.ip_str, faddress)
 | 
					        self.assertEqual(floating_ip.fixed_ip.ip_str, faddress)
 | 
				
			||||||
        self.service.disassociate_elastic_ip(eaddress)
 | 
					        self.service.disassociate_floating_ip(eaddress)
 | 
				
			||||||
        self.assertEqual(elastic_ip.fixed_ip, None)
 | 
					        self.assertEqual(floating_ip.fixed_ip, None)
 | 
				
			||||||
        self.service.deallocate_elastic_ip(eaddress)
 | 
					        self.service.deallocate_floating_ip(eaddress)
 | 
				
			||||||
        self.service.deallocate_fixed_ip(faddress)
 | 
					        self.service.deallocate_fixed_ip(faddress)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_allocate_deallocate_fixed_ip(self):
 | 
					    def test_allocate_deallocate_fixed_ip(self):
 | 
				
			||||||
        """Makes sure that we can allocate and deallocate a fixed ip"""
 | 
					        """Makes sure that we can allocate and deallocate a fixed ip"""
 | 
				
			||||||
        address = self.service.allocate_fixed_ip(self.projects[0].id,
 | 
					        address = self.service.allocate_fixed_ip(self.projects[0].id,
 | 
				
			||||||
                                                 self.instance_id)
 | 
					                                                 self.instance_id)
 | 
				
			||||||
        net = service.get_network_for_project(self.projects[0].id)
 | 
					        net = db.project_get_network(None, self.projects[0].id)
 | 
				
			||||||
        self.assertTrue(is_allocated_in_project(address, self.projects[0].id))
 | 
					        self.assertTrue(is_allocated_in_project(address, self.projects[0].id))
 | 
				
			||||||
        issue_ip(address, net.bridge)
 | 
					        issue_ip(address, net.bridge)
 | 
				
			||||||
        self.service.deallocate_fixed_ip(address)
 | 
					        self.service.deallocate_fixed_ip(address)
 | 
				
			||||||
@@ -117,10 +119,10 @@ class NetworkTestCase(test.TrialTestCase):
 | 
				
			|||||||
        address = self.service.allocate_fixed_ip(self.projects[0].id,
 | 
					        address = self.service.allocate_fixed_ip(self.projects[0].id,
 | 
				
			||||||
                                                 self.instance_id)
 | 
					                                                 self.instance_id)
 | 
				
			||||||
        address2 = self.service.allocate_fixed_ip(self.projects[1].id,
 | 
					        address2 = self.service.allocate_fixed_ip(self.projects[1].id,
 | 
				
			||||||
                                                  self.instance_id)
 | 
					                                                  self.instance2_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        net = service.get_network_for_project(self.projects[0].id)
 | 
					        net = db.project_get_network(None, self.projects[0].id)
 | 
				
			||||||
        net2 = service.get_network_for_project(self.projects[1].id)
 | 
					        net2 = db.project_get_network(None, self.projects[1].id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.assertTrue(is_allocated_in_project(address, self.projects[0].id))
 | 
					        self.assertTrue(is_allocated_in_project(address, self.projects[0].id))
 | 
				
			||||||
        self.assertTrue(is_allocated_in_project(address2, self.projects[1].id))
 | 
					        self.assertTrue(is_allocated_in_project(address2, self.projects[1].id))
 | 
				
			||||||
@@ -151,7 +153,7 @@ class NetworkTestCase(test.TrialTestCase):
 | 
				
			|||||||
            address = self.service.allocate_fixed_ip(project_id, self.instance_id)
 | 
					            address = self.service.allocate_fixed_ip(project_id, self.instance_id)
 | 
				
			||||||
            address2 = self.service.allocate_fixed_ip(project_id, self.instance_id)
 | 
					            address2 = self.service.allocate_fixed_ip(project_id, self.instance_id)
 | 
				
			||||||
            address3 = self.service.allocate_fixed_ip(project_id, self.instance_id)
 | 
					            address3 = self.service.allocate_fixed_ip(project_id, self.instance_id)
 | 
				
			||||||
            net = service.get_network_for_project(project_id)
 | 
					            net = db.project_get_network(None, project_id)
 | 
				
			||||||
            issue_ip(address, net.bridge)
 | 
					            issue_ip(address, net.bridge)
 | 
				
			||||||
            issue_ip(address2, net.bridge)
 | 
					            issue_ip(address2, net.bridge)
 | 
				
			||||||
            issue_ip(address3, net.bridge)
 | 
					            issue_ip(address3, net.bridge)
 | 
				
			||||||
@@ -167,7 +169,7 @@ class NetworkTestCase(test.TrialTestCase):
 | 
				
			|||||||
            release_ip(address, net.bridge)
 | 
					            release_ip(address, net.bridge)
 | 
				
			||||||
            release_ip(address2, net.bridge)
 | 
					            release_ip(address2, net.bridge)
 | 
				
			||||||
            release_ip(address3, net.bridge)
 | 
					            release_ip(address3, net.bridge)
 | 
				
			||||||
        net = service.get_network_for_project(self.projects[0].id)
 | 
					        net = db.project_get_network(None, self.projects[0].id)
 | 
				
			||||||
        self.service.deallocate_fixed_ip(first)
 | 
					        self.service.deallocate_fixed_ip(first)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_vpn_ip_and_port_looks_valid(self):
 | 
					    def test_vpn_ip_and_port_looks_valid(self):
 | 
				
			||||||
@@ -186,7 +188,7 @@ class NetworkTestCase(test.TrialTestCase):
 | 
				
			|||||||
            self.service.set_network_host(project.id)
 | 
					            self.service.set_network_host(project.id)
 | 
				
			||||||
            projects.append(project)
 | 
					            projects.append(project)
 | 
				
			||||||
        project = self.manager.create_project('boom' , self.user)
 | 
					        project = self.manager.create_project('boom' , self.user)
 | 
				
			||||||
        self.assertRaises(NoMoreNetworks,
 | 
					        self.assertRaises(db.NoMoreNetworks,
 | 
				
			||||||
                          self.service.set_network_host,
 | 
					                          self.service.set_network_host,
 | 
				
			||||||
                          project.id)
 | 
					                          project.id)
 | 
				
			||||||
        self.manager.delete_project(project)
 | 
					        self.manager.delete_project(project)
 | 
				
			||||||
@@ -198,7 +200,7 @@ class NetworkTestCase(test.TrialTestCase):
 | 
				
			|||||||
        """Makes sure that ip addresses that are deallocated get reused"""
 | 
					        """Makes sure that ip addresses that are deallocated get reused"""
 | 
				
			||||||
        address = self.service.allocate_fixed_ip(self.projects[0].id,
 | 
					        address = self.service.allocate_fixed_ip(self.projects[0].id,
 | 
				
			||||||
                                                 self.instance_id)
 | 
					                                                 self.instance_id)
 | 
				
			||||||
        net = service.get_network_for_project(self.projects[0].id)
 | 
					        net = db.project_get_network(None, self.projects[0].id)
 | 
				
			||||||
        issue_ip(address, net.bridge)
 | 
					        issue_ip(address, net.bridge)
 | 
				
			||||||
        self.service.deallocate_fixed_ip(address)
 | 
					        self.service.deallocate_fixed_ip(address)
 | 
				
			||||||
        release_ip(address, net.bridge)
 | 
					        release_ip(address, net.bridge)
 | 
				
			||||||
@@ -219,7 +221,7 @@ class NetworkTestCase(test.TrialTestCase):
 | 
				
			|||||||
        There are ips reserved at the bottom and top of the range.
 | 
					        There are ips reserved at the bottom and top of the range.
 | 
				
			||||||
        services (network, gateway, CloudPipe, broadcast)
 | 
					        services (network, gateway, CloudPipe, broadcast)
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        network = service.get_network_for_project(self.projects[0].id)
 | 
					        network = db.project_get_network(None, self.projects[0].id)
 | 
				
			||||||
        net_size = flags.FLAGS.network_size
 | 
					        net_size = flags.FLAGS.network_size
 | 
				
			||||||
        total_ips = (available_ips(network) +
 | 
					        total_ips = (available_ips(network) +
 | 
				
			||||||
                     reserved_ips(network) +
 | 
					                     reserved_ips(network) +
 | 
				
			||||||
@@ -229,7 +231,7 @@ class NetworkTestCase(test.TrialTestCase):
 | 
				
			|||||||
    def test_too_many_addresses(self):
 | 
					    def test_too_many_addresses(self):
 | 
				
			||||||
        """Test for a NoMoreAddresses exception when all fixed ips are used.
 | 
					        """Test for a NoMoreAddresses exception when all fixed ips are used.
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        network = service.get_network_for_project(self.projects[0].id)
 | 
					        network = db.project_get_network(None, self.projects[0].id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Number of availaible ips is len of the available list
 | 
					        # Number of availaible ips is len of the available list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -242,7 +244,7 @@ class NetworkTestCase(test.TrialTestCase):
 | 
				
			|||||||
            issue_ip(addresses[i],network.bridge)
 | 
					            issue_ip(addresses[i],network.bridge)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.assertEqual(available_ips(network), 0)
 | 
					        self.assertEqual(available_ips(network), 0)
 | 
				
			||||||
        self.assertRaises(NoMoreAddresses,
 | 
					        self.assertRaises(db.NoMoreAddresses,
 | 
				
			||||||
                          self.service.allocate_fixed_ip,
 | 
					                          self.service.allocate_fixed_ip,
 | 
				
			||||||
                          self.projects[0].id,
 | 
					                          self.projects[0].id,
 | 
				
			||||||
                          self.instance_id)
 | 
					                          self.instance_id)
 | 
				
			||||||
@@ -274,11 +276,11 @@ def reserved_ips(network):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
def is_allocated_in_project(address, project_id):
 | 
					def is_allocated_in_project(address, project_id):
 | 
				
			||||||
    """Returns true if address is in specified project"""
 | 
					    """Returns true if address is in specified project"""
 | 
				
			||||||
    fixed_ip = models.FixedIp.find_by_ip_str(address)
 | 
					    fixed_ip = db.fixed_ip_get_by_address(None, address)
 | 
				
			||||||
    project_net = service.get_network_for_project(project_id)
 | 
					    project_net = db.project_get_network(None, project_id)
 | 
				
			||||||
    # instance exists until release
 | 
					    # instance exists until release
 | 
				
			||||||
    logging.error('fixed_ip.instance: %s', fixed_ip.instance)
 | 
					    logging.debug('fixed_ip.instance: %s', fixed_ip.instance)
 | 
				
			||||||
    logging.error('project_net: %s', project_net)
 | 
					    logging.debug('project_net: %s', project_net)
 | 
				
			||||||
    return fixed_ip.instance is not None and fixed_ip.network == project_net
 | 
					    return fixed_ip.instance is not None and fixed_ip.network == project_net
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user