diff --git a/nova/tests/unit/virt/libvirt/test_volume.py b/nova/tests/unit/virt/libvirt/test_volume.py index f57751734d64..2d33e4c139f2 100644 --- a/nova/tests/unit/virt/libvirt/test_volume.py +++ b/nova/tests/unit/virt/libvirt/test_volume.py @@ -1350,3 +1350,17 @@ Setting up iSCSI targets: unused export_string, export_mnt_base), ('umount', export_mnt_base)] self.assertEqual(expected_commands, self.executes) + + def test_libvirt_gpfs_driver_get_config(self): + libvirt_driver = volume.LibvirtGPFSVolumeDriver(self.fake_conn) + connection_info = { + 'driver_volume_type': 'gpfs', + 'data': { + 'device_path': '/gpfs/foo', + }, + 'serial': 'fake_serial', + } + conf = libvirt_driver.get_config(connection_info, self.disk_info) + tree = conf.format_dom() + self.assertEqual('file', tree.get('type')) + self.assertEqual('fake_serial', tree.find('./serial').text) diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 0834ba1498ee..fc25f197bb6c 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -180,6 +180,8 @@ libvirt_opts = [ 'LibvirtFibreChannelVolumeDriver', 'scality=' 'nova.virt.libvirt.volume.LibvirtScalityVolumeDriver', + 'gpfs=' + 'nova.virt.libvirt.volume.LibvirtGPFSVolumeDriver', ], help='DEPRECATED. Libvirt handlers for remote volumes. ' 'This option is deprecated and will be removed in the ' diff --git a/nova/virt/libvirt/volume.py b/nova/virt/libvirt/volume.py index 9ee96881557e..8698b9222b24 100644 --- a/nova/virt/libvirt/volume.py +++ b/nova/virt/libvirt/volume.py @@ -1252,3 +1252,18 @@ class LibvirtScalityVolumeDriver(LibvirtBaseVolumeDriver): msg = _LW("Cannot mount Scality SOFS, check syslog for errors") LOG.warn(msg) raise exception.NovaException(msg) + + +class LibvirtGPFSVolumeDriver(LibvirtBaseVolumeDriver): + """Class for volumes backed by gpfs volume.""" + def __init__(self, connection): + super(LibvirtGPFSVolumeDriver, + self).__init__(connection, is_block_dev=False) + + def get_config(self, connection_info, disk_info): + """Returns xml for libvirt.""" + conf = super(LibvirtGPFSVolumeDriver, + self).get_config(connection_info, disk_info) + conf.source_type = "file" + conf.source_path = connection_info['data']['device_path'] + return conf