~midokura/nova/network-refactoring-l2

« back to all changes in this revision

Viewing changes to tools/esx/guest_tool.py

  • Committer: Adam Johnson
  • Date: 2011-07-26 00:41:55 UTC
  • mfrom: (1245.1.75 nova)
  • Revision ID: adjohn@gmail.com-20110726004155-l1f2ulh6rsnuvov5
fixing merge conflict

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
"""
22
22
 
23
23
import array
 
24
import gettext
24
25
import logging
25
26
import os
26
27
import platform
30
31
import sys
31
32
import time
32
33
 
 
34
gettext.install('nova', unicode=1)
 
35
 
33
36
PLATFORM_WIN = 'win32'
34
37
PLATFORM_LINUX = 'linux2'
35
38
ARCH_32_BIT = '32bit'
275
278
    return final_list
276
279
 
277
280
 
278
 
def _set_rhel_networking(network_details=[]):
 
281
def _set_rhel_networking(network_details=None):
 
282
    network_details = network_details or []
279
283
    all_dns_servers = []
280
284
    for network_detail in network_details:
281
285
        mac_address, ip_address, subnet_mask, gateway, broadcast,\
315
319
    _execute(['/sbin/service', 'network', 'restart'])
316
320
 
317
321
 
 
322
def _set_ubuntu_networking(network_details=None):
 
323
    network_details = network_details or []
 
324
    """ Set IPv4 network settings for Ubuntu """
 
325
    all_dns_servers = []
 
326
    for network_detail in network_details:
 
327
        mac_address, ip_address, subnet_mask, gateway, broadcast,\
 
328
            dns_servers = network_detail
 
329
        all_dns_servers.extend(dns_servers)
 
330
        adapter_name, current_ip_address = \
 
331
                _get_linux_adapter_name_and_ip_address(mac_address)
 
332
 
 
333
        if adapter_name and not ip_address == current_ip_address:
 
334
            interface_file_name = \
 
335
                '/etc/network/interfaces'
 
336
            # Remove file
 
337
            os.remove(interface_file_name)
 
338
            # Touch file
 
339
            _execute(['touch', interface_file_name])
 
340
            interface_file = open(interface_file_name, 'w')
 
341
            interface_file.write('\nauto %s' % adapter_name)
 
342
            interface_file.write('\niface %s inet static' % adapter_name)
 
343
            interface_file.write('\nbroadcast %s' % broadcast)
 
344
            interface_file.write('\ngateway %s' % gateway)
 
345
            interface_file.write('\nnetmask %s' % subnet_mask)
 
346
            interface_file.write('\naddress %s' % ip_address)
 
347
            interface_file.close()
 
348
    if all_dns_servers:
 
349
        dns_file_name = "/etc/resolv.conf"
 
350
        os.remove(dns_file_name)
 
351
        _execute(['touch', dns_file_name])
 
352
        dns_file = open(dns_file_name, 'w')
 
353
        dns_file.write("; generated by OpenStack guest tools")
 
354
        unique_entries = _filter_duplicates(all_dns_servers)
 
355
        for dns_server in unique_entries:
 
356
            dns_file.write("\nnameserver %s" % dns_server)
 
357
        dns_file.close()
 
358
    print "\nRestarting networking....\n"
 
359
    _execute(['/etc/init.d/networking', 'restart'])
 
360
 
 
361
 
318
362
def _linux_set_networking():
319
363
    """Set IP address for the Linux VM."""
320
364
    vmware_tools_bin = None
330
374
        cmd = [vmware_tools_bin, '--cmd', 'machine.id.get']
331
375
        network_details = _parse_network_details(_execute(cmd,
332
376
                                                check_exit_code=False))
333
 
        # TODO(sateesh): For other distros like ubuntu, suse, debian, BSD, etc.
334
 
        _set_rhel_networking(network_details)
 
377
        # TODO(sateesh): For other distros like suse, debian, BSD, etc.
 
378
        if(platform.dist()[0] == 'Ubuntu'):
 
379
            _set_ubuntu_networking(network_details)
 
380
        elif (platform.dist()[0] == 'redhat'):
 
381
            _set_rhel_networking(network_details)
 
382
        else:
 
383
            logging.warn(_("Distro '%s' not supported") % platform.dist()[0])
335
384
    else:
336
385
        logging.warn(_("VMware Tools is not installed"))
337
386