~cerberus/nova/disk_config

« back to all changes in this revision

Viewing changes to nova/network/manager.py

  • Committer: matt.dietz at rackspace
  • Date: 2011-09-21 19:48:25 UTC
  • mfrom: (1511.1.98 nova)
  • Revision ID: matt.dietz@rackspace.com-20110921194825-zv1w4qonfh6o1j2u
Merge from trunk, updated failing tests and pep8

Show diffs side-by-side

added added

removed removed

Lines of Context:
48
48
import itertools
49
49
import math
50
50
import netaddr
 
51
import re
51
52
import socket
52
53
from eventlet import greenpool
53
54
 
110
111
                    'Network host to use for ip allocation in flat modes')
111
112
flags.DEFINE_bool('fake_call', False,
112
113
                  'If True, skip using the queue and make local calls')
 
114
flags.DEFINE_bool('force_dhcp_release', False,
 
115
                  'If True, send a dhcp release on instance termination')
113
116
 
114
117
 
115
118
class AddressAlreadyAllocated(exception.Error):
397
400
        self.compute_api.trigger_security_group_members_refresh(admin_context,
398
401
                                                                    group_ids)
399
402
 
 
403
    def get_vifs_by_instance(self, context, instance_id):
 
404
        vifs = self.db.virtual_interface_get_by_instance(context,
 
405
                                                         instance_id)
 
406
        return vifs
 
407
 
 
408
    def get_instance_uuids_by_ip_filter(self, context, filters):
 
409
        fixed_ip_filter = filters.get('fixed_ip')
 
410
        ip_filter = re.compile(str(filters.get('ip')))
 
411
        ipv6_filter = re.compile(str(filters.get('ip6')))
 
412
 
 
413
        # NOTE(jkoelker) Should probably figure out a better way to do
 
414
        #                this. But for now it "works", this could suck on
 
415
        #                large installs.
 
416
 
 
417
        vifs = self.db.virtual_interface_get_all(context)
 
418
        results = []
 
419
 
 
420
        for vif in vifs:
 
421
            if vif['instance_id'] is None:
 
422
                continue
 
423
 
 
424
            fixed_ipv6 = vif.get('fixed_ipv6')
 
425
            if fixed_ipv6 and ipv6_filter.match(fixed_ipv6):
 
426
                # NOTE(jkoelker) Will need to update for the UUID flip
 
427
                results.append({'instance_id': vif['instance_id'],
 
428
                                'ip': fixed_ipv6})
 
429
 
 
430
            for fixed_ip in vif['fixed_ips']:
 
431
                if not fixed_ip or not fixed_ip['address']:
 
432
                    continue
 
433
                if fixed_ip['address'] == fixed_ip_filter:
 
434
                    results.append({'instance_id': vif['instance_id'],
 
435
                                    'ip': fixed_ip['address']})
 
436
                    continue
 
437
                if ip_filter.match(fixed_ip['address']):
 
438
                    results.append({'instance_id': vif['instance_id'],
 
439
                                    'ip': fixed_ip['address']})
 
440
                    continue
 
441
                for floating_ip in fixed_ip.get('floating_ips', []):
 
442
                    if not floating_ip or not floating_ip['address']:
 
443
                        continue
 
444
                    if ip_filter.match(floating_ip['address']):
 
445
                        results.append({'instance_id': vif['instance_id'],
 
446
                                        'ip': floating_ip['address']})
 
447
                        continue
 
448
 
 
449
        # NOTE(jkoelker) Until we switch over to instance_uuid ;)
 
450
        ids = [res['instance_id'] for res in results]
 
451
        uuid_map = self.db.instance_get_id_to_uuid_mapping(context, ids)
 
452
        for res in results:
 
453
            res['instance_uuid'] = uuid_map.get(res['instance_id'])
 
454
        return results
 
455
 
400
456
    def _get_networks_for_instance(self, context, instance_id, project_id,
401
457
                                   requested_networks=None):
402
458
        """Determine & return which networks an instance should connect to."""
629
685
        instance_id = instance_ref['id']
630
686
        self._do_trigger_security_group_members_refresh_for_instance(
631
687
                                                                   instance_id)
 
688
        if FLAGS.force_dhcp_release:
 
689
            dev = self.driver.get_dev(fixed_ip_ref['network'])
 
690
            vif = self.db.virtual_interface_get_by_instance_and_network(
 
691
                    context, instance_ref['id'], fixed_ip_ref['network']['id'])
 
692
            self.driver.release_dhcp(dev, address, vif['address'])
632
693
 
633
694
    def lease_fixed_ip(self, context, address):
634
695
        """Called by dhcp-bridge when ip is leased."""