summaryrefslogtreecommitdiffstats
path: root/nova/virt
diff options
context:
space:
mode:
authorAmir Sadoughi <amir.sadoughi@gmail.com>2013-02-07 04:28:34 +0000
committerAmir Sadoughi <amir.sadoughi@gmail.com>2013-02-12 23:11:04 -0600
commit70c659059b8fbef811ce79700aecb01c60242ebd (patch)
tree670695cb938a685b6e82b7dc356abe12379309b3 /nova/virt
parent9994a9161d0acac216b3441233eae1f7238db889 (diff)
VMWare driver to use current nova.network.model
* Updated tests to use classes from nova.network.model instead of legacy "network,mapping" tuple. * Modified vmwareapi/{driver,vif,vmops}.py to use classes from nova.network.model instead of legacy "network,mapping" tuple. Fixes: bug 1112655 Change-Id: I7f4b39cd5add7d3cf7dcf485eb9855d0354f332c
Diffstat (limited to 'nova/virt')
-rwxr-xr-xnova/virt/vmwareapi/driver.py2
-rw-r--r--nova/virt/vmwareapi/vif.py6
-rw-r--r--nova/virt/vmwareapi/vmops.py70
3 files changed, 41 insertions, 37 deletions
diff --git a/nova/virt/vmwareapi/driver.py b/nova/virt/vmwareapi/driver.py
index 19f984c7d..63d9e3c57 100755
--- a/nova/virt/vmwareapi/driver.py
+++ b/nova/virt/vmwareapi/driver.py
@@ -164,7 +164,7 @@ class VMwareESXDriver(driver.ComputeDriver):
pass
def legacy_nwinfo(self):
- return True
+ return False
def list_instances(self):
"""List VM instances."""
diff --git a/nova/virt/vmwareapi/vif.py b/nova/virt/vmwareapi/vif.py
index 137045508..e2dfa0427 100644
--- a/nova/virt/vmwareapi/vif.py
+++ b/nova/virt/vmwareapi/vif.py
@@ -36,10 +36,10 @@ vmwareapi_vif_opts = [
CONF.register_opts(vmwareapi_vif_opts)
-def ensure_vlan_bridge(self, session, network, cluster=None):
+def ensure_vlan_bridge(self, session, vif, cluster=None):
"""Create a vlan and bridge unless they already exist."""
- vlan_num = network['vlan']
- bridge = network['bridge']
+ vlan_num = vif['network'].get_meta('vlan')
+ bridge = vif['network']['bridge']
vlan_interface = CONF.vmwareapi_vlan_interface
# Check if the vlan_interface physical network adapter exists on the
diff --git a/nova/virt/vmwareapi/vmops.py b/nova/virt/vmwareapi/vmops.py
index 4b8f926e3..0aeb58ea3 100644
--- a/nova/virt/vmwareapi/vmops.py
+++ b/nova/virt/vmwareapi/vmops.py
@@ -176,20 +176,20 @@ class VMwareVMOps(object):
vif_infos = []
if network_info is None:
return vif_infos
- for (network, mapping) in network_info:
- mac_address = mapping['mac']
- network_name = network['bridge'] or \
+ for vif in network_info:
+ mac_address = vif['address']
+ network_name = vif['network']['bridge'] or \
CONF.vmware.integration_bridge
- if mapping.get('should_create_vlan'):
+ if vif['network'].get_meta('should_create_vlan', False):
network_ref = vmwarevif.ensure_vlan_bridge(
- self._session, network,
+ self._session, vif,
self._cluster)
else:
network_ref = _check_if_network_bridge_exists(network_name)
vif_infos.append({'network_name': network_name,
'mac_address': mac_address,
'network_ref': network_ref,
- 'iface_id': mapping.get('id'),
+ 'iface_id': vif.get_meta('iface_id'),
})
return vif_infos
@@ -1127,6 +1127,33 @@ class VMwareVMOps(object):
return port
+ @staticmethod
+ def _get_machine_id_str(network_info):
+ machine_id_str = ''
+ for vif in network_info:
+ # TODO(vish): add support for dns2
+ # TODO(sateesh): add support for injection of ipv6 configuration
+ network = vif['network']
+ ip_v4 = netmask_v4 = gateway_v4 = broadcast_v4 = dns = None
+ subnets_v4 = [s for s in network['subnets'] if s['version'] == 4]
+ if len(subnets_v4[0]['ips']) > 0:
+ ip_v4 = subnets_v4[0]['ips'][0]
+ if len(subnets_v4[0]['dns']) > 0:
+ dns = subnets_v4[0]['dns'][0]['address']
+
+ netmask_v4 = str(subnets_v4[0].as_netaddr().netmask)
+ gateway_v4 = subnets_v4[0]['gateway']['address']
+ broadcast_v4 = str(subnets_v4[0].as_netaddr().broadcast)
+
+ interface_str = ";".join([vif['address'],
+ ip_v4 and ip_v4['address'] or '',
+ netmask_v4 or '',
+ gateway_v4 or '',
+ broadcast_v4 or '',
+ dns or ''])
+ machine_id_str = machine_id_str + interface_str + '#'
+ return machine_id_str
+
def _set_machine_id(self, client_factory, instance, network_info):
"""
Set the machine id of the VM for guest tools to pick up and reconfigure
@@ -1136,40 +1163,17 @@ class VMwareVMOps(object):
if vm_ref is None:
raise exception.InstanceNotFound(instance_id=instance['uuid'])
- machine_id_str = ''
- for (network, info) in network_info:
- # TODO(vish): add support for dns2
- # TODO(sateesh): add support for injection of ipv6 configuration
- ip_v4 = ip_v6 = None
- if 'ips' in info and len(info['ips']) > 0:
- ip_v4 = info['ips'][0]
- if 'ip6s' in info and len(info['ip6s']) > 0:
- ip_v6 = info['ip6s'][0]
- if len(info['dns']) > 0:
- dns = info['dns'][0]
- else:
- dns = ''
-
- interface_str = ";".join([info['mac'],
- ip_v4 and ip_v4['ip'] or '',
- ip_v4 and ip_v4['netmask'] or '',
- info['gateway'],
- info['broadcast'],
- dns])
- machine_id_str = machine_id_str + interface_str + '#'
-
machine_id_change_spec = vm_util.get_machine_id_change_spec(
- client_factory, machine_id_str)
+ client_factory,
+ self._get_machine_id_str(network_info))
- LOG.debug(_("Reconfiguring VM instance to set the machine id "
- "with ip - %(ip_addr)s") % {'ip_addr': ip_v4['ip']},
+ LOG.debug(_("Reconfiguring VM instance to set the machine id"),
instance=instance)
reconfig_task = self._session._call_method(self._session._get_vim(),
"ReconfigVM_Task", vm_ref,
spec=machine_id_change_spec)
self._session._wait_for_task(instance['uuid'], reconfig_task)
- LOG.debug(_("Reconfigured VM instance to set the machine id "
- "with ip - %(ip_addr)s") % {'ip_addr': ip_v4['ip']},
+ LOG.debug(_("Reconfigured VM instance to set the machine id"),
instance=instance)
def _set_vnc_config(self, client_factory, instance, port, password):