Merge "Specify a user-agent in Pure volume drivers"

This commit is contained in:
Jenkins 2016-05-25 22:10:17 +00:00 committed by Gerrit Code Review
commit 8996d0867d
3 changed files with 33 additions and 61 deletions

View File

@ -382,6 +382,16 @@ class PureDriverTestCase(test.TestCase):
func, *args, **kwargs)
mock_func.side_effect = original_side_effect
@mock.patch('platform.platform')
def test_for_user_agent(self, mock_platform):
mock_platform.return_value = 'MyFavoritePlatform'
driver = pure.PureBaseVolumeDriver(configuration=self.mock_config)
expected_agent = "OpenStack Cinder %s/%s (MyFavoritePlatform)" % (
driver.__class__.__name__,
driver.VERSION
)
self.assertEqual(expected_agent, driver._user_agent)
class PureBaseSharedDriverTestCase(PureDriverTestCase):
def setUp(self):
@ -1888,14 +1898,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
remvollist=[VOLUME_PURITY_NAME]
)
@ddt.data(
dict(version='1.5.0'),
dict(version='2.0.0'),
dict(version='1.4.1'),
)
@ddt.unpack
def test_get_flasharray_verify_https(self, version):
self.purestorage_module.VERSION = version
def test_get_flasharray_verify_https(self):
san_ip = '1.2.3.4'
api_token = 'abcdef'
cert_path = '/my/ssl/certs'
@ -1910,38 +1913,8 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
api_token=api_token,
rest_version=None,
verify_https=True,
ssl_cert=cert_path
)
def test_get_flasharray_dont_verify_https_version_too_old(self):
self.purestorage_module.VERSION = '1.4.0'
san_ip = '1.2.3.4'
api_token = 'abcdef'
self.purestorage_module.FlashArray.return_value = mock.MagicMock()
self.driver._get_flasharray(san_ip,
api_token,
verify_https=False,
ssl_cert_path=None)
self.purestorage_module.FlashArray.assert_called_with(
san_ip,
api_token=api_token,
rest_version=None
)
def test_get_flasharray_verify_https_version_too_old(self):
self.purestorage_module.VERSION = '1.4.0'
san_ip = '1.2.3.4'
api_token = 'abcdef'
self.purestorage_module.FlashArray.return_value = mock.MagicMock()
self.assertRaises(
exception.PureDriverException,
self.driver._get_flasharray,
san_ip,
api_token,
verify_https=True,
ssl_cert_path='/my/ssl/certs'
ssl_cert=cert_path,
user_agent=self.driver._user_agent,
)

View File

@ -19,6 +19,7 @@ This driver requires Purity version 4.0.0 or later.
"""
import math
import platform
import re
import uuid
@ -102,7 +103,6 @@ EXTRA_SPECS_REPL_ENABLED = "replication_enabled"
CONNECT_LOCK_NAME = 'PureVolumeDriver_connect'
UNMANAGED_SUFFIX = '-unmanaged'
MANAGE_SNAP_REQUIRED_API_VERSIONS = ['1.4', '1.5']
REPLICATION_REQUIRED_API_VERSIONS = ['1.3', '1.4', '1.5']
@ -110,6 +110,8 @@ REPLICATION_REQUIRED_API_VERSIONS = ['1.3', '1.4', '1.5']
REPL_SETTINGS_PROPAGATE_RETRY_INTERVAL = 5 # 5 seconds
REPL_SETTINGS_PROPAGATE_MAX_RETRIES = 36 # 36 * 5 = 180 seconds
USER_AGENT_BASE = 'OpenStack Cinder'
def pure_driver_debug_trace(f):
"""Log the method entrance and exit including active backend name.
@ -156,6 +158,12 @@ class PureBaseVolumeDriver(san.SanDriver):
self._is_replication_enabled = False
self._active_backend_id = kwargs.get('active_backend_id', None)
self._failed_over_primary_array = None
self._user_agent = '%(base)s %(class)s/%(version)s (%(platform)s)' % {
'base': USER_AGENT_BASE,
'class': self.__class__.__name__,
'version': self.VERSION,
'platform': platform.platform()
}
def parse_replication_configs(self):
self._replication_interval = (
@ -959,26 +967,13 @@ class PureBaseVolumeDriver(san.SanDriver):
def _get_flasharray(self, san_ip, api_token, rest_version=None,
verify_https=None, ssl_cert_path=None):
# Older versions of the module (1.4.0) do not support setting ssl certs
# TODO(patrickeast): In future releases drop support for 1.4.0
if self._client_version_greater_than([1, 4, 0]):
array = purestorage.FlashArray(san_ip,
api_token=api_token,
rest_version=rest_version,
verify_https=verify_https,
ssl_cert=ssl_cert_path)
else:
if verify_https or ssl_cert_path is not None:
msg = _('HTTPS certificate verification was requested '
'but cannot be enabled with purestorage '
'module version %(version)s. Upgrade to a '
'newer version to enable this feature.') % {
'version': purestorage.VERSION
}
raise exception.PureDriverException(reason=msg)
array = purestorage.FlashArray(san_ip,
api_token=api_token,
rest_version=rest_version)
array = purestorage.FlashArray(san_ip,
api_token=api_token,
rest_version=rest_version,
verify_https=verify_https,
ssl_cert=ssl_cert_path,
user_agent=self._user_agent)
array_info = array.get()
array.array_name = array_info["array_name"]
array.array_id = array_info["id"]

View File

@ -0,0 +1,4 @@
---
upgrade:
- Pure volume drivers will need 'purestorage' python module v1.6.0 or newer.
Support for 1.4.x has been removed.