Refactor get_iscsi_initiator to a common location
Refactor get_iscsi_initiator to a common location so that other drivers can use it, without reaching into virt/libvirt. This patch updates the current baremetal volume driver to the new shared location. Change-Id: I30539f4bb917e486739f797bb6a9579e1cdffd22
This commit is contained in:
		
				
					committed by
					
						
						Lucas Alvares Gomes
					
				
			
			
				
	
			
			
			
						parent
						
							3cd02fc87a
						
					
				
				
					commit
					33974ed47a
				
			@@ -6988,28 +6988,6 @@ class NWFilterTestCase(test.TestCase):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class LibvirtUtilsTestCase(test.TestCase):
 | 
			
		||||
    def test_get_iscsi_initiator(self):
 | 
			
		||||
        self.mox.StubOutWithMock(utils, 'execute')
 | 
			
		||||
        initiator = 'fake.initiator.iqn'
 | 
			
		||||
        rval = ("junk\nInitiatorName=%s\njunk\n" % initiator, None)
 | 
			
		||||
        utils.execute('cat', '/etc/iscsi/initiatorname.iscsi',
 | 
			
		||||
                      run_as_root=True).AndReturn(rval)
 | 
			
		||||
        # Start test
 | 
			
		||||
        self.mox.ReplayAll()
 | 
			
		||||
        result = libvirt_utils.get_iscsi_initiator()
 | 
			
		||||
        self.assertEqual(initiator, result)
 | 
			
		||||
 | 
			
		||||
    def test_get_missing_iscsi_initiator(self):
 | 
			
		||||
        self.mox.StubOutWithMock(utils, 'execute')
 | 
			
		||||
        file_path = '/etc/iscsi/initiatorname.iscsi'
 | 
			
		||||
        utils.execute('cat', file_path, run_as_root=True).AndRaise(
 | 
			
		||||
            exception.FileNotFound(file_path=file_path)
 | 
			
		||||
        )
 | 
			
		||||
        # Start test
 | 
			
		||||
        self.mox.ReplayAll()
 | 
			
		||||
        result = libvirt_utils.get_iscsi_initiator()
 | 
			
		||||
        self.assertIsNone(result)
 | 
			
		||||
 | 
			
		||||
    def test_create_image(self):
 | 
			
		||||
        self.mox.StubOutWithMock(utils, 'execute')
 | 
			
		||||
        utils.execute('qemu-img', 'create', '-f', 'raw',
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										47
									
								
								nova/tests/virt/test_volumeutils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								nova/tests/virt/test_volumeutils.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
# Copyright 2014 Hewlett-Packard Development Company, L.P.
 | 
			
		||||
# Copyright 2012 University Of Minho
 | 
			
		||||
# Copyright 2010 OpenStack Foundation
 | 
			
		||||
#
 | 
			
		||||
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
 | 
			
		||||
#    not use this file except in compliance with the License. You may obtain
 | 
			
		||||
#    a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#         http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
#    Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
#    License for the specific language governing permissions and limitations
 | 
			
		||||
#    under the License.
 | 
			
		||||
"""
 | 
			
		||||
Tests fot virt volumeutils.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
from nova import exception
 | 
			
		||||
from nova import test
 | 
			
		||||
from nova import utils
 | 
			
		||||
from nova.virt import volumeutils
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class VolumeUtilsTestCase(test.TestCase):
 | 
			
		||||
    def test_get_iscsi_initiator(self):
 | 
			
		||||
        self.mox.StubOutWithMock(utils, 'execute')
 | 
			
		||||
        initiator = 'fake.initiator.iqn'
 | 
			
		||||
        rval = ("junk\nInitiatorName=%s\njunk\n" % initiator, None)
 | 
			
		||||
        utils.execute('cat', '/etc/iscsi/initiatorname.iscsi',
 | 
			
		||||
                      run_as_root=True).AndReturn(rval)
 | 
			
		||||
        # Start test
 | 
			
		||||
        self.mox.ReplayAll()
 | 
			
		||||
        result = volumeutils.get_iscsi_initiator()
 | 
			
		||||
        self.assertEqual(initiator, result)
 | 
			
		||||
 | 
			
		||||
    def test_get_missing_iscsi_initiator(self):
 | 
			
		||||
        self.mox.StubOutWithMock(utils, 'execute')
 | 
			
		||||
        file_path = '/etc/iscsi/initiatorname.iscsi'
 | 
			
		||||
        utils.execute('cat', file_path, run_as_root=True).AndRaise(
 | 
			
		||||
            exception.FileNotFound(file_path=file_path)
 | 
			
		||||
        )
 | 
			
		||||
        # Start test
 | 
			
		||||
        self.mox.ReplayAll()
 | 
			
		||||
        result = volumeutils.get_iscsi_initiator()
 | 
			
		||||
        self.assertIsNone(result)
 | 
			
		||||
@@ -28,7 +28,7 @@ from nova.openstack.common import log as logging
 | 
			
		||||
from nova.openstack.common import processutils
 | 
			
		||||
from nova import utils
 | 
			
		||||
from nova.virt.baremetal import db as bmdb
 | 
			
		||||
from nova.virt.libvirt import utils as libvirt_utils
 | 
			
		||||
from nova.virt import volumeutils
 | 
			
		||||
 | 
			
		||||
opts = [
 | 
			
		||||
    cfg.BoolOpt('use_unsafe_iscsi',
 | 
			
		||||
@@ -190,7 +190,7 @@ class VolumeDriver(object):
 | 
			
		||||
 | 
			
		||||
    def get_volume_connector(self, instance):
 | 
			
		||||
        if not self._initiator:
 | 
			
		||||
            self._initiator = libvirt_utils.get_iscsi_initiator()
 | 
			
		||||
            self._initiator = volumeutils.get_iscsi_initiator()
 | 
			
		||||
            if not self._initiator:
 | 
			
		||||
                LOG.warn(_('Could not determine iscsi initiator name'),
 | 
			
		||||
                         instance=instance)
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,7 @@ from nova.openstack.common import processutils
 | 
			
		||||
from nova.openstack.common import units
 | 
			
		||||
from nova import utils
 | 
			
		||||
from nova.virt import images
 | 
			
		||||
from nova.virt import volumeutils
 | 
			
		||||
 | 
			
		||||
libvirt_opts = [
 | 
			
		||||
    cfg.BoolOpt('snapshot_compression',
 | 
			
		||||
@@ -53,17 +54,7 @@ def execute(*args, **kwargs):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_iscsi_initiator():
 | 
			
		||||
    """Get iscsi initiator name for this machine."""
 | 
			
		||||
    # NOTE(vish) openiscsi stores initiator name in a file that
 | 
			
		||||
    #            needs root permission to read.
 | 
			
		||||
    try:
 | 
			
		||||
        contents = utils.read_file_as_root('/etc/iscsi/initiatorname.iscsi')
 | 
			
		||||
    except exception.FileNotFound:
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    for l in contents.split('\n'):
 | 
			
		||||
        if l.startswith('InitiatorName='):
 | 
			
		||||
            return l[l.index('=') + 1:].strip()
 | 
			
		||||
    return volumeutils.get_iscsi_initiator()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_fc_hbas():
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								nova/virt/volumeutils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								nova/virt/volumeutils.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
# Copyright 2014 Hewlett-Packard Development Company, L.P.
 | 
			
		||||
# All Rights Reserved.
 | 
			
		||||
#
 | 
			
		||||
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
 | 
			
		||||
#    not use this file except in compliance with the License. You may obtain
 | 
			
		||||
#    a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#         http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
#    Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
#    License for the specific language governing permissions and limitations
 | 
			
		||||
#    under the License.
 | 
			
		||||
"""
 | 
			
		||||
Volume utilities for virt drivers.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
from nova import exception
 | 
			
		||||
from nova import utils
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_iscsi_initiator():
 | 
			
		||||
    """Get iscsi initiator name for this machine."""
 | 
			
		||||
    # NOTE(vish) openiscsi stores initiator name in a file that
 | 
			
		||||
    #            needs root permission to read.
 | 
			
		||||
    try:
 | 
			
		||||
        contents = utils.read_file_as_root('/etc/iscsi/initiatorname.iscsi')
 | 
			
		||||
    except exception.FileNotFound:
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    for l in contents.split('\n'):
 | 
			
		||||
        if l.startswith('InitiatorName='):
 | 
			
		||||
            return l[l.index('=') + 1:].strip()
 | 
			
		||||
		Reference in New Issue
	
	Block a user