summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorYoshiaki Tamura <yoshi@midokura.jp>2011-07-20 16:18:31 +0900
committerYoshiaki Tamura <yoshi@midokura.jp>2011-07-20 16:18:31 +0900
commita2b07be9fb30321eb35ba7b76fac5588c8c06300 (patch)
treeb2b987fa287607b6627f52bfe8f40dbfcfd966cb /nova
parentb8b96769bfc49e75d2eee3ae561e4e9ee7615473 (diff)
Refactor device type checking.
Modify duplicated logics to use newly added _get_volume_device_info().
Diffstat (limited to 'nova')
-rw-r--r--nova/virt/libvirt.xml.template2
-rw-r--r--nova/virt/libvirt/connection.py31
2 files changed, 17 insertions, 16 deletions
diff --git a/nova/virt/libvirt.xml.template b/nova/virt/libvirt.xml.template
index 36d8c5aaa..ea62524cf 100644
--- a/nova/virt/libvirt.xml.template
+++ b/nova/virt/libvirt.xml.template
@@ -85,7 +85,7 @@
<disk type='${vol.type}'>
<driver type='raw'/>
#if $vol.type == 'network'
- <source protocol='${vol.protocol}' name='${vol.device_path}'/>
+ <source protocol='${vol.protocol}' name='${vol.name}'/>
#else
<source dev='${vol.device_path}'/>
#end if
diff --git a/nova/virt/libvirt/connection.py b/nova/virt/libvirt/connection.py
index 3168bb9df..ae29b50c6 100644
--- a/nova/virt/libvirt/connection.py
+++ b/nova/virt/libvirt/connection.py
@@ -335,21 +335,20 @@ class LibvirtConnection(driver.ComputeDriver):
def attach_volume(self, instance_name, device_path, mountpoint):
virt_dom = self._lookup_by_name(instance_name)
mount_device = mountpoint.rpartition("/")[2]
- if device_path.startswith('/dev/'):
+ (type, protocol, name) = \
+ self._get_volume_device_info(vol['device_path'])
+ if type == 'block':
xml = """<disk type='block'>
<driver name='qemu' type='raw'/>
<source dev='%s'/>
<target dev='%s' bus='virtio'/>
</disk>""" % (device_path, mount_device)
- elif ':' in device_path:
- (protocol, name) = device_path.split(':')
+ elif type == 'network':
xml = """<disk type='network'>
<driver name='qemu' type='raw'/>
<source protocol='%s' name='%s'/>
<target dev='%s' bus='virtio'/>
- </disk>""" % (protocol,
- name,
- mount_device)
+ </disk>""" % (protocol, name, mount_device)
else:
raise exception.InvalidDevicePath(path=device_path)
@@ -972,6 +971,15 @@ class LibvirtConnection(driver.ComputeDriver):
return False
@exception.wrap_exception
+ def _get_volume_device_info(self, device_path):
+ if device_path.startswith('/dev/'):
+ return ('block', None, None)
+ elif ':' in device_path:
+ (protocol, name) = device_path.split(':')
+ return ('network', protocol, name)
+ else:
+ raise exception.InvalidDevicePath(path=device_path)
+
def _prepare_xml_info(self, instance, rescue=False, network_info=None,
block_device_mapping=None):
block_device_mapping = block_device_mapping or []
@@ -994,15 +1002,8 @@ class LibvirtConnection(driver.ComputeDriver):
for vol in block_device_mapping:
vol['mount_device'] = _strip_dev(vol['mount_device'])
- if vol['device_path'].startswith('/dev/'):
- vol['type'] = 'block'
- elif ':' in vol['device_path']:
- (protocol, name) = vol['device_path'].split(':')
- vol['type'] = 'network'
- vol['protocol'] = protocol
- vol['device_path'] = name
- else:
- raise exception.InvalidDevicePath(path=vol['device_path'])
+ (vol['type'], vol['protocol'], vol['name']) = \
+ self._get_volume_device_info(vol['device_path'])
ebs_root = self._volume_in_mapping(self.root_mount_device,
block_device_mapping)