Fix manila driverfixes/newton checks
Branch is broken so we need 2 fixes:
1) Add upper-constraints.txt from stable/newton
This will be used to set the upper-constraints for unit
test jobs on this branch.
2) Backport "Remove usage of parameter enforce_type"
oslo.config has deprecated the enforce_type parameter to
set_override() and set its default value to True [1],
so remove this usage from our codebase. Also remove
explict str() cast of mock.sentinel_password in
Windows driver since it should no longer be expected.
[1] Ifa552de0a994e40388cbc9f7dbaa55700ca276b0
(cherry-picked from 4e25ce5a0c
)
Change-Id: Id7db496441f6c1d620a4995812ed4f8c98a00ad5
This commit is contained in:
parent
d492c6c557
commit
cb76d2febc
|
@ -173,7 +173,7 @@ class TestCase(base_test.BaseTestCase):
|
||||||
def flags(self, **kw):
|
def flags(self, **kw):
|
||||||
"""Override flag variables for a test."""
|
"""Override flag variables for a test."""
|
||||||
for k, v in kw.items():
|
for k, v in kw.items():
|
||||||
CONF.set_override(k, v, enforce_type=True)
|
CONF.set_override(k, v)
|
||||||
|
|
||||||
def start_service(self, name, host=None, **kwargs):
|
def start_service(self, name, host=None, **kwargs):
|
||||||
host = host and host or uuid.uuid4().hex
|
host = host and host or uuid.uuid4().hex
|
||||||
|
|
|
@ -260,7 +260,7 @@ class ManilaCmdManageTestCase(test.TestCase):
|
||||||
@mock.patch('six.moves.builtins.open')
|
@mock.patch('six.moves.builtins.open')
|
||||||
@mock.patch('os.listdir')
|
@mock.patch('os.listdir')
|
||||||
def test_get_log_commands_errors(self, listdir, open):
|
def test_get_log_commands_errors(self, listdir, open):
|
||||||
CONF.set_override('log_dir', 'fake-dir', enforce_type=True)
|
CONF.set_override('log_dir', 'fake-dir')
|
||||||
listdir.return_value = ['fake-error.log']
|
listdir.return_value = ['fake-error.log']
|
||||||
|
|
||||||
with mock.patch('sys.stdout', new=six.StringIO()) as fake_out:
|
with mock.patch('sys.stdout', new=six.StringIO()) as fake_out:
|
||||||
|
|
|
@ -38,10 +38,9 @@ class ManilaCmdShareTestCase(test.TestCase):
|
||||||
self.mock_object(self.launcher, 'launch_service')
|
self.mock_object(self.launcher, 'launch_service')
|
||||||
self.mock_object(self.launcher, 'wait')
|
self.mock_object(self.launcher, 'wait')
|
||||||
self.server = manila_share.service.Service.create.return_value
|
self.server = manila_share.service.Service.create.return_value
|
||||||
fake_host = 'fake_host'
|
fake_host = 'fake.host'
|
||||||
CONF.set_override('enabled_share_backends', backends,
|
CONF.set_override('enabled_share_backends', backends)
|
||||||
enforce_type=True)
|
CONF.set_override('host', fake_host)
|
||||||
CONF.set_override('host', fake_host, enforce_type=True)
|
|
||||||
sys.argv = ['manila-share']
|
sys.argv = ['manila-share']
|
||||||
|
|
||||||
manila_share.main()
|
manila_share.main()
|
||||||
|
|
|
@ -425,8 +425,7 @@ class CephFSNativeDriverTestCase(test.TestCase):
|
||||||
def test_connect_noevict(self):
|
def test_connect_noevict(self):
|
||||||
# When acting as "admin", driver should skip evicting
|
# When acting as "admin", driver should skip evicting
|
||||||
self._driver.configuration.local_conf.set_override('cephfs_auth_id',
|
self._driver.configuration.local_conf.set_override('cephfs_auth_id',
|
||||||
"admin",
|
"admin")
|
||||||
enforce_type=True)
|
|
||||||
|
|
||||||
self._driver.create_share(self._context,
|
self._driver.create_share(self._context,
|
||||||
self._share)
|
self._share)
|
||||||
|
|
|
@ -53,17 +53,17 @@ class NetAppCDOTDataMotionTestCase(test.TestCase):
|
||||||
self.config.append_config_values(na_opts.netapp_provisioning_opts)
|
self.config.append_config_values(na_opts.netapp_provisioning_opts)
|
||||||
self.config.append_config_values(na_opts.netapp_replication_opts)
|
self.config.append_config_values(na_opts.netapp_replication_opts)
|
||||||
CONF.set_override("share_backend_name", self.backend,
|
CONF.set_override("share_backend_name", self.backend,
|
||||||
group=self.backend, enforce_type=True)
|
group=self.backend)
|
||||||
CONF.set_override("netapp_transport_type", "https",
|
CONF.set_override("netapp_transport_type", "https",
|
||||||
group=self.backend, enforce_type=True)
|
group=self.backend)
|
||||||
CONF.set_override("netapp_login", "fake_user",
|
CONF.set_override("netapp_login", "fake_user",
|
||||||
group=self.backend, enforce_type=True)
|
group=self.backend)
|
||||||
CONF.set_override("netapp_password", "fake_password",
|
CONF.set_override("netapp_password", "fake_password",
|
||||||
group=self.backend, enforce_type=True)
|
group=self.backend)
|
||||||
CONF.set_override("netapp_server_hostname", "fake_hostname",
|
CONF.set_override("netapp_server_hostname", "fake.hostname",
|
||||||
group=self.backend, enforce_type=True)
|
group=self.backend)
|
||||||
CONF.set_override("netapp_server_port", 8866,
|
CONF.set_override("netapp_server_port", 8866,
|
||||||
group=self.backend, enforce_type=True)
|
group=self.backend)
|
||||||
|
|
||||||
def test_get_client_for_backend(self):
|
def test_get_client_for_backend(self):
|
||||||
self.mock_object(data_motion, "get_backend_configuration",
|
self.mock_object(data_motion, "get_backend_configuration",
|
||||||
|
@ -72,7 +72,7 @@ class NetAppCDOTDataMotionTestCase(test.TestCase):
|
||||||
data_motion.get_client_for_backend(self.backend)
|
data_motion.get_client_for_backend(self.backend)
|
||||||
|
|
||||||
self.mock_cmode_client.assert_called_once_with(
|
self.mock_cmode_client.assert_called_once_with(
|
||||||
hostname='fake_hostname', password='fake_password',
|
hostname='fake.hostname', password='fake_password',
|
||||||
username='fake_user', transport_type='https', port=8866,
|
username='fake_user', transport_type='https', port=8866,
|
||||||
trace=mock.ANY, vserver=None)
|
trace=mock.ANY, vserver=None)
|
||||||
|
|
||||||
|
@ -81,19 +81,19 @@ class NetAppCDOTDataMotionTestCase(test.TestCase):
|
||||||
mock.Mock(return_value=self.config))
|
mock.Mock(return_value=self.config))
|
||||||
|
|
||||||
CONF.set_override("netapp_vserver", 'fake_vserver',
|
CONF.set_override("netapp_vserver", 'fake_vserver',
|
||||||
group=self.backend, enforce_type=True)
|
group=self.backend)
|
||||||
|
|
||||||
data_motion.get_client_for_backend(self.backend)
|
data_motion.get_client_for_backend(self.backend)
|
||||||
|
|
||||||
self.mock_cmode_client.assert_called_once_with(
|
self.mock_cmode_client.assert_called_once_with(
|
||||||
hostname='fake_hostname', password='fake_password',
|
hostname='fake.hostname', password='fake_password',
|
||||||
username='fake_user', transport_type='https', port=8866,
|
username='fake_user', transport_type='https', port=8866,
|
||||||
trace=mock.ANY, vserver='fake_vserver')
|
trace=mock.ANY, vserver='fake_vserver')
|
||||||
|
|
||||||
def test_get_config_for_backend(self):
|
def test_get_config_for_backend(self):
|
||||||
self.mock_object(data_motion, "CONF")
|
self.mock_object(data_motion, "CONF")
|
||||||
CONF.set_override("netapp_vserver", 'fake_vserver',
|
CONF.set_override("netapp_vserver", 'fake_vserver',
|
||||||
group=self.backend, enforce_type=True)
|
group=self.backend)
|
||||||
data_motion.CONF.list_all_sections.return_value = [self.backend]
|
data_motion.CONF.list_all_sections.return_value = [self.backend]
|
||||||
|
|
||||||
config = data_motion.get_backend_configuration(self.backend)
|
config = data_motion.get_backend_configuration(self.backend)
|
||||||
|
@ -103,9 +103,9 @@ class NetAppCDOTDataMotionTestCase(test.TestCase):
|
||||||
def test_get_config_for_backend_different_backend_name(self):
|
def test_get_config_for_backend_different_backend_name(self):
|
||||||
self.mock_object(data_motion, "CONF")
|
self.mock_object(data_motion, "CONF")
|
||||||
CONF.set_override("netapp_vserver", 'fake_vserver',
|
CONF.set_override("netapp_vserver", 'fake_vserver',
|
||||||
group=self.backend, enforce_type=True)
|
group=self.backend)
|
||||||
CONF.set_override("share_backend_name", "fake_backend_name",
|
CONF.set_override("share_backend_name", "fake_backend_name",
|
||||||
group=self.backend, enforce_type=True)
|
group=self.backend)
|
||||||
data_motion.CONF.list_all_sections.return_value = [self.backend]
|
data_motion.CONF.list_all_sections.return_value = [self.backend]
|
||||||
|
|
||||||
config = data_motion.get_backend_configuration(self.backend)
|
config = data_motion.get_backend_configuration(self.backend)
|
||||||
|
|
|
@ -595,8 +595,7 @@ SSC_DISK_TYPES = ['FCAL', ['SATA', 'SSD']]
|
||||||
|
|
||||||
def get_config_cmode():
|
def get_config_cmode():
|
||||||
config = na_fakes.create_configuration_cmode()
|
config = na_fakes.create_configuration_cmode()
|
||||||
config.local_conf.set_override('share_backend_name', BACKEND_NAME,
|
config.local_conf.set_override('share_backend_name', BACKEND_NAME)
|
||||||
enforce_type=True)
|
|
||||||
config.reserved_share_percentage = 5
|
config.reserved_share_percentage = 5
|
||||||
config.netapp_login = CLIENT_KWARGS['username']
|
config.netapp_login = CLIENT_KWARGS['username']
|
||||||
config.netapp_password = CLIENT_KWARGS['password']
|
config.netapp_password = CLIENT_KWARGS['password']
|
||||||
|
|
|
@ -120,8 +120,7 @@ class NetAppDriverFactoryTestCase(test.TestCase):
|
||||||
|
|
||||||
config = na_fakes.create_configuration()
|
config = na_fakes.create_configuration()
|
||||||
config.local_conf.set_override('driver_handles_share_servers',
|
config.local_conf.set_override('driver_handles_share_servers',
|
||||||
mode == na_common.MULTI_SVM,
|
mode == na_common.MULTI_SVM)
|
||||||
enforce_type=True)
|
|
||||||
kwargs = {
|
kwargs = {
|
||||||
'configuration': config,
|
'configuration': config,
|
||||||
'private_storage': mock.Mock(),
|
'private_storage': mock.Mock(),
|
||||||
|
@ -136,8 +135,7 @@ class NetAppDriverFactoryTestCase(test.TestCase):
|
||||||
def test_create_driver_case_insensitive(self):
|
def test_create_driver_case_insensitive(self):
|
||||||
|
|
||||||
config = na_fakes.create_configuration()
|
config = na_fakes.create_configuration()
|
||||||
config.local_conf.set_override('driver_handles_share_servers', True,
|
config.local_conf.set_override('driver_handles_share_servers', True)
|
||||||
enforce_type=True)
|
|
||||||
|
|
||||||
kwargs = {
|
kwargs = {
|
||||||
'configuration': config,
|
'configuration': config,
|
||||||
|
|
|
@ -82,7 +82,7 @@ class WindowsServiceInstanceManagerTestCase(test.TestCase):
|
||||||
|
|
||||||
if not use_cert_auth:
|
if not use_cert_auth:
|
||||||
mock_check_complexity.assert_called_once_with(
|
mock_check_complexity.assert_called_once_with(
|
||||||
str(mock.sentinel.password))
|
mock.sentinel.password)
|
||||||
|
|
||||||
@ddt.data(False, True)
|
@ddt.data(False, True)
|
||||||
def test_get_auth_info(self, use_cert_auth):
|
def test_get_auth_info(self, use_cert_auth):
|
||||||
|
@ -165,7 +165,7 @@ class WindowsServiceInstanceManagerTestCase(test.TestCase):
|
||||||
expected_kwargs = dict(user_data=mock_cert_data)
|
expected_kwargs = dict(user_data=mock_cert_data)
|
||||||
else:
|
else:
|
||||||
expected_kwargs = dict(
|
expected_kwargs = dict(
|
||||||
meta=dict(admin_pass=str(mock.sentinel.admin_pass)))
|
meta=dict(admin_pass=mock.sentinel.admin_pass))
|
||||||
|
|
||||||
create_kwargs = self._mgr._get_service_instance_create_kwargs()
|
create_kwargs = self._mgr._get_service_instance_create_kwargs()
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ class ConfigTestCase(test.TestCase):
|
||||||
self.assertEqual(42, CONF.answer)
|
self.assertEqual(42, CONF.answer)
|
||||||
|
|
||||||
# Make sure we don't overwrite anything
|
# Make sure we don't overwrite anything
|
||||||
CONF.set_override('answer', 256, enforce_type=True)
|
CONF.set_override('answer', 256)
|
||||||
self.assertEqual(256, CONF.answer)
|
self.assertEqual(256, CONF.answer)
|
||||||
CONF.import_opt('answer', 'manila.tests.declare_conf')
|
CONF.import_opt('answer', 'manila.tests.declare_conf')
|
||||||
self.assertEqual(256, CONF.answer)
|
self.assertEqual(256, CONF.answer)
|
||||||
|
|
|
@ -41,8 +41,7 @@ class PolicyFileTestCase(test.TestCase):
|
||||||
def test_modified_policy_reloads(self):
|
def test_modified_policy_reloads(self):
|
||||||
with utils.tempdir() as tmpdir:
|
with utils.tempdir() as tmpdir:
|
||||||
tmpfilename = os.path.join(tmpdir, 'policy')
|
tmpfilename = os.path.join(tmpdir, 'policy')
|
||||||
CONF.set_override('policy_file', tmpfilename, group='oslo_policy',
|
CONF.set_override('policy_file', tmpfilename, group='oslo_policy')
|
||||||
enforce_type=True)
|
|
||||||
action = "example:test"
|
action = "example:test"
|
||||||
with open(tmpfilename, "w") as policyfile:
|
with open(tmpfilename, "w") as policyfile:
|
||||||
policyfile.write("""{"example:test": []}""")
|
policyfile.write("""{"example:test": []}""")
|
||||||
|
|
|
@ -190,8 +190,7 @@ class CinderApiTestCase(test.TestCase):
|
||||||
volume['attach_status'] = "detached"
|
volume['attach_status'] = "detached"
|
||||||
instance = {'availability_zone': 'zone1'}
|
instance = {'availability_zone': 'zone1'}
|
||||||
volume['availability_zone'] = 'zone2'
|
volume['availability_zone'] = 'zone2'
|
||||||
cinder.CONF.set_override('cross_az_attach', False, 'cinder',
|
cinder.CONF.set_override('cross_az_attach', False, 'cinder')
|
||||||
enforce_type=True)
|
|
||||||
self.assertRaises(exception.InvalidVolume,
|
self.assertRaises(exception.InvalidVolume,
|
||||||
self.api.check_attach, self.ctx, volume, instance)
|
self.api.check_attach, self.ctx, volume, instance)
|
||||||
volume['availability_zone'] = 'zone1'
|
volume['availability_zone'] = 'zone1'
|
||||||
|
@ -203,8 +202,7 @@ class CinderApiTestCase(test.TestCase):
|
||||||
volume['attach_status'] = "detached"
|
volume['attach_status'] = "detached"
|
||||||
volume['availability_zone'] = 'zone1'
|
volume['availability_zone'] = 'zone1'
|
||||||
instance = {'availability_zone': 'zone1'}
|
instance = {'availability_zone': 'zone1'}
|
||||||
cinder.CONF.set_override('cross_az_attach', False, 'cinder',
|
cinder.CONF.set_override('cross_az_attach', False, 'cinder')
|
||||||
enforce_type=True)
|
|
||||||
self.assertIsNone(self.api.check_attach(self.ctx, volume, instance))
|
self.assertIsNone(self.api.check_attach(self.ctx, volume, instance))
|
||||||
cinder.CONF.reset()
|
cinder.CONF.reset()
|
||||||
|
|
||||||
|
|
2
tox.ini
2
tox.ini
|
@ -6,7 +6,7 @@ envlist = py34,py27,pep8
|
||||||
[testenv]
|
[testenv]
|
||||||
setenv = VIRTUAL_ENV={envdir}
|
setenv = VIRTUAL_ENV={envdir}
|
||||||
usedevelop = True
|
usedevelop = True
|
||||||
install_command = pip install -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?h=stable/newton} {opts} {packages}
|
install_command = pip install -cupper-constraints.txt {opts} {packages}
|
||||||
whitelist_externals = find
|
whitelist_externals = find
|
||||||
deps = -r{toxinidir}/requirements.txt
|
deps = -r{toxinidir}/requirements.txt
|
||||||
-r{toxinidir}/test-requirements.txt
|
-r{toxinidir}/test-requirements.txt
|
||||||
|
|
|
@ -0,0 +1,404 @@
|
||||||
|
# taken from openstack/requirements stable/newton @ aec3ee5
|
||||||
|
APScheduler===3.2.0
|
||||||
|
Babel===2.3.4
|
||||||
|
CouchDB===1.1
|
||||||
|
Django===1.8.14
|
||||||
|
Flask===0.11.1
|
||||||
|
GitPython===2.0.8
|
||||||
|
Jinja2===2.8
|
||||||
|
Mako===1.0.4
|
||||||
|
MarkupSafe===0.23
|
||||||
|
MySQL-python===1.2.5;python_version=='2.7'
|
||||||
|
Parsley===1.3
|
||||||
|
Paste===2.0.3
|
||||||
|
PasteDeploy===1.5.2
|
||||||
|
Pillow===3.3.1
|
||||||
|
Pint===0.7.2
|
||||||
|
PuLP===1.6.1
|
||||||
|
PyECLib===1.2.0
|
||||||
|
PyJWT===1.4.2
|
||||||
|
PyKMIP===0.5.0
|
||||||
|
PyMySQL===0.7.6
|
||||||
|
PyYAML===3.12
|
||||||
|
Pygments===2.1.3
|
||||||
|
Routes===2.3.1
|
||||||
|
SQLAlchemy===1.0.14
|
||||||
|
SQLAlchemy-Utils===0.32.9
|
||||||
|
SecretStorage===2.3.1
|
||||||
|
Sphinx===1.2.3
|
||||||
|
Tempita===0.5.2
|
||||||
|
WSME===0.8.0
|
||||||
|
WebOb===1.6.1
|
||||||
|
WebTest===2.0.23
|
||||||
|
Werkzeug===0.11.11
|
||||||
|
XStatic===1.0.1
|
||||||
|
XStatic-Angular===1.4.10.1
|
||||||
|
XStatic-Angular-Bootstrap===0.11.0.8
|
||||||
|
XStatic-Angular-FileUpload===12.0.4.0
|
||||||
|
XStatic-Angular-Gettext===2.1.0.2
|
||||||
|
XStatic-Angular-Schema-Form===0.8.13.0
|
||||||
|
XStatic-Angular-lrdragndrop===1.0.2.2
|
||||||
|
XStatic-Bootstrap-Datepicker===1.3.1.0
|
||||||
|
XStatic-Bootstrap-SCSS===3.3.7.1
|
||||||
|
XStatic-D3===3.1.6.2
|
||||||
|
XStatic-Font-Awesome===4.5.0.0
|
||||||
|
XStatic-Hogan===2.0.0.2
|
||||||
|
XStatic-JQuery-Migrate===1.2.1.1
|
||||||
|
XStatic-JQuery.TableSorter===2.14.5.1
|
||||||
|
XStatic-JQuery.quicksearch===2.0.3.1
|
||||||
|
XStatic-JSEncrypt===2.0.0.2
|
||||||
|
XStatic-Jasmine===2.4.1.1
|
||||||
|
XStatic-Magic-Search===0.2.5.1
|
||||||
|
XStatic-Rickshaw===1.5.0.0
|
||||||
|
XStatic-Spin===1.2.5.2
|
||||||
|
XStatic-bootswatch===3.3.6.0
|
||||||
|
XStatic-jQuery===1.10.2.1
|
||||||
|
XStatic-jquery-ui===1.11.0.1
|
||||||
|
XStatic-mdi===1.4.57.0
|
||||||
|
XStatic-objectpath===1.2.1.0
|
||||||
|
XStatic-roboto-fontface===0.4.3.2
|
||||||
|
XStatic-smart-table===1.4.13.2
|
||||||
|
XStatic-term.js===0.0.7.0
|
||||||
|
XStatic-tv4===1.2.7.0
|
||||||
|
XenAPI===1.2
|
||||||
|
alembic===0.8.7
|
||||||
|
amqp===1.4.9
|
||||||
|
anyjson===0.3.3
|
||||||
|
aodhclient===0.7.0
|
||||||
|
appdirs===1.4.3
|
||||||
|
astroid===1.3.8
|
||||||
|
autobahn===0.16.0
|
||||||
|
automaton===1.4.0
|
||||||
|
backports.ssl-match-hostname===3.5.0.1;python_version=='2.7'
|
||||||
|
bandit===1.1.0
|
||||||
|
bashate===0.5.1
|
||||||
|
beautifulsoup4===4.5.1
|
||||||
|
betamax===0.8.0
|
||||||
|
blockdiag===1.5.3
|
||||||
|
boto===2.42.0
|
||||||
|
botocore===1.4.50
|
||||||
|
cachetools===1.1.6
|
||||||
|
cassandra-driver===3.5.0
|
||||||
|
castellan===0.4.0
|
||||||
|
ceilometermiddleware===0.5.2
|
||||||
|
cffi===1.7.0
|
||||||
|
chardet===2.3.0
|
||||||
|
click===6.6
|
||||||
|
cliff===2.2.0
|
||||||
|
cliff-tablib===2.0
|
||||||
|
cmd2===0.6.8
|
||||||
|
colorama===0.3.7
|
||||||
|
configparser===3.5.0
|
||||||
|
contextlib2===0.5.4
|
||||||
|
coverage===4.2
|
||||||
|
crc16===0.1.1
|
||||||
|
croniter===0.3.12
|
||||||
|
cryptography===1.5
|
||||||
|
cursive===0.1.1
|
||||||
|
ddt===1.1.0
|
||||||
|
debtcollector===1.8.0
|
||||||
|
decorator===4.0.10
|
||||||
|
demjson===2.2.4
|
||||||
|
dib-utils===0.0.10
|
||||||
|
discover===0.4.0
|
||||||
|
diskimage-builder===1.19.0
|
||||||
|
django-appconf===1.0.2
|
||||||
|
django-babel===0.5.1
|
||||||
|
django-compressor===2.1
|
||||||
|
django-floppyforms===1.7.0
|
||||||
|
django-formtools===1.0
|
||||||
|
django-nose===1.4.4
|
||||||
|
django-openstack-auth===2.4.2
|
||||||
|
django-pyscss===2.0.2
|
||||||
|
dnspython===1.14.0
|
||||||
|
dnspython3===1.12.0;python_version=='3.4'
|
||||||
|
dnspython3===1.12.0;python_version=='3.5'
|
||||||
|
doc8===0.7.0
|
||||||
|
docker-py===1.7.2
|
||||||
|
docutils===0.12
|
||||||
|
dogpile.cache===0.6.2
|
||||||
|
elasticsearch===2.4.0
|
||||||
|
enum34===1.1.6
|
||||||
|
eventlet===0.19.0
|
||||||
|
extras===1.0.0
|
||||||
|
fairy-slipper===0.2.0
|
||||||
|
falcon===1.0.0
|
||||||
|
fasteners===0.14.1
|
||||||
|
fixtures===3.0.0
|
||||||
|
freezegun===0.3.7
|
||||||
|
frozendict===1.0
|
||||||
|
funcparserlib===0.3.6
|
||||||
|
funcsigs===1.0.2;python_version=='2.7'
|
||||||
|
functools32===3.2.3.post2;python_version=='2.7'
|
||||||
|
futures===3.0.5
|
||||||
|
futurist===0.18.0
|
||||||
|
gabbi===1.24.0
|
||||||
|
gitdb===0.6.4
|
||||||
|
glance-store===0.18.0
|
||||||
|
google-api-python-client===1.5.3
|
||||||
|
graphviz===0.4.10
|
||||||
|
greenlet===0.4.10
|
||||||
|
happybase===1.0.0;python_version=='2.7'
|
||||||
|
heat-translator===0.5.0
|
||||||
|
hiredis===0.2.0
|
||||||
|
httplib2===0.9.2
|
||||||
|
icalendar===3.10
|
||||||
|
idna===2.1
|
||||||
|
ipaddress===1.0.16;python_version=='2.7'
|
||||||
|
ironic-lib===2.1.3
|
||||||
|
iso8601===0.1.11
|
||||||
|
itsdangerous===0.24
|
||||||
|
jmespath===0.9.0
|
||||||
|
jsonpatch===1.14
|
||||||
|
jsonpath-rw===1.4.0
|
||||||
|
jsonpath-rw-ext===1.0.0
|
||||||
|
jsonpointer===1.10
|
||||||
|
jsonschema===2.5.1
|
||||||
|
kafka-python===0.9.5
|
||||||
|
kazoo===2.2.1
|
||||||
|
keyring===9.3.1
|
||||||
|
keystoneauth1===2.12.3
|
||||||
|
keystonemiddleware===4.9.1
|
||||||
|
kombu===3.0.35
|
||||||
|
krest===1.3.1
|
||||||
|
ldap3===1.4.0
|
||||||
|
ldappool===2.1.0
|
||||||
|
libvirt-python===2.1.0
|
||||||
|
linecache2===1.0.0
|
||||||
|
logilab-common===1.2.2
|
||||||
|
logutils===0.3.3
|
||||||
|
lxml===3.6.4
|
||||||
|
microversion-parse===0.1.4
|
||||||
|
mistral===3.0.2
|
||||||
|
mock===2.0.0
|
||||||
|
monasca-common===1.0.0
|
||||||
|
monasca-statsd===1.1.0
|
||||||
|
monotonic===1.2
|
||||||
|
mox===0.5.3
|
||||||
|
mox3===0.18.0
|
||||||
|
mpmath===0.19
|
||||||
|
msgpack-python===0.4.8
|
||||||
|
ndg-httpsclient===0.4.2;python_version=='2.7'
|
||||||
|
netaddr===0.7.18
|
||||||
|
netifaces===0.10.5
|
||||||
|
netmiko===0.5.6
|
||||||
|
networkx===1.11
|
||||||
|
neutron-lib===0.4.0
|
||||||
|
nodeenv===0.13.6
|
||||||
|
nose===1.3.7
|
||||||
|
nose-exclude===0.4.1
|
||||||
|
nosehtmloutput===0.0.5
|
||||||
|
nosexcover===1.0.10
|
||||||
|
notifier===1.0.3
|
||||||
|
numpy===1.11.1
|
||||||
|
oauth2client===3.0.0
|
||||||
|
oauthlib===1.1.2
|
||||||
|
openstack-doc-tools===1.0.1
|
||||||
|
openstack.nose-plugin===0.11
|
||||||
|
openstackdocstheme===1.5.0
|
||||||
|
openstacksdk===0.9.5
|
||||||
|
ordereddict===1.1
|
||||||
|
os-api-ref===1.0.0
|
||||||
|
os-apply-config===5.1.0
|
||||||
|
os-brick===1.6.2
|
||||||
|
os-client-config===1.21.1
|
||||||
|
os-cloud-config===5.1.0
|
||||||
|
os-collect-config===5.2.0
|
||||||
|
os-refresh-config===5.2.0
|
||||||
|
os-testr===0.8.0
|
||||||
|
os-vif===1.2.1
|
||||||
|
os-win===1.2.2
|
||||||
|
osc-lib===1.1.0
|
||||||
|
oslo.cache===1.14.1
|
||||||
|
oslo.concurrency===3.14.1
|
||||||
|
oslo.config===3.17.1
|
||||||
|
oslo.context===2.9.0
|
||||||
|
oslo.db===4.13.6
|
||||||
|
oslo.i18n===3.9.0
|
||||||
|
oslo.log===3.16.1
|
||||||
|
oslo.messaging===5.10.2
|
||||||
|
oslo.middleware===3.19.1
|
||||||
|
oslo.policy===1.14.0
|
||||||
|
oslo.privsep===1.13.2
|
||||||
|
oslo.reports===1.14.0
|
||||||
|
oslo.rootwrap===5.1.2
|
||||||
|
oslo.serialization===2.13.2
|
||||||
|
oslo.service===1.16.1
|
||||||
|
oslo.utils===3.16.1
|
||||||
|
oslo.versionedobjects===1.17.1
|
||||||
|
oslo.vmware===2.14.1
|
||||||
|
oslosphinx===4.7.0
|
||||||
|
oslotest===2.10.1
|
||||||
|
osprofiler===1.4.0
|
||||||
|
ovs===2.5.0;python_version=='2.7'
|
||||||
|
ovs===2.6.0.dev3;python_version=='3.4'
|
||||||
|
ovs===2.6.0.dev3;python_version=='3.5'
|
||||||
|
packaging===16.8
|
||||||
|
paramiko===2.0.2
|
||||||
|
passlib===1.6.5
|
||||||
|
pathlib===1.0.1;python_version=='2.7'
|
||||||
|
pbr===1.10.0
|
||||||
|
pecan===1.1.2
|
||||||
|
pexpect===4.2.1
|
||||||
|
pifpaf===0.12.0
|
||||||
|
pika===0.10.0
|
||||||
|
pika-pool===0.1.3
|
||||||
|
ply===3.9
|
||||||
|
positional===1.1.1
|
||||||
|
posix-ipc===1.0.0
|
||||||
|
prettytable===0.7.2
|
||||||
|
proboscis===1.2.6.0
|
||||||
|
psutil===1.2.1
|
||||||
|
psycopg2===2.6.2
|
||||||
|
ptyprocess===0.5.1
|
||||||
|
py===1.4.31
|
||||||
|
pyOpenSSL===16.2.0
|
||||||
|
pyScss===1.3.4
|
||||||
|
pyasn1===0.1.9
|
||||||
|
pyasn1-modules===0.0.8
|
||||||
|
pycadf===2.4.0
|
||||||
|
pycparser===2.14
|
||||||
|
pycrypto===2.6.1
|
||||||
|
pydotplus===2.0.2
|
||||||
|
pyghmi===1.0.9
|
||||||
|
pyinotify===0.9.6
|
||||||
|
pykerberos===1.1.13;python_version=='2.7'
|
||||||
|
pyldap===2.4.25.1
|
||||||
|
pylxd===2.0.3
|
||||||
|
pymemcache===1.3.6
|
||||||
|
pymod2pkg===0.5.4
|
||||||
|
pymongo===3.3.0
|
||||||
|
pyngus===2.1.2
|
||||||
|
pyparsing===2.1.10
|
||||||
|
pyroute2===0.4.6
|
||||||
|
pysaml2===4.0.2
|
||||||
|
pysendfile===2.0.1
|
||||||
|
pysmi===0.0.7
|
||||||
|
pysnmp===4.3.2
|
||||||
|
pystache===0.5.4
|
||||||
|
pytest===3.0.1
|
||||||
|
python-barbicanclient===4.0.1
|
||||||
|
python-ceilometerclient===2.6.2
|
||||||
|
python-cinderclient===1.9.0
|
||||||
|
python-congressclient===1.5.0
|
||||||
|
python-consul===0.6.1
|
||||||
|
python-dateutil===2.5.3
|
||||||
|
python-designateclient===2.3.0
|
||||||
|
python-editor===1.0.1
|
||||||
|
python-glanceclient===2.5.0
|
||||||
|
python-heatclient===1.5.2
|
||||||
|
python-ironic-inspector-client===1.10.0
|
||||||
|
python-ironicclient===1.7.1
|
||||||
|
python-k8sclient===0.3.0
|
||||||
|
python-karborclient===0.1.0
|
||||||
|
python-keystoneclient===3.5.1
|
||||||
|
python-magnumclient===2.3.1
|
||||||
|
python-manilaclient===1.11.0
|
||||||
|
python-memcached===1.58
|
||||||
|
python-mimeparse===1.5.2
|
||||||
|
python-mistralclient===2.1.2
|
||||||
|
python-monascaclient===1.2.1
|
||||||
|
python-muranoclient===0.11.1
|
||||||
|
python-neutronclient===6.0.1
|
||||||
|
python-novaclient===6.0.2
|
||||||
|
python-openstackclient===3.2.1
|
||||||
|
python-pytun===2.2.1
|
||||||
|
python-qpid-proton===0.14.0
|
||||||
|
python-saharaclient===0.18.0
|
||||||
|
python-searchlightclient===1.0.0
|
||||||
|
python-senlinclient===1.0.0
|
||||||
|
python-smaugclient===0.0.8
|
||||||
|
python-solumclient===2.0.1
|
||||||
|
python-statsd===2.0.0
|
||||||
|
python-subunit===1.2.0
|
||||||
|
python-swiftclient===3.1.0
|
||||||
|
python-tackerclient===0.7.0
|
||||||
|
python-troveclient===2.5.0
|
||||||
|
python-watcherclient===0.25.1
|
||||||
|
python-zaqarclient===1.2.0
|
||||||
|
pytz===2016.6.1
|
||||||
|
pyudev===0.21.0
|
||||||
|
pyzabbix===0.7.4
|
||||||
|
pyzmq===15.4.0
|
||||||
|
qpid-python===0.32.1;python_version=='2.7'
|
||||||
|
rcssmin===1.0.6
|
||||||
|
redis===2.10.5
|
||||||
|
reno===1.9.0
|
||||||
|
repoze.lru===0.6
|
||||||
|
repoze.who===2.3
|
||||||
|
requests===2.11.1
|
||||||
|
requests-aws===0.1.8
|
||||||
|
requests-kerberos===0.10.0;python_version=='2.7'
|
||||||
|
requests-mock===1.0.0
|
||||||
|
requests-unixsocket===0.1.5
|
||||||
|
requestsexceptions===1.1.3
|
||||||
|
restructuredtext-lint===0.17.0
|
||||||
|
retrying===1.3.3
|
||||||
|
rfc3986===0.4.1
|
||||||
|
rjsmin===1.0.12
|
||||||
|
rsa===3.4.2
|
||||||
|
rtslib-fb===2.1.58
|
||||||
|
ryu===4.5
|
||||||
|
scikit-learn===0.17.1
|
||||||
|
scipy===0.18.0
|
||||||
|
scp===0.10.2
|
||||||
|
selenium===2.53.6
|
||||||
|
semantic-version===2.5.0
|
||||||
|
seqdiag===0.9.5
|
||||||
|
simplegeneric===0.8.1
|
||||||
|
simplejson===3.8.2
|
||||||
|
singledispatch===3.4.0.3;python_version=='2.7'
|
||||||
|
six===1.10.0
|
||||||
|
smmap===0.9.0
|
||||||
|
spec-cleaner===0.9.0
|
||||||
|
sphinxcontrib-blockdiag===1.5.5
|
||||||
|
sphinxcontrib-httpdomain===1.5.0
|
||||||
|
sphinxcontrib-pecanwsme===0.8.0
|
||||||
|
sphinxcontrib-seqdiag===0.8.5
|
||||||
|
sqlalchemy-migrate===0.10.0
|
||||||
|
sqlparse===0.2.1
|
||||||
|
stevedore===1.17.1
|
||||||
|
suds-jurko===0.6
|
||||||
|
sympy===1.0
|
||||||
|
sysv-ipc===0.7.0
|
||||||
|
tablib===0.11.2
|
||||||
|
taskflow===2.6.1
|
||||||
|
tempest===12.1.0
|
||||||
|
tempest-lib===1.0.0
|
||||||
|
tenacity===3.0.0
|
||||||
|
termcolor===1.1.0
|
||||||
|
testrepository===0.0.20
|
||||||
|
testresources===2.0.1
|
||||||
|
testscenarios===0.5.0
|
||||||
|
testtools===2.2.0
|
||||||
|
thriftpy===0.3.9;python_version=='2.7'
|
||||||
|
tooz===1.43.2
|
||||||
|
tosca-parser===0.6.0
|
||||||
|
traceback2===1.4.0
|
||||||
|
tripleo-common===5.4.4
|
||||||
|
trollius===2.1
|
||||||
|
txaio===2.5.1
|
||||||
|
tzlocal===1.2.2
|
||||||
|
ujson===1.35
|
||||||
|
unicodecsv===0.14.1;python_version=='2.7'
|
||||||
|
unittest2===1.1.0
|
||||||
|
uritemplate===0.6
|
||||||
|
urllib3===1.16
|
||||||
|
virtualenv===15.0.3
|
||||||
|
voluptuous===0.9.3
|
||||||
|
waitress===1.0.0
|
||||||
|
warlock===1.2.0
|
||||||
|
weakrefmethod===1.0.3;python_version=='2.7'
|
||||||
|
webcolors===1.5
|
||||||
|
websocket-client===0.37.0
|
||||||
|
websockify===0.8.0
|
||||||
|
wrapt===1.10.8
|
||||||
|
ws4py===0.3.4
|
||||||
|
wsgi-intercept===1.3.1
|
||||||
|
xattr===0.8.0
|
||||||
|
xmltodict===0.10.2
|
||||||
|
xvfbwrapper===0.2.8
|
||||||
|
yaql===1.1.2
|
||||||
|
zake===0.2.2
|
||||||
|
zope.interface===4.3.1
|
||||||
|
virtualbmc===0.1.0
|
Loading…
Reference in New Issue