Merge "NetApp bug fix for multibackend scenario."
This commit is contained in:
commit
8d038a0f59
@ -30,7 +30,9 @@ from lxml import etree
|
||||
from cinder.exception import VolumeBackendAPIException
|
||||
from cinder.openstack.common import log as logging
|
||||
from cinder import test
|
||||
from cinder.volume import configuration as conf
|
||||
from cinder.volume.drivers.netapp import iscsi
|
||||
from cinder.volume.drivers.netapp.iscsi import netapp_opts
|
||||
|
||||
|
||||
LOG = logging.getLogger("cinder.volume.driver")
|
||||
@ -596,6 +598,12 @@ iter_count = 0
|
||||
iter_table = {}
|
||||
|
||||
|
||||
def create_configuration():
|
||||
configuration = conf.Configuration(None)
|
||||
configuration.append_config_values(netapp_opts)
|
||||
return configuration
|
||||
|
||||
|
||||
class FakeDfmServerHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
||||
"""HTTP handler that fakes enough stuff to allow the driver to run."""
|
||||
|
||||
@ -979,7 +987,7 @@ class NetAppDriverTestCase(test.TestCase):
|
||||
super(NetAppDriverTestCase, self).setUp()
|
||||
self.tempdir = tempfile.mkdtemp()
|
||||
self.flags(lock_path=self.tempdir)
|
||||
driver = iscsi.NetAppISCSIDriver()
|
||||
driver = iscsi.NetAppISCSIDriver(configuration=create_configuration())
|
||||
self.stubs.Set(httplib, 'HTTPConnection', FakeHTTPConnection)
|
||||
driver._create_client(wsdl_url='http://localhost:8088/dfm.wsdl',
|
||||
login='root', password='password',
|
||||
@ -1403,7 +1411,8 @@ class NetAppCmodeISCSIDriverTestCase(test.TestCase):
|
||||
self._custom_setup()
|
||||
|
||||
def _custom_setup(self):
|
||||
driver = iscsi.NetAppCmodeISCSIDriver()
|
||||
driver = iscsi.NetAppCmodeISCSIDriver(
|
||||
configuration=create_configuration())
|
||||
self.stubs.Set(httplib, 'HTTPConnection', FakeCmodeHTTPConnection)
|
||||
driver._create_client(wsdl_url='http://localhost:8080/ntap_cloud.wsdl',
|
||||
login='root', password='password',
|
||||
@ -1849,7 +1858,8 @@ class NetAppDirectCmodeISCSIDriverTestCase(NetAppCmodeISCSIDriverTestCase):
|
||||
super(NetAppDirectCmodeISCSIDriverTestCase, self).setUp()
|
||||
|
||||
def _custom_setup(self):
|
||||
driver = iscsi.NetAppDirectCmodeISCSIDriver()
|
||||
driver = iscsi.NetAppDirectCmodeISCSIDriver(
|
||||
configuration=create_configuration())
|
||||
self.stubs.Set(httplib, 'HTTPConnection',
|
||||
FakeDirectCmodeHTTPConnection)
|
||||
driver._create_client(transport_type='http',
|
||||
@ -2280,7 +2290,8 @@ class NetAppDirect7modeISCSIDriverTestCase_NV(
|
||||
super(NetAppDirect7modeISCSIDriverTestCase_NV, self).setUp()
|
||||
|
||||
def _custom_setup(self):
|
||||
driver = iscsi.NetAppDirect7modeISCSIDriver()
|
||||
driver = iscsi.NetAppDirect7modeISCSIDriver(
|
||||
configuration=create_configuration())
|
||||
self.stubs.Set(httplib,
|
||||
'HTTPConnection', FakeDirect7modeHTTPConnection)
|
||||
driver._create_client(transport_type='http',
|
||||
@ -2320,7 +2331,8 @@ class NetAppDirect7modeISCSIDriverTestCase_WV(
|
||||
super(NetAppDirect7modeISCSIDriverTestCase_WV, self).setUp()
|
||||
|
||||
def _custom_setup(self):
|
||||
driver = iscsi.NetAppDirect7modeISCSIDriver()
|
||||
driver = iscsi.NetAppDirect7modeISCSIDriver(
|
||||
configuration=create_configuration())
|
||||
self.stubs.Set(httplib, 'HTTPConnection',
|
||||
FakeDirect7modeHTTPConnection)
|
||||
driver._create_client(transport_type='http',
|
||||
|
@ -22,7 +22,6 @@ from cinder import test
|
||||
|
||||
from cinder.volume import configuration as conf
|
||||
from cinder.volume.drivers.netapp import api
|
||||
from cinder.volume.drivers.netapp import iscsi
|
||||
from cinder.volume.drivers.netapp import nfs as netapp_nfs
|
||||
from cinder.volume.drivers import nfs
|
||||
from lxml import etree
|
||||
@ -81,7 +80,7 @@ class NetappNfsDriverTestCase(test.TestCase):
|
||||
def setUp(self):
|
||||
self._mox = mox.Mox()
|
||||
self._driver = netapp_nfs.NetAppNFSDriver(
|
||||
configuration=create_configuration())
|
||||
configuration=create_configuration())
|
||||
|
||||
def tearDown(self):
|
||||
self._mox.UnsetStubs()
|
||||
@ -95,13 +94,17 @@ class NetappNfsDriverTestCase(test.TestCase):
|
||||
'netapp_server_hostname',
|
||||
'netapp_server_port']
|
||||
|
||||
# set required flags
|
||||
for flag in required_flags:
|
||||
setattr(drv.configuration, flag, None)
|
||||
|
||||
# check exception raises when flags are not set
|
||||
self.assertRaises(exception.CinderException,
|
||||
drv.check_for_setup_error)
|
||||
|
||||
# set required flags
|
||||
for flag in required_flags:
|
||||
setattr(iscsi.FLAGS, flag, 'val')
|
||||
setattr(drv.configuration, flag, 'val')
|
||||
|
||||
mox.StubOutWithMock(nfs.NfsDriver, 'check_for_setup_error')
|
||||
nfs.NfsDriver.check_for_setup_error()
|
||||
@ -113,17 +116,17 @@ class NetappNfsDriverTestCase(test.TestCase):
|
||||
|
||||
# restore initial FLAGS
|
||||
for flag in required_flags:
|
||||
delattr(iscsi.FLAGS, flag)
|
||||
delattr(drv.configuration, flag)
|
||||
|
||||
def test_do_setup(self):
|
||||
mox = self._mox
|
||||
drv = self._driver
|
||||
|
||||
mox.StubOutWithMock(drv, 'check_for_setup_error')
|
||||
mox.StubOutWithMock(netapp_nfs.NetAppNFSDriver, '_get_client')
|
||||
mox.StubOutWithMock(drv, '_get_client')
|
||||
|
||||
drv.check_for_setup_error()
|
||||
netapp_nfs.NetAppNFSDriver._get_client()
|
||||
drv._get_client()
|
||||
|
||||
mox.ReplayAll()
|
||||
|
||||
@ -240,7 +243,8 @@ class NetappNfsDriverTestCase(test.TestCase):
|
||||
def test_successfull_clone_volume(self):
|
||||
drv = self._driver
|
||||
mox = self._prepare_clone_mock('passed')
|
||||
|
||||
# set required flags
|
||||
setattr(drv.configuration, 'synchronous_snapshot_create', False)
|
||||
mox.ReplayAll()
|
||||
|
||||
volume_name = 'volume_name'
|
||||
@ -287,7 +291,7 @@ class NetappCmodeNfsDriverTestCase(test.TestCase):
|
||||
|
||||
def _custom_setup(self):
|
||||
self._driver = netapp_nfs.NetAppCmodeNfsDriver(
|
||||
configuration=create_configuration())
|
||||
configuration=create_configuration())
|
||||
|
||||
def tearDown(self):
|
||||
self._mox.UnsetStubs()
|
||||
@ -302,13 +306,16 @@ class NetappCmodeNfsDriverTestCase(test.TestCase):
|
||||
'netapp_server_hostname',
|
||||
'netapp_server_port']
|
||||
|
||||
# set required flags
|
||||
for flag in required_flags:
|
||||
setattr(drv.configuration, flag, None)
|
||||
# check exception raises when flags are not set
|
||||
self.assertRaises(exception.CinderException,
|
||||
drv.check_for_setup_error)
|
||||
|
||||
# set required flags
|
||||
for flag in required_flags:
|
||||
setattr(iscsi.FLAGS, flag, 'val')
|
||||
setattr(drv.configuration, flag, 'val')
|
||||
|
||||
mox.ReplayAll()
|
||||
|
||||
@ -318,17 +325,17 @@ class NetappCmodeNfsDriverTestCase(test.TestCase):
|
||||
|
||||
# restore initial FLAGS
|
||||
for flag in required_flags:
|
||||
delattr(iscsi.FLAGS, flag)
|
||||
delattr(drv.configuration, flag)
|
||||
|
||||
def test_do_setup(self):
|
||||
mox = self._mox
|
||||
drv = self._driver
|
||||
|
||||
mox.StubOutWithMock(drv, 'check_for_setup_error')
|
||||
mox.StubOutWithMock(netapp_nfs.NetAppCmodeNfsDriver, '_get_client')
|
||||
mox.StubOutWithMock(drv, '_get_client')
|
||||
|
||||
drv.check_for_setup_error()
|
||||
netapp_nfs.NetAppCmodeNfsDriver._get_client()
|
||||
drv._get_client()
|
||||
|
||||
mox.ReplayAll()
|
||||
|
||||
@ -470,7 +477,7 @@ class NetappDirectCmodeNfsDriverTestCase(NetappCmodeNfsDriverTestCase):
|
||||
"""Test direct NetApp C Mode driver"""
|
||||
def _custom_setup(self):
|
||||
self._driver = netapp_nfs.NetAppDirectCmodeNfsDriver(
|
||||
configuration=create_configuration())
|
||||
configuration=create_configuration())
|
||||
|
||||
def test_check_for_setup_error(self):
|
||||
mox = self._mox
|
||||
@ -482,13 +489,16 @@ class NetappDirectCmodeNfsDriverTestCase(NetappCmodeNfsDriverTestCase):
|
||||
'netapp_server_hostname',
|
||||
'netapp_server_port']
|
||||
|
||||
# set required flags
|
||||
for flag in required_flags:
|
||||
setattr(drv.configuration, flag, None)
|
||||
# check exception raises when flags are not set
|
||||
self.assertRaises(exception.CinderException,
|
||||
drv.check_for_setup_error)
|
||||
|
||||
# set required flags
|
||||
for flag in required_flags:
|
||||
setattr(iscsi.FLAGS, flag, 'val')
|
||||
setattr(drv.configuration, flag, 'val')
|
||||
|
||||
mox.ReplayAll()
|
||||
|
||||
@ -498,19 +508,18 @@ class NetappDirectCmodeNfsDriverTestCase(NetappCmodeNfsDriverTestCase):
|
||||
|
||||
# restore initial FLAGS
|
||||
for flag in required_flags:
|
||||
delattr(iscsi.FLAGS, flag)
|
||||
delattr(drv.configuration, flag)
|
||||
|
||||
def test_do_setup(self):
|
||||
mox = self._mox
|
||||
drv = self._driver
|
||||
|
||||
mox.StubOutWithMock(drv, 'check_for_setup_error')
|
||||
mox.StubOutWithMock(netapp_nfs.NetAppDirectCmodeNfsDriver,
|
||||
'_get_client')
|
||||
mox.StubOutWithMock(drv, '_get_client')
|
||||
mox.StubOutWithMock(drv, '_do_custom_setup')
|
||||
|
||||
drv.check_for_setup_error()
|
||||
netapp_nfs.NetAppDirectNfsDriver._get_client()
|
||||
drv._get_client()
|
||||
drv._do_custom_setup(IgnoreArg())
|
||||
|
||||
mox.ReplayAll()
|
||||
@ -590,7 +599,7 @@ class NetappDirect7modeNfsDriverTestCase(NetappDirectCmodeNfsDriverTestCase):
|
||||
"""Test direct NetApp C Mode driver"""
|
||||
def _custom_setup(self):
|
||||
self._driver = netapp_nfs.NetAppDirect7modeNfsDriver(
|
||||
configuration=create_configuration())
|
||||
configuration=create_configuration())
|
||||
|
||||
def test_check_for_setup_error(self):
|
||||
mox = self._mox
|
||||
@ -602,13 +611,16 @@ class NetappDirect7modeNfsDriverTestCase(NetappDirectCmodeNfsDriverTestCase):
|
||||
'netapp_server_hostname',
|
||||
'netapp_server_port']
|
||||
|
||||
# set required flags
|
||||
for flag in required_flags:
|
||||
setattr(drv.configuration, flag, None)
|
||||
# check exception raises when flags are not set
|
||||
self.assertRaises(exception.CinderException,
|
||||
drv.check_for_setup_error)
|
||||
|
||||
# set required flags
|
||||
for flag in required_flags:
|
||||
setattr(iscsi.FLAGS, flag, 'val')
|
||||
setattr(drv.configuration, flag, 'val')
|
||||
|
||||
mox.ReplayAll()
|
||||
|
||||
@ -618,19 +630,18 @@ class NetappDirect7modeNfsDriverTestCase(NetappDirectCmodeNfsDriverTestCase):
|
||||
|
||||
# restore initial FLAGS
|
||||
for flag in required_flags:
|
||||
delattr(iscsi.FLAGS, flag)
|
||||
delattr(drv.configuration, flag)
|
||||
|
||||
def test_do_setup(self):
|
||||
mox = self._mox
|
||||
drv = self._driver
|
||||
|
||||
mox.StubOutWithMock(drv, 'check_for_setup_error')
|
||||
mox.StubOutWithMock(netapp_nfs.NetAppDirect7modeNfsDriver,
|
||||
'_get_client')
|
||||
mox.StubOutWithMock(drv, '_get_client')
|
||||
mox.StubOutWithMock(drv, '_do_custom_setup')
|
||||
|
||||
drv.check_for_setup_error()
|
||||
netapp_nfs.NetAppDirectNfsDriver._get_client()
|
||||
drv._get_client()
|
||||
drv._do_custom_setup(IgnoreArg())
|
||||
|
||||
mox.ReplayAll()
|
||||
|
@ -32,7 +32,6 @@ from suds import client
|
||||
from suds.sax import text
|
||||
|
||||
from cinder import exception
|
||||
from cinder import flags
|
||||
from cinder.openstack.common import lockutils
|
||||
from cinder.openstack.common import log as logging
|
||||
from cinder.volume import driver
|
||||
@ -85,9 +84,6 @@ netapp_opts = [
|
||||
help='Comma separated eligible volumes for provisioning on'
|
||||
' 7 mode'), ]
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
FLAGS.register_opts(netapp_opts)
|
||||
|
||||
|
||||
class DfmDataset(object):
|
||||
def __init__(self, id, name, project, type):
|
||||
@ -114,6 +110,7 @@ class NetAppISCSIDriver(driver.ISCSIDriver):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(NetAppISCSIDriver, self).__init__(*args, **kwargs)
|
||||
self.configuration.append_config_values(netapp_opts)
|
||||
self.discovered_luns = []
|
||||
self.discovered_datasets = []
|
||||
self.lun_table = {}
|
||||
@ -168,10 +165,10 @@ class NetAppISCSIDriver(driver.ISCSIDriver):
|
||||
required_flags = ['netapp_wsdl_url', 'netapp_login', 'netapp_password',
|
||||
'netapp_server_hostname', 'netapp_server_port']
|
||||
for flag in required_flags:
|
||||
if not getattr(FLAGS, flag, None):
|
||||
if not getattr(self.configuration, flag, None):
|
||||
raise exception.InvalidInput(reason=_('%s is not set') % flag)
|
||||
if not (FLAGS.netapp_storage_service or
|
||||
FLAGS.netapp_storage_service_prefix):
|
||||
if not (self.configuration.netapp_storage_service or
|
||||
self.configuration.netapp_storage_service_prefix):
|
||||
raise exception.InvalidInput(
|
||||
reason=_('Either '
|
||||
'netapp_storage_service or '
|
||||
@ -187,13 +184,15 @@ class NetAppISCSIDriver(driver.ISCSIDriver):
|
||||
"""
|
||||
self._check_flags()
|
||||
self._create_client(
|
||||
wsdl_url=FLAGS.netapp_wsdl_url,
|
||||
login=FLAGS.netapp_login, password=FLAGS.netapp_password,
|
||||
hostname=FLAGS.netapp_server_hostname,
|
||||
port=FLAGS.netapp_server_port, cache=True)
|
||||
self._set_storage_service(FLAGS.netapp_storage_service)
|
||||
self._set_storage_service_prefix(FLAGS.netapp_storage_service_prefix)
|
||||
self._set_vfiler(FLAGS.netapp_vfiler)
|
||||
wsdl_url=self.configuration.netapp_wsdl_url,
|
||||
login=self.configuration.netapp_login,
|
||||
password=self.configuration.netapp_password,
|
||||
hostname=self.configuration.netapp_server_hostname,
|
||||
port=self.configuration.netapp_server_port, cache=True)
|
||||
self._set_storage_service(self.configuration.netapp_storage_service)
|
||||
self._set_storage_service_prefix(
|
||||
self.configuration.netapp_storage_service_prefix)
|
||||
self._set_vfiler(self.configuration.netapp_vfiler)
|
||||
|
||||
def check_for_setup_error(self):
|
||||
"""Check that the driver is working and can communicate.
|
||||
@ -1154,6 +1153,7 @@ class NetAppCmodeISCSIDriver(driver.ISCSIDriver):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(NetAppCmodeISCSIDriver, self).__init__(*args, **kwargs)
|
||||
self.configuration.append_config_values(netapp_opts)
|
||||
self.lun_table = {}
|
||||
|
||||
def _create_client(self, **kwargs):
|
||||
@ -1178,7 +1178,7 @@ class NetAppCmodeISCSIDriver(driver.ISCSIDriver):
|
||||
required_flags = ['netapp_wsdl_url', 'netapp_login', 'netapp_password',
|
||||
'netapp_server_hostname', 'netapp_server_port']
|
||||
for flag in required_flags:
|
||||
if not getattr(FLAGS, flag, None):
|
||||
if not getattr(self.configuration, flag, None):
|
||||
msg = _('%s is not set') % flag
|
||||
raise exception.InvalidInput(data=msg)
|
||||
|
||||
@ -1191,10 +1191,11 @@ class NetAppCmodeISCSIDriver(driver.ISCSIDriver):
|
||||
"""
|
||||
self._check_flags()
|
||||
self._create_client(
|
||||
wsdl_url=FLAGS.netapp_wsdl_url,
|
||||
login=FLAGS.netapp_login, password=FLAGS.netapp_password,
|
||||
hostname=FLAGS.netapp_server_hostname,
|
||||
port=FLAGS.netapp_server_port, cache=True)
|
||||
wsdl_url=self.configuration.netapp_wsdl_url,
|
||||
login=self.configuration.netapp_login,
|
||||
password=self.configuration.netapp_password,
|
||||
hostname=self.configuration.netapp_server_hostname,
|
||||
port=self.configuration.netapp_server_port, cache=True)
|
||||
|
||||
def check_for_setup_error(self):
|
||||
"""Check that the driver is working and can communicate.
|
||||
@ -1504,6 +1505,7 @@ class NetAppDirectISCSIDriver(driver.ISCSIDriver):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(NetAppDirectISCSIDriver, self).__init__(*args, **kwargs)
|
||||
self.configuration.append_config_values(netapp_opts)
|
||||
self.lun_table = {}
|
||||
|
||||
def _create_client(self, **kwargs):
|
||||
@ -1532,7 +1534,7 @@ class NetAppDirectISCSIDriver(driver.ISCSIDriver):
|
||||
"""Ensure that the flags we care about are set."""
|
||||
required_flags = self.required_flags
|
||||
for flag in required_flags:
|
||||
if not getattr(FLAGS, flag, None):
|
||||
if not getattr(self.configuration, flag, None):
|
||||
msg = _('%s is not set') % flag
|
||||
raise exception.InvalidInput(data=msg)
|
||||
|
||||
@ -1545,10 +1547,11 @@ class NetAppDirectISCSIDriver(driver.ISCSIDriver):
|
||||
"""
|
||||
self._check_flags()
|
||||
self._create_client(
|
||||
transport_type=FLAGS.netapp_transport_type,
|
||||
login=FLAGS.netapp_login, password=FLAGS.netapp_password,
|
||||
hostname=FLAGS.netapp_server_hostname,
|
||||
port=FLAGS.netapp_server_port)
|
||||
transport_type=self.configuration.netapp_transport_type,
|
||||
login=self.configuration.netapp_login,
|
||||
password=self.configuration.netapp_password,
|
||||
hostname=self.configuration.netapp_server_hostname,
|
||||
port=self.configuration.netapp_server_port)
|
||||
self._do_custom_setup()
|
||||
|
||||
def check_for_setup_error(self):
|
||||
@ -1728,7 +1731,8 @@ class NetAppDirectISCSIDriver(driver.ISCSIDriver):
|
||||
|
||||
def _create_lun_on_eligible_vol(self, name, size, metadata):
|
||||
"""Creates an actual lun on filer."""
|
||||
req_size = float(size) * float(FLAGS.netapp_size_multiplier)
|
||||
req_size = float(size) *\
|
||||
float(self.configuration.netapp_size_multiplier)
|
||||
volume = self._get_avl_volume_by_size(req_size)
|
||||
if not volume:
|
||||
msg = _('Failed to get vol with required size for volume: %s')
|
||||
@ -1973,7 +1977,7 @@ class NetAppDirectCmodeISCSIDriver(NetAppDirectISCSIDriver):
|
||||
|
||||
def _do_custom_setup(self):
|
||||
"""Does custom setup for ontap cluster."""
|
||||
self.vserver = FLAGS.netapp_vserver
|
||||
self.vserver = self.configuration.netapp_vserver
|
||||
# Default values to run first api
|
||||
self.client.set_api_version(1, 15)
|
||||
(major, minor) = self._get_ontapi_version()
|
||||
@ -2264,8 +2268,8 @@ class NetAppDirect7modeISCSIDriver(NetAppDirectISCSIDriver):
|
||||
|
||||
def _do_custom_setup(self):
|
||||
"""Does custom setup depending on the type of filer."""
|
||||
self.vfiler = FLAGS.netapp_vfiler
|
||||
self.volume_list = FLAGS.netapp_volume_list
|
||||
self.vfiler = self.configuration.netapp_vfiler
|
||||
self.volume_list = self.configuration.netapp_volume_list
|
||||
if self.volume_list:
|
||||
self.volume_list = self.volume_list.split(',')
|
||||
self.volume_list = [el.strip() for el in self.volume_list]
|
||||
@ -2364,9 +2368,10 @@ class NetAppDirect7modeISCSIDriver(NetAppDirectISCSIDriver):
|
||||
def _create_lun_handle(self, metadata):
|
||||
"""Returns lun handle based on filer type."""
|
||||
if self.vfiler:
|
||||
owner = '%s:%s' % (FLAGS.netapp_server_hostname, self.vfiler)
|
||||
owner = '%s:%s' % (self.configuration.netapp_server_hostname,
|
||||
self.vfiler)
|
||||
else:
|
||||
owner = FLAGS.netapp_server_hostname
|
||||
owner = self.configuration.netapp_server_hostname
|
||||
return '%s:%s' % (owner, metadata['Path'])
|
||||
|
||||
def _get_lun_list(self):
|
||||
|
@ -26,7 +26,6 @@ import suds
|
||||
from suds.sax import text
|
||||
|
||||
from cinder import exception
|
||||
from cinder import flags
|
||||
from cinder.openstack.common import log as logging
|
||||
from cinder.volume.drivers.netapp.api import NaApiError
|
||||
from cinder.volume.drivers.netapp.api import NaElement
|
||||
@ -41,10 +40,6 @@ netapp_nfs_opts = [
|
||||
default=0,
|
||||
help='Does snapshot creation call returns immediately')]
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
FLAGS.register_opts(netapp_opts)
|
||||
FLAGS.register_opts(netapp_nfs_opts)
|
||||
|
||||
|
||||
class NetAppNFSDriver(nfs.NfsDriver):
|
||||
"""Executes commands relating to Volumes."""
|
||||
@ -53,6 +48,8 @@ class NetAppNFSDriver(nfs.NfsDriver):
|
||||
self._execute = None
|
||||
self._context = None
|
||||
super(NetAppNFSDriver, self).__init__(*args, **kwargs)
|
||||
self.configuration.append_config_values(netapp_opts)
|
||||
self.configuration.append_config_values(netapp_nfs_opts)
|
||||
|
||||
def set_execute(self, execute):
|
||||
self._execute = execute
|
||||
@ -60,11 +57,11 @@ class NetAppNFSDriver(nfs.NfsDriver):
|
||||
def do_setup(self, context):
|
||||
self._context = context
|
||||
self.check_for_setup_error()
|
||||
self._client = NetAppNFSDriver._get_client()
|
||||
self._client = self._get_client()
|
||||
|
||||
def check_for_setup_error(self):
|
||||
"""Returns an error if prerequisites aren't met"""
|
||||
NetAppNFSDriver._check_dfm_flags()
|
||||
self._check_dfm_flags()
|
||||
super(NetAppNFSDriver, self).check_for_setup_error()
|
||||
|
||||
def create_volume_from_snapshot(self, volume, snapshot):
|
||||
@ -98,8 +95,7 @@ class NetAppNFSDriver(nfs.NfsDriver):
|
||||
self._execute('rm', self._get_volume_path(nfs_mount, snapshot.name),
|
||||
run_as_root=True)
|
||||
|
||||
@staticmethod
|
||||
def _check_dfm_flags():
|
||||
def _check_dfm_flags(self):
|
||||
"""Raises error if any required configuration flag for OnCommand proxy
|
||||
is missing."""
|
||||
required_flags = ['netapp_wsdl_url',
|
||||
@ -108,17 +104,18 @@ class NetAppNFSDriver(nfs.NfsDriver):
|
||||
'netapp_server_hostname',
|
||||
'netapp_server_port']
|
||||
for flag in required_flags:
|
||||
if not getattr(FLAGS, flag, None):
|
||||
if not getattr(self.configuration, flag, None):
|
||||
raise exception.CinderException(_('%s is not set') % flag)
|
||||
|
||||
@staticmethod
|
||||
def _get_client():
|
||||
def _get_client(self):
|
||||
"""Creates SOAP _client for ONTAP-7 DataFabric Service."""
|
||||
client = suds.client.Client(FLAGS.netapp_wsdl_url,
|
||||
username=FLAGS.netapp_login,
|
||||
password=FLAGS.netapp_password)
|
||||
soap_url = 'http://%s:%s/apis/soap/v1' % (FLAGS.netapp_server_hostname,
|
||||
FLAGS.netapp_server_port)
|
||||
client = suds.client.Client(
|
||||
self.configuration.netapp_wsdl_url,
|
||||
username=self.configuration.netapp_login,
|
||||
password=self.configuration.netapp_password)
|
||||
soap_url = 'http://%s:%s/apis/soap/v1' % (
|
||||
self.configuration.netapp_server_hostname,
|
||||
self.configuration.netapp_server_port)
|
||||
client.set_options(location=soap_url)
|
||||
|
||||
return client
|
||||
@ -148,7 +145,8 @@ class NetAppNFSDriver(nfs.NfsDriver):
|
||||
resp = self._client.service.ApiProxy(Target=host_id,
|
||||
Request=request)
|
||||
|
||||
if resp.Status == 'passed' and FLAGS.synchronous_snapshot_create:
|
||||
if (resp.Status == 'passed' and
|
||||
self.configuration.synchronous_snapshot_create):
|
||||
clone_id = resp.Results['clone-id'][0]
|
||||
clone_id_info = clone_id['clone-id-info'][0]
|
||||
clone_operation_id = int(clone_id_info['clone-op-id'][0])
|
||||
@ -251,7 +249,7 @@ class NetAppNFSDriver(nfs.NfsDriver):
|
||||
return True
|
||||
except exception.ProcessExecutionError:
|
||||
tries = tries + 1
|
||||
if tries >= FLAGS.num_shell_tries:
|
||||
if tries >= self.configuration.num_shell_tries:
|
||||
raise
|
||||
LOG.exception(_("Recovering from a failed execute. "
|
||||
"Try number %s"), tries)
|
||||
@ -317,11 +315,11 @@ class NetAppCmodeNfsDriver (NetAppNFSDriver):
|
||||
def do_setup(self, context):
|
||||
self._context = context
|
||||
self.check_for_setup_error()
|
||||
self._client = NetAppCmodeNfsDriver._get_client()
|
||||
self._client = self._get_client()
|
||||
|
||||
def check_for_setup_error(self):
|
||||
"""Returns an error if prerequisites aren't met"""
|
||||
NetAppCmodeNfsDriver._check_flags()
|
||||
self._check_flags()
|
||||
|
||||
def _clone_volume(self, volume_name, clone_name, volume_id):
|
||||
"""Clones mounted volume with NetApp Cloud Services"""
|
||||
@ -333,8 +331,7 @@ class NetAppCmodeNfsDriver (NetAppNFSDriver):
|
||||
self._client.service.CloneNasFile(host_ip, export_path,
|
||||
volume_name, clone_name)
|
||||
|
||||
@staticmethod
|
||||
def _check_flags():
|
||||
def _check_flags(self):
|
||||
"""Raises error if any required configuration flag for NetApp Cloud
|
||||
Webservices is missing."""
|
||||
required_flags = ['netapp_wsdl_url',
|
||||
@ -343,15 +340,15 @@ class NetAppCmodeNfsDriver (NetAppNFSDriver):
|
||||
'netapp_server_hostname',
|
||||
'netapp_server_port']
|
||||
for flag in required_flags:
|
||||
if not getattr(FLAGS, flag, None):
|
||||
if not getattr(self.configuration, flag, None):
|
||||
raise exception.CinderException(_('%s is not set') % flag)
|
||||
|
||||
@staticmethod
|
||||
def _get_client():
|
||||
def _get_client(self):
|
||||
"""Creates SOAP _client for NetApp Cloud service."""
|
||||
client = suds.client.Client(FLAGS.netapp_wsdl_url,
|
||||
username=FLAGS.netapp_login,
|
||||
password=FLAGS.netapp_password)
|
||||
client = suds.client.Client(
|
||||
self.configuration.netapp_wsdl_url,
|
||||
username=self.configuration.netapp_login,
|
||||
password=self.configuration.netapp_password)
|
||||
return client
|
||||
|
||||
def get_volume_stats(self, refresh=False):
|
||||
@ -389,19 +386,18 @@ class NetAppDirectNfsDriver (NetAppNFSDriver):
|
||||
def do_setup(self, context):
|
||||
self._context = context
|
||||
self.check_for_setup_error()
|
||||
self._client = NetAppDirectNfsDriver._get_client()
|
||||
self._client = self._get_client()
|
||||
self._do_custom_setup(self._client)
|
||||
|
||||
def check_for_setup_error(self):
|
||||
"""Returns an error if prerequisites aren't met"""
|
||||
NetAppDirectNfsDriver._check_flags()
|
||||
self._check_flags()
|
||||
|
||||
def _clone_volume(self, volume_name, clone_name, volume_id):
|
||||
"""Clones mounted volume on NetApp filer"""
|
||||
raise NotImplementedError()
|
||||
|
||||
@staticmethod
|
||||
def _check_flags():
|
||||
def _check_flags(self):
|
||||
"""Raises error if any required configuration flag for NetApp
|
||||
filer is missing."""
|
||||
required_flags = ['netapp_login',
|
||||
@ -410,18 +406,18 @@ class NetAppDirectNfsDriver (NetAppNFSDriver):
|
||||
'netapp_server_port',
|
||||
'netapp_transport_type']
|
||||
for flag in required_flags:
|
||||
if not getattr(FLAGS, flag, None):
|
||||
if not getattr(self.configuration, flag, None):
|
||||
raise exception.CinderException(_('%s is not set') % flag)
|
||||
|
||||
@staticmethod
|
||||
def _get_client():
|
||||
def _get_client(self):
|
||||
"""Creates NetApp api client."""
|
||||
client = NaServer(host=FLAGS.netapp_server_hostname,
|
||||
server_type=NaServer.SERVER_TYPE_FILER,
|
||||
transport_type=FLAGS.netapp_transport_type,
|
||||
style=NaServer.STYLE_LOGIN_PASSWORD,
|
||||
username=FLAGS.netapp_login,
|
||||
password=FLAGS.netapp_password)
|
||||
client = NaServer(
|
||||
host=self.configuration.netapp_server_hostname,
|
||||
server_type=NaServer.SERVER_TYPE_FILER,
|
||||
transport_type=self.configuration.netapp_transport_type,
|
||||
style=NaServer.STYLE_LOGIN_PASSWORD,
|
||||
username=self.configuration.netapp_login,
|
||||
password=self.configuration.netapp_password)
|
||||
return client
|
||||
|
||||
def _do_custom_setup(self, client):
|
||||
|
Loading…
x
Reference in New Issue
Block a user