]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
NetApp fix to set non default server port in api
authorAndrew Kerr <andrew.kerr@netapp.com>
Thu, 29 May 2014 03:16:23 +0000 (08:46 +0530)
committerAndrew Kerr <andrew.kerr@netapp.com>
Wed, 15 Oct 2014 16:34:56 +0000 (16:34 +0000)
The non default netapp_server_port config option was not
getting set in api even if specified in cinder.conf. Its
made non mandatory and set if specified in the configuration.

Change-Id: I62943427e0caac2742cce4ce56c1a49917f9210d
Closes-bug: #1322379

cinder/tests/test_netapp.py
cinder/tests/test_netapp_eseries_iscsi.py
cinder/tests/test_netapp_nfs.py
cinder/volume/drivers/netapp/eseries/iscsi.py
cinder/volume/drivers/netapp/iscsi.py
cinder/volume/drivers/netapp/nfs.py
cinder/volume/drivers/netapp/options.py
etc/cinder/cinder.conf.sample

index 0a77ad26693a797b895229c15ae9d744a746711d..ac4442df1dc902cfb9dce8d184f476cf48073019 100644 (file)
@@ -571,13 +571,58 @@ class NetAppDirectCmodeISCSIDriverTestCase(test.TestCase):
         configuration.netapp_password = 'pass'
         configuration.netapp_server_hostname = '127.0.0.1'
         configuration.netapp_transport_type = 'http'
-        configuration.netapp_server_port = '80'
+        configuration.netapp_server_port = None
         configuration.netapp_vserver = 'openstack'
         return configuration
 
     def test_connect(self):
         self.driver.check_for_setup_error()
 
+    def test_do_setup_all_default(self):
+        configuration = self._set_config(create_configuration())
+        driver = common.NetAppDriver(configuration=configuration)
+        driver._do_custom_setup = mock.Mock()
+        driver.do_setup(context='')
+        self.assertEqual('80', driver.client.get_port())
+        self.assertEqual('http', driver.client.get_transport_type())
+
+    def test_do_setup_http_default_port(self):
+        configuration = self._set_config(create_configuration())
+        configuration.netapp_transport_type = 'http'
+        driver = common.NetAppDriver(configuration=configuration)
+        driver._do_custom_setup = mock.Mock()
+        driver.do_setup(context='')
+        self.assertEqual('80', driver.client.get_port())
+        self.assertEqual('http', driver.client.get_transport_type())
+
+    def test_do_setup_https_default_port(self):
+        configuration = self._set_config(create_configuration())
+        configuration.netapp_transport_type = 'https'
+        driver = common.NetAppDriver(configuration=configuration)
+        driver._do_custom_setup = mock.Mock()
+        driver.do_setup(context='')
+        self.assertEqual('443', driver.client.get_port())
+        self.assertEqual('https', driver.client.get_transport_type())
+
+    def test_do_setup_http_non_default_port(self):
+        configuration = self._set_config(create_configuration())
+        configuration.netapp_server_port = 81
+        driver = common.NetAppDriver(configuration=configuration)
+        driver._do_custom_setup = mock.Mock()
+        driver.do_setup(context='')
+        self.assertEqual('81', driver.client.get_port())
+        self.assertEqual('http', driver.client.get_transport_type())
+
+    def test_do_setup_https_non_default_port(self):
+        configuration = self._set_config(create_configuration())
+        configuration.netapp_transport_type = 'https'
+        configuration.netapp_server_port = 446
+        driver = common.NetAppDriver(configuration=configuration)
+        driver._do_custom_setup = mock.Mock()
+        driver.do_setup(context='')
+        self.assertEqual('446', driver.client.get_port())
+        self.assertEqual('https', driver.client.get_transport_type())
+
     def test_create_destroy(self):
         self.driver.create_volume(self.volume)
         self.driver.delete_volume(self.volume)
@@ -1158,7 +1203,7 @@ class NetAppDirect7modeISCSIDriverTestCase_NV(
         configuration.netapp_password = 'pass'
         configuration.netapp_server_hostname = '127.0.0.1'
         configuration.netapp_transport_type = 'http'
-        configuration.netapp_server_port = '80'
+        configuration.netapp_server_port = None
         return configuration
 
     def test_create_on_select_vol(self):
@@ -1208,7 +1253,7 @@ class NetAppDirect7modeISCSIDriverTestCase_WV(
         configuration.netapp_password = 'pass'
         configuration.netapp_server_hostname = '127.0.0.1'
         configuration.netapp_transport_type = 'http'
-        configuration.netapp_server_port = '80'
+        configuration.netapp_server_port = None
         configuration.netapp_vfiler = 'openstack'
         return configuration
 
index e9b6a2ced3a5e38f31dc6c0a54c1dc343138298c..6c6cf5d06b0793b0f468ff6e4b59014a1c26fd04 100644 (file)
@@ -22,6 +22,7 @@ import re
 
 import mock
 import requests
+import six.moves.urllib.parse as urlparse
 
 from cinder import exception
 from cinder.openstack.common import log as logging
@@ -649,7 +650,7 @@ class NetAppEseriesIscsiDriverTestCase(test.TestCase):
         configuration.netapp_storage_protocol = 'iscsi'
         configuration.netapp_transport_type = 'http'
         configuration.netapp_server_hostname = '127.0.0.1'
-        configuration.netapp_server_port = '80'
+        configuration.netapp_server_port = None
         configuration.netapp_webservice_path = '/devmgr/vn'
         configuration.netapp_controller_ips = '127.0.0.2,127.0.0.3'
         configuration.netapp_sa_password = 'pass1234'
@@ -934,3 +935,63 @@ class NetAppEseriesIscsiDriverTestCase(test.TestCase):
         driver = common.NetAppDriver(configuration=configuration)
         self.assertRaises(exception.NetAppDriverException,
                           driver.check_for_setup_error)
+
+    def test_do_setup_all_default(self):
+        configuration = self._set_config(create_configuration())
+        driver = common.NetAppDriver(configuration=configuration)
+        driver._check_mode_get_or_register_storage_system = mock.Mock()
+        driver.do_setup(context='context')
+        url = urlparse.urlparse(driver._client._endpoint)
+        port = url.port
+        scheme = url.scheme
+        self.assertEqual(8080, port)
+        self.assertEqual('http', scheme)
+
+    def test_do_setup_http_default_port(self):
+        configuration = self._set_config(create_configuration())
+        configuration.netapp_transport_type = 'http'
+        driver = common.NetAppDriver(configuration=configuration)
+        driver._check_mode_get_or_register_storage_system = mock.Mock()
+        driver.do_setup(context='context')
+        url = urlparse.urlparse(driver._client._endpoint)
+        port = url.port
+        scheme = url.scheme
+        self.assertEqual(8080, port)
+        self.assertEqual('http', scheme)
+
+    def test_do_setup_https_default_port(self):
+        configuration = self._set_config(create_configuration())
+        configuration.netapp_transport_type = 'https'
+        driver = common.NetAppDriver(configuration=configuration)
+        driver._check_mode_get_or_register_storage_system = mock.Mock()
+        driver.do_setup(context='context')
+        url = urlparse.urlparse(driver._client._endpoint)
+        port = url.port
+        scheme = url.scheme
+        self.assertEqual(8443, port)
+        self.assertEqual('https', scheme)
+
+    def test_do_setup_http_non_default_port(self):
+        configuration = self._set_config(create_configuration())
+        configuration.netapp_server_port = 81
+        driver = common.NetAppDriver(configuration=configuration)
+        driver._check_mode_get_or_register_storage_system = mock.Mock()
+        driver.do_setup(context='context')
+        url = urlparse.urlparse(driver._client._endpoint)
+        port = url.port
+        scheme = url.scheme
+        self.assertEqual(81, port)
+        self.assertEqual('http', scheme)
+
+    def test_do_setup_https_non_default_port(self):
+        configuration = self._set_config(create_configuration())
+        configuration.netapp_transport_type = 'https'
+        configuration.netapp_server_port = 446
+        driver = common.NetAppDriver(configuration=configuration)
+        driver._check_mode_get_or_register_storage_system = mock.Mock()
+        driver.do_setup(context='context')
+        url = urlparse.urlparse(driver._client._endpoint)
+        port = url.port
+        scheme = url.scheme
+        self.assertEqual(446, port)
+        self.assertEqual('https', scheme)
index e9d27e016464324db25abf2e4dcb15d516982dad..a9b6d00c49e66259efcfe2bf2d32fca9e00cd131 100644 (file)
@@ -31,6 +31,7 @@ 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 api
+from cinder.volume.drivers.netapp import common
 from cinder.volume.drivers.netapp import nfs as netapp_nfs
 from cinder.volume.drivers.netapp import utils
 
@@ -188,11 +189,9 @@ class NetappDirectCmodeNfsDriverTestCase(test.TestCase):
         mox = self.mox
         drv = self._driver
         required_flags = [
-            'netapp_transport_type',
             'netapp_login',
             'netapp_password',
-            'netapp_server_hostname',
-            'netapp_server_port']
+            'netapp_server_hostname']
 
         # set required flags
         for flag in required_flags:
@@ -803,6 +802,68 @@ class NetappDirectCmodeNfsDriverTestCase(test.TestCase):
         pool = self._driver.get_pool({'provider_location': 'fake-share'})
         self.assertEqual(pool, 'fake-share')
 
+    def _set_config(self, configuration):
+        configuration.netapp_storage_family = 'ontap_cluster'
+        configuration.netapp_storage_protocol = 'nfs'
+        configuration.netapp_login = 'admin'
+        configuration.netapp_password = 'pass'
+        configuration.netapp_server_hostname = '127.0.0.1'
+        configuration.netapp_transport_type = 'http'
+        configuration.netapp_server_port = None
+        configuration.netapp_vserver = 'openstack'
+        configuration.nfs_shares_config = '/nfs'
+        return configuration
+
+    @mock.patch.object(netapp_nfs.NetAppNFSDriver, 'do_setup')
+    def test_do_setup_all_default(self, mock_set_up):
+        configuration = self._set_config(create_configuration())
+        driver = common.NetAppDriver(configuration=configuration)
+        driver._do_custom_setup = mock.Mock()
+        driver.do_setup(context='')
+        self.assertEqual('80', driver._client.get_port())
+        self.assertEqual('http', driver._client.get_transport_type())
+
+    @mock.patch.object(netapp_nfs.NetAppNFSDriver, 'do_setup')
+    def test_do_setup_http_default_port(self, mock_setup):
+        configuration = self._set_config(create_configuration())
+        configuration.netapp_transport_type = 'http'
+        driver = common.NetAppDriver(configuration=configuration)
+        driver._do_custom_setup = mock.Mock()
+        driver.do_setup(context='')
+        self.assertEqual('80', driver._client.get_port())
+        self.assertEqual('http', driver._client.get_transport_type())
+
+    @mock.patch.object(netapp_nfs.NetAppNFSDriver, 'do_setup')
+    def test_do_setup_https_default_port(self, mock_setup):
+        configuration = self._set_config(create_configuration())
+        configuration.netapp_transport_type = 'https'
+        driver = common.NetAppDriver(configuration=configuration)
+        driver._do_custom_setup = mock.Mock()
+        driver.do_setup(context='')
+        self.assertEqual('443', driver._client.get_port())
+        self.assertEqual('https', driver._client.get_transport_type())
+
+    @mock.patch.object(netapp_nfs.NetAppNFSDriver, 'do_setup')
+    def test_do_setup_http_non_default_port(self, mock_setup):
+        configuration = self._set_config(create_configuration())
+        configuration.netapp_server_port = 81
+        driver = common.NetAppDriver(configuration=configuration)
+        driver._do_custom_setup = mock.Mock()
+        driver.do_setup(context='')
+        self.assertEqual('81', driver._client.get_port())
+        self.assertEqual('http', driver._client.get_transport_type())
+
+    @mock.patch.object(netapp_nfs.NetAppNFSDriver, 'do_setup')
+    def test_do_setup_https_non_default_port(self, mock_setup):
+        configuration = self._set_config(create_configuration())
+        configuration.netapp_transport_type = 'https'
+        configuration.netapp_server_port = 446
+        driver = common.NetAppDriver(configuration=configuration)
+        driver._do_custom_setup = mock.Mock()
+        driver.do_setup(context='')
+        self.assertEqual('446', driver._client.get_port())
+        self.assertEqual('https', driver._client.get_transport_type())
+
 
 class NetappDirectCmodeNfsDriverOnlyTestCase(test.TestCase):
     """Test direct NetApp C Mode driver only and not inherit."""
@@ -1255,3 +1316,9 @@ class NetappDirect7modeNfsDriverTestCase(NetappDirectCmodeNfsDriverTestCase):
     def test_get_pool(self):
         pool = self._driver.get_pool({'provider_location': 'fake-share'})
         self.assertEqual(pool, 'fake-share')
+
+    def _set_config(self, configuration):
+        super(NetappDirect7modeNfsDriverTestCase, self)._set_config(
+            configuration)
+        configuration.netapp_storage_family = 'ontap_7mode'
+        return configuration
index f626a4fa48ebca12e5edab50706ac7b8e48a7643..889a7f2e4861047b3fd00e5ee81e8fce79fda2ac 100644 (file)
@@ -95,10 +95,17 @@ class Driver(driver.ISCSIDriver):
     def do_setup(self, context):
         """Any initialization the volume driver does while starting."""
         self._check_flags()
+        port = self.configuration.netapp_server_port
+        scheme = self.configuration.netapp_transport_type.lower()
+        if port is None:
+            if scheme == 'http':
+                port = 8080
+            elif scheme == 'https':
+                port = 8443
         self._client = client.RestClient(
-            scheme=self.configuration.netapp_transport_type,
+            scheme=scheme,
             host=self.configuration.netapp_server_hostname,
-            port=self.configuration.netapp_server_port,
+            port=port,
             service_path=self.configuration.netapp_webservice_path,
             username=self.configuration.netapp_login,
             password=self.configuration.netapp_password)
index e08c0dc10300f85cd6f3db11aa70ef83040cdf2e..c518e4e4b71fd6037b773479804adfc9602cde54 100644 (file)
@@ -87,9 +87,8 @@ class NetAppDirectISCSIDriver(driver.ISCSIDriver):
     VERSION = "1.0.0"
 
     IGROUP_PREFIX = 'openstack-'
-    required_flags = ['netapp_transport_type', 'netapp_login',
-                      'netapp_password', 'netapp_server_hostname',
-                      'netapp_server_port']
+    required_flags = ['netapp_login', 'netapp_password',
+                      'netapp_server_hostname']
 
     def __init__(self, *args, **kwargs):
         super(NetAppDirectISCSIDriver, self).__init__(*args, **kwargs)
@@ -114,6 +113,8 @@ class NetAppDirectISCSIDriver(driver.ISCSIDriver):
                                style=NaServer.STYLE_LOGIN_PASSWORD,
                                username=kwargs['login'],
                                password=kwargs['password'])
+        if kwargs['port'] is not None:
+            self.client.set_port(kwargs['port'])
 
     def _do_custom_setup(self):
         """Does custom setup depending on the type of filer."""
index c74f8551effbbda5bf9c68d57789fc8edac3aee1..a1e3960beeb2d7913032d7693fd563ea0194bf1e 100644 (file)
@@ -670,9 +670,7 @@ class NetAppDirectNfsDriver (NetAppNFSDriver):
         """Raises error if any required configuration flag is missing."""
         required_flags = ['netapp_login',
                           'netapp_password',
-                          'netapp_server_hostname',
-                          'netapp_server_port',
-                          'netapp_transport_type']
+                          'netapp_server_hostname']
         for flag in required_flags:
             if not getattr(self.configuration, flag, None):
                 raise exception.CinderException(_('%s is not set') % flag)
@@ -686,6 +684,8 @@ class NetAppDirectNfsDriver (NetAppNFSDriver):
             style=NaServer.STYLE_LOGIN_PASSWORD,
             username=self.configuration.netapp_login,
             password=self.configuration.netapp_password)
+        if self.configuration.netapp_server_port is not None:
+            client.set_port(self.configuration.netapp_server_port)
         return client
 
     def _do_custom_setup(self, client):
index 5b01d1f5864849b3baa9a1cabd05a4a48b46b25a..ad217c35df0f4f012c8519ab3af5b59dd3550feb 100644 (file)
@@ -44,12 +44,11 @@ netapp_connection_opts = [
                help='The hostname (or IP address) for the storage system or '
                     'proxy server.'),
     cfg.IntOpt('netapp_server_port',
-               default=80,
+               default=None,
                help=('The TCP port to use for communication with the storage '
-                     'system or proxy server. Traditionally, port 80 is used '
-                     'for HTTP and port 443 is used for HTTPS; however, this '
-                     'value should be changed if an alternate port has been '
-                     'configured on the storage system or proxy server.')), ]
+                     'system or proxy server. If not specified, Data ONTAP '
+                     'drivers will use 80 for HTTP and 443 for HTTPS; '
+                     'E-Series will use 8080 for HTTP and 8443 for HTTPS.')), ]
 
 netapp_transport_opts = [
     cfg.StrOpt('netapp_transport_type',
index 1d6dc8a9b8c22711816d2ce22f8a89d5b847f2c1..74d2ecb91b889202c265ced12d82d3ca3d0d1a96 100644 (file)
 #netapp_server_hostname=<None>
 
 # The TCP port to use for communication with the storage
-# system or proxy server. Traditionally, port 80 is used for
-# HTTP and port 443 is used for HTTPS; however, this value
-# should be changed if an alternate port has been configured
-# on the storage system or proxy server. (integer value)
-#netapp_server_port=80
+# system or proxy server. If not specified, Data ONTAP drivers
+# will use 80 for HTTP and 443 for HTTPS; E-Series will use
+# 8080 for HTTP and 8443 for HTTPS. (integer value)
+#netapp_server_port=<None>
 
 # This option is used to specify the path to the E-Series
 # proxy application on a proxy server. The value is combined