Hello community,
here is the log from the commit of package python-manilaclient for
openSUSE:Factory checked in at 2015-12-21 12:04:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-manilaclient (Old)
and /work/SRC/openSUSE:Factory/.python-manilaclient.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-manilaclient"
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-manilaclient/python-manilaclient.changes
2015-10-30 13:42:39.000000000 +0100
+++
/work/SRC/openSUSE:Factory/.python-manilaclient.new/python-manilaclient.changes
2015-12-21 12:04:02.000000000 +0100
@@ -1,0 +2,11 @@
+Mon Nov 16 14:12:08 UTC 2015 - [email protected]
+
+- update to 1.5.0:
+ * Add Keystone v3 API support
+ * Incorrect help of export_path for the manage utility
+ * Updated from global requirements
+ * Fix args parsing for quota-class-update
+ * Change Manilaclient to use --os-region-name param
+ * Updated from global requirements
+
+-------------------------------------------------------------------
Old:
----
python-manilaclient-1.4.0.tar.gz
New:
----
python-manilaclient-1.5.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-manilaclient.spec ++++++
--- /var/tmp/diff_new_pack.SgZLIc/_old 2015-12-21 12:04:03.000000000 +0100
+++ /var/tmp/diff_new_pack.SgZLIc/_new 2015-12-21 12:04:03.000000000 +0100
@@ -19,7 +19,7 @@
%define component manilaclient
Name: python-%{component}
-Version: 1.4.0
+Version: 1.5.0
Release: 0
Summary: Openstack shared file system service (Manila) API Client
License: Apache-2.0
++++++ python-manilaclient-1.4.0.tar.gz -> python-manilaclient-1.5.0.tar.gz
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-manilaclient-1.4.0/AUTHORS
new/python-manilaclient-1.5.0/AUTHORS
--- old/python-manilaclient-1.4.0/AUTHORS 2015-09-18 16:23:34.000000000
+0200
+++ new/python-manilaclient-1.5.0/AUTHORS 2015-10-19 21:25:25.000000000
+0200
@@ -28,6 +28,7 @@
Yulia Portnova <[email protected]>
bswartz <[email protected]>
cFouts <[email protected]>
+nidhimittalhada <[email protected]>
vik <vik@ubuntu.(none)>
vponomaryov <[email protected]>
zhongjun <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-manilaclient-1.4.0/ChangeLog
new/python-manilaclient-1.5.0/ChangeLog
--- old/python-manilaclient-1.4.0/ChangeLog 2015-09-18 16:23:34.000000000
+0200
+++ new/python-manilaclient-1.5.0/ChangeLog 2015-10-19 21:25:25.000000000
+0200
@@ -1,6 +1,16 @@
CHANGES
=======
+1.5.0
+-----
+
+* Add Keystone v3 API support
+* Incorrect help of export_path for the manage utility
+* Updated from global requirements
+* Fix args parsing for quota-class-update
+* Change Manilaclient to use --os-region-name param
+* Updated from global requirements
+
1.4.0
-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-manilaclient-1.4.0/PKG-INFO
new/python-manilaclient-1.5.0/PKG-INFO
--- old/python-manilaclient-1.4.0/PKG-INFO 2015-09-18 16:23:34.000000000
+0200
+++ new/python-manilaclient-1.5.0/PKG-INFO 2015-10-19 21:25:25.000000000
+0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: python-manilaclient
-Version: 1.4.0
+Version: 1.5.0
Summary: Client library for OpenStack Manila API.
Home-page: http://www.openstack.org/
Author: OpenStack Contributors
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-manilaclient-1.4.0/manilaclient/shell.py
new/python-manilaclient-1.5.0/manilaclient/shell.py
--- old/python-manilaclient-1.4.0/manilaclient/shell.py 2015-09-18
16:22:36.000000000 +0200
+++ new/python-manilaclient-1.5.0/manilaclient/shell.py 2015-10-19
21:24:31.000000000 +0200
@@ -139,6 +139,13 @@
action='store_true',
help='Delete cached password and auth token.')
+ parser.add_argument('--os-user-id',
+ metavar='<auth-user-id>',
+ default=cliutils.env('OS_USER_ID'),
+ help=('Defaults to env [OS_USER_ID].'))
+ parser.add_argument('--os_user_id',
+ help=argparse.SUPPRESS)
+
parser.add_argument('--os-username',
metavar='<auth-user-name>',
default=cliutils.env('OS_USERNAME',
@@ -163,6 +170,16 @@
parser.add_argument('--os_tenant_name',
help=argparse.SUPPRESS)
+ parser.add_argument('--os-project-name',
+ metavar='<auth-project-name>',
+ default=cliutils.env('OS_PROJECT_NAME'),
+ help=('Another way to specify tenant name. '
+ 'This option is mutually exclusive with '
+ '--os-tenant-name. '
+ 'Defaults to env[OS_PROJECT_NAME].'))
+ parser.add_argument('--os_project_name',
+ help=argparse.SUPPRESS)
+
parser.add_argument('--os-tenant-id',
metavar='<auth-tenant-id>',
default=cliutils.env('OS_TENANT_ID',
@@ -171,6 +188,46 @@
parser.add_argument('--os_tenant_id',
help=argparse.SUPPRESS)
+ parser.add_argument('--os-project-id',
+ metavar='<auth-project-id>',
+ default=cliutils.env('OS_PROJECT_ID'),
+ help=('Another way to specify tenant ID. '
+ 'This option is mutually exclusive with '
+ '--os-tenant-id. '
+ 'Defaults to env[OS_PROJECT_ID].'))
+ parser.add_argument('--os_project_id',
+ help=argparse.SUPPRESS)
+
+ parser.add_argument('--os-user-domain-id',
+ metavar='<auth-user-domain-id>',
+ default=cliutils.env('OS_USER_DOMAIN_ID'),
+ help=('OpenStack user domain ID. '
+ 'Defaults to env[OS_USER_DOMAIN_ID].'))
+ parser.add_argument('--os_user_domain_id',
+ help=argparse.SUPPRESS)
+
+ parser.add_argument('--os-user-domain-name',
+ metavar='<auth-user-domain-name>',
+ default=cliutils.env('OS_USER_DOMAIN_NAME'),
+ help=('OpenStack user domain name. '
+ 'Defaults to env[OS_USER_DOMAIN_NAME].'))
+ parser.add_argument('--os_user_domain_name',
+ help=argparse.SUPPRESS)
+
+ parser.add_argument('--os-project-domain-id',
+ metavar='<auth-project-domain-id>',
+ default=cliutils.env('OS_PROJECT_DOMAIN_ID'),
+ help='Defaults to env[OS_PROJECT_DOMAIN_ID].')
+ parser.add_argument('--os_project_domain_id',
+ help=argparse.SUPPRESS)
+
+ parser.add_argument('--os-project-domain-name',
+ metavar='<auth-project-domain-name>',
+ default=cliutils.env('OS_PROJECT_DOMAIN_NAME'),
+ help='Defaults to env[OS_PROJECT_DOMAIN_NAME].')
+ parser.add_argument('--os_project_domain_name',
+ help=argparse.SUPPRESS)
+
parser.add_argument('--os-auth-url',
metavar='<auth-url>',
default=cliutils.env('OS_AUTH_URL',
@@ -246,6 +303,13 @@
default=0,
help='Number of retries.')
+ parser.add_argument('--os-cert',
+ metavar='<certificate>',
+ default=cliutils.env('OS_CERT'),
+ help='Defaults to env[OS_CERT].')
+ parser.add_argument('--os_cert',
+ help=argparse.SUPPRESS)
+
return parser
def get_subcommand_parser(self, version):
@@ -386,12 +450,18 @@
(os_username, os_password, os_tenant_name, os_auth_url,
os_region_name, os_tenant_id, endpoint_type, insecure,
service_type, service_name, share_service_name,
- cacert, os_cache, os_reset_cache) = (
+ cacert, os_cache, os_reset_cache, os_user_id, os_user_domain_id,
+ os_user_domain_name, os_project_domain_id, os_project_domain_name,
+ os_project_name, os_project_id, os_cert) = (
args.os_username, args.os_password, args.os_tenant_name,
args.os_auth_url, args.os_region_name, args.os_tenant_id,
args.endpoint_type, args.insecure, args.service_type,
args.service_name, args.share_service_name,
- args.os_cacert, args.os_cache, args.os_reset_cache)
+ args.os_cacert, args.os_cache, args.os_reset_cache,
+ args.os_user_id, args.os_user_domain_id, args.os_user_domain_name,
+ args.os_project_domain_id, args.os_project_domain_name,
+ args.os_project_name, args.os_project_id, args.os_cert,
+ )
if share_service_name:
service_name = share_service_name
@@ -403,29 +473,19 @@
service_type = DEFAULT_MANILA_SERVICE_TYPE
service_type = cliutils.get_service_type(args.func) or service_type
- # FIXME(usrleon): Here should be restrict for project id same as
- # for os_username or os_password but for compatibility it is not.
-
- if not cliutils.isunauthenticated(args.func):
- if not os_username:
- raise exc.CommandError(
- "You must provide a username "
- "via either --os-username or env[OS_USERNAME]")
-
- if not (os_tenant_name or os_tenant_id):
- raise exc.CommandError("You must provide a tenant_id "
- "via either --os-tenant-id or "
- "env[OS_TENANT_ID]")
-
- if not os_auth_url:
- raise exc.CommandError(
- "You must provide an auth url "
- "via either --os-auth-url or env[OS_AUTH_URL]")
-
- if not (os_tenant_name or os_tenant_id):
+ if not (os_tenant_name or os_tenant_id or os_project_name or
+ os_project_id):
raise exc.CommandError(
- "You must provide a tenant_id "
- "via either --os-tenant-id or env[OS_TENANT_ID]")
+ "You must provide a tenant_name, tenant_id, "
+ "project_id or project_name (with "
+ "project_domain_name or project_domain_id) via "
+ "--os-tenant-name (env[OS_TENANT_NAME]), "
+ "--os-tenant-id (env[OS_TENANT_ID]), "
+ "--os-project-id (env[OS_PROJECT_ID]), "
+ "--os-project-name (env[OS_PROJECT_NAME]), "
+ "--os-project-domain-id (env[OS_PROJECT_DOMAIN_ID]) and "
+ "--os-project-domain-name (env[OS_PROJECT_DOMAIN_NAME])."
+ )
if not os_auth_url:
raise exc.CommandError(
@@ -434,11 +494,12 @@
self.cs = client.Client(options.os_share_api_version,
username=os_username,
- api_key=os_password,
- project_name=os_tenant_name,
+ password=os_password,
+ project_name=os_project_name or os_tenant_name,
auth_url=os_auth_url,
- insecure=insecure, region_name=os_region_name,
- tenant_id=os_tenant_id,
+ insecure=insecure,
+ region_name=os_region_name,
+ tenant_id=os_project_id or os_tenant_id,
endpoint_type=endpoint_type,
extensions=self.extensions,
service_type=service_type,
@@ -448,7 +509,13 @@
cacert=cacert,
use_keyring=os_cache,
force_new_token=os_reset_cache,
- api_version=options.os_share_api_version)
+ api_version=options.os_share_api_version,
+ user_id=os_user_id,
+ user_domain_id=os_user_domain_id,
+ user_domain_name=os_user_domain_name,
+ project_domain_id=os_project_domain_id,
+ project_domain_name=os_project_domain_name,
+ cert=os_cert)
args.func(self.cs, args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-manilaclient-1.4.0/manilaclient/tests/unit/test_shell.py
new/python-manilaclient-1.5.0/manilaclient/tests/unit/test_shell.py
--- old/python-manilaclient-1.4.0/manilaclient/tests/unit/test_shell.py
2015-09-18 16:22:36.000000000 +0200
+++ new/python-manilaclient-1.5.0/manilaclient/tests/unit/test_shell.py
2015-10-19 21:24:31.000000000 +0200
@@ -13,16 +13,20 @@
import re
import sys
+import ddt
import fixtures
+import mock
from six import moves
from testtools import matchers
+from manilaclient.common import constants
from manilaclient import exceptions
from manilaclient import shell
from manilaclient.tests.unit import utils
-class ShellTest(utils.TestCase):
[email protected]
+class OpenstackManilaShellTest(utils.TestCase):
FAKE_ENV = {
'OS_USERNAME': 'username',
@@ -32,11 +36,9 @@
}
# Patch os.environ to avoid required auth info.
- def setUp(self):
- super(ShellTest, self).setUp()
- for var in self.FAKE_ENV:
- self.useFixture(fixtures.EnvironmentVariable(var,
- self.FAKE_ENV[var]))
+ def set_env_vars(self, env_vars):
+ for k, v in env_vars.items():
+ self.useFixture(fixtures.EnvironmentVariable(k, v))
def shell(self, argstr):
orig = sys.stdout
@@ -54,6 +56,70 @@
return out
+ @ddt.data(
+ {},
+ {'OS_AUTH_URL': 'http://foo.bar'},
+ {'OS_AUTH_URL': 'http://foo.bar', 'OS_USERNAME': 'foo'},
+ {'OS_AUTH_URL': 'http://foo.bar', 'OS_USERNAME': 'foo_user',
+ 'OS_PASSWORD': 'foo_password'},
+ {'OS_TENANT_NAME': 'foo_tenant', 'OS_USERNAME': 'foo_user',
+ 'OS_PASSWORD': 'foo_password'},
+ )
+ def test_main_failure(self, env_vars):
+ self.set_env_vars(env_vars)
+ with mock.patch.object(shell, 'client') as mock_client:
+ self.assertRaises(exceptions.CommandError, self.shell, 'list')
+ self.assertFalse(mock_client.Client.called)
+
+ def test_main_success(self):
+ env_vars = {
+ 'OS_AUTH_URL': 'http://foo.bar',
+ 'OS_USERNAME': 'foo_username',
+ 'OS_USER_ID': 'foo_user_id',
+ 'OS_PASSWORD': 'foo_password',
+ 'OS_TENANT_NAME': 'foo_tenant',
+ 'OS_TENANT_ID': 'foo_tenant_id',
+ 'OS_PROJECT_NAME': 'foo_project',
+ 'OS_PROJECT_ID': 'foo_project_id',
+ 'OS_PROJECT_DOMAIN_ID': 'foo_project_domain_id',
+ 'OS_PROJECT_DOMAIN_NAME': 'foo_project_domain_name',
+ 'OS_PROJECT_DOMAIN_ID': 'foo_project_domain_id',
+ 'OS_USER_DOMAIN_NAME': 'foo_user_domain_name',
+ 'OS_USER_DOMAIN_ID': 'foo_user_domain_id',
+ 'OS_CERT': 'foo_cert',
+ }
+ self.set_env_vars(env_vars)
+ with mock.patch.object(shell, 'client') as mock_client:
+
+ self.shell('list')
+
+ mock_client.Client.assert_called_once_with(
+ constants.MAX_API_VERSION,
+ username=env_vars['OS_USERNAME'],
+ password=env_vars['OS_PASSWORD'],
+ project_name=env_vars['OS_PROJECT_NAME'],
+ auth_url=env_vars['OS_AUTH_URL'],
+ insecure=False,
+ region_name='',
+ tenant_id=env_vars['OS_PROJECT_ID'],
+ endpoint_type='publicURL',
+ extensions=mock.ANY,
+ service_type='sharev2',
+ service_name='',
+ retries=0,
+ http_log_debug=False,
+ cacert=None,
+ use_keyring=False,
+ force_new_token=False,
+ api_version=constants.MAX_API_VERSION,
+ user_id=env_vars['OS_USER_ID'],
+ user_domain_id=env_vars['OS_USER_DOMAIN_ID'],
+ user_domain_name=env_vars['OS_USER_DOMAIN_NAME'],
+ project_domain_id=env_vars['OS_PROJECT_DOMAIN_ID'],
+ project_domain_name=env_vars['OS_PROJECT_DOMAIN_NAME'],
+ cert=env_vars['OS_CERT'],
+ )
+
def test_help_unknown_command(self):
self.assertRaises(exceptions.CommandError, self.shell, 'help foofoo')
@@ -79,3 +145,20 @@
for r in required:
self.assertThat(help_text,
matchers.MatchesRegex(r, re.DOTALL | re.MULTILINE))
+
+ def test_common_args_in_help_message(self):
+ expected_args = (
+ '--version', '', '--debug', '--os-cache', '--os-reset-cache',
+ '--os-user-id', '--os-username', '--os-password',
+ '--os-tenant-name', '--os-project-name', '--os-tenant-id',
+ '--os-project-id', '--os-user-domain-id', '--os-user-domain-name',
+ '--os-project-domain-id', '--os-project-domain-name',
+ '--os-auth-url', '--os-region-name', '--service-type',
+ '--service-name', '--share-service-name', '--endpoint-type',
+ '--os-share-api-version', '--os-cacert', '--retries', '--os-cert',
+ )
+
+ help_text = self.shell('help')
+
+ for expected_arg in expected_args:
+ self.assertIn(expected_arg, help_text)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-manilaclient-1.4.0/manilaclient/tests/unit/utils.py
new/python-manilaclient-1.5.0/manilaclient/tests/unit/utils.py
--- old/python-manilaclient-1.4.0/manilaclient/tests/unit/utils.py
2015-09-18 16:22:36.000000000 +0200
+++ new/python-manilaclient-1.5.0/manilaclient/tests/unit/utils.py
2015-10-19 21:24:31.000000000 +0200
@@ -13,6 +13,7 @@
import os
import fixtures
+import mock
import requests
import testtools
@@ -33,6 +34,20 @@
stderr = self.useFixture(fixtures.StringStream('stderr')).stream
self.useFixture(fixtures.MonkeyPatch('sys.stderr', stderr))
+ def mock_object(self, obj, attr_name, new_attr=None, **kwargs):
+ """Mock an object attribute.
+
+ Use python mock to mock an object attribute
+ Mocks the specified objects attribute with the given value.
+ Automatically performs 'addCleanup' for the mock.
+ """
+ if not new_attr:
+ new_attr = mock.Mock()
+ patcher = mock.patch.object(obj, attr_name, new_attr, **kwargs)
+ patcher.start()
+ self.addCleanup(patcher.stop)
+ return new_attr
+
class TestResponse(requests.Response):
"""Class used to wrap requests.Response.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-manilaclient-1.4.0/manilaclient/tests/unit/v1/test_client.py
new/python-manilaclient-1.5.0/manilaclient/tests/unit/v1/test_client.py
--- old/python-manilaclient-1.4.0/manilaclient/tests/unit/v1/test_client.py
2015-09-18 16:22:36.000000000 +0200
+++ new/python-manilaclient-1.5.0/manilaclient/tests/unit/v1/test_client.py
2015-10-19 21:24:31.000000000 +0200
@@ -12,7 +12,8 @@
import uuid
-from keystoneclient import session
+import ddt
+import mock
from manilaclient.common import constants
from manilaclient import exceptions
@@ -20,14 +21,22 @@
from manilaclient.v1 import client
[email protected]
class ClientTest(utils.TestCase):
+ def setUp(self):
+ super(self.__class__, self).setUp()
+ self.catalog = {
+ 'share': [
+ {'region': 'TestRegion', 'publicURL': 'http://1.2.3.4'},
+ ],
+ }
def test_adapter_properties(self):
# sample of properties, there are many more
retries = 3
base_url = uuid.uuid4().hex
- s = session.Session()
+ s = client.session.Session()
c = client.Client(session=s, api_version=constants.MAX_API_VERSION,
service_catalog_url=base_url, retries=retries,
input_auth_token='token')
@@ -41,7 +50,7 @@
input_auth_token="token")
def test_auth_via_token_and_session(self):
- s = session.Session()
+ s = client.session.Session()
base_url = uuid.uuid4().hex
c = client.Client(input_auth_token='token',
service_catalog_url=base_url, session=s,
@@ -59,3 +68,229 @@
self.assertIsNotNone(c.client)
self.assertIsNone(c.keystone_client)
+
+ @mock.patch.object(client.Client, '_get_keystone_client', mock.Mock())
+ def test_valid_region_name(self):
+ self.mock_object(client.httpclient, 'HTTPClient')
+ kc = client.Client._get_keystone_client.return_value
+ kc.service_catalog = mock.Mock()
+ kc.service_catalog.get_endpoints = mock.Mock(return_value=self.catalog)
+ c = client.Client(api_version=constants.MAX_API_VERSION,
+ region_name='TestRegion')
+ self.assertTrue(client.Client._get_keystone_client.called)
+ kc.service_catalog.get_endpoints.assert_called_once_with('share')
+ client.httpclient.HTTPClient.assert_called_once_with(
+ 'http://1.2.3.4',
+ mock.ANY,
+ 'python-manilaclient',
+ insecure=False,
+ cacert=None,
+ timeout=None,
+ retries=None,
+ http_log_debug=False,
+ api_version=constants.MAX_API_VERSION)
+ self.assertIsNotNone(c.client)
+
+ @mock.patch.object(client.Client, '_get_keystone_client', mock.Mock())
+ def test_nonexistent_region_name(self):
+ kc = client.Client._get_keystone_client.return_value
+ kc.service_catalog = mock.Mock()
+ kc.service_catalog.get_endpoints = mock.Mock(return_value=self.catalog)
+ self.assertRaises(RuntimeError, client.Client,
+ api_version=constants.MAX_API_VERSION,
+ region_name='FakeRegion')
+
+ self.assertTrue(client.Client._get_keystone_client.called)
+ kc.service_catalog.get_endpoints.assert_called_once_with('share')
+
+ @mock.patch.object(client.Client, '_get_keystone_client', mock.Mock())
+ def test_regions_with_same_name(self):
+ self.mock_object(client.httpclient, 'HTTPClient')
+ catalog = {
+ 'share': [
+ {'region': 'FirstRegion', 'publicURL': 'http://1.2.3.4'},
+ {'region': 'secondregion', 'publicURL': 'http://1.1.1.1'},
+ {'region': 'SecondRegion', 'publicURL': 'http://2.2.2.2'},
+ ],
+ }
+ kc = client.Client._get_keystone_client.return_value
+ kc.service_catalog = mock.Mock()
+ kc.service_catalog.get_endpoints = mock.Mock(return_value=catalog)
+ c = client.Client(api_version=constants.MAX_API_VERSION,
+ region_name='SecondRegion')
+ self.assertTrue(client.Client._get_keystone_client.called)
+ kc.service_catalog.get_endpoints.assert_called_once_with('share')
+ client.httpclient.HTTPClient.assert_called_once_with(
+ 'http://2.2.2.2',
+ mock.ANY,
+ 'python-manilaclient',
+ insecure=False,
+ cacert=None,
+ timeout=None,
+ retries=None,
+ http_log_debug=False,
+ api_version=constants.MAX_API_VERSION)
+ self.assertIsNotNone(c.client)
+
+ def _get_client_args(self, **kwargs):
+ client_args = {
+ 'auth_url': 'both',
+ 'api_version': constants.MAX_API_VERSION,
+ 'username': 'fake_username',
+ 'service_type': 'sharev2',
+ 'region_name': 'SecondRegion',
+ 'input_auth_token': None,
+ 'session': None,
+ 'service_catalog_url': None,
+ 'user_id': 'foo_user_id',
+ 'user_domain_name': 'foo_user_domain_name',
+ 'user_domain_id': 'foo_user_domain_id',
+ 'project_name': 'foo_project_name',
+ 'project_domain_name': 'foo_project_domain_name',
+ 'project_domain_id': 'foo_project_domain_id',
+ 'endpoint_type': 'publicUrl',
+ 'cert': 'foo_cert',
+ }
+ client_args.update(kwargs)
+ return client_args
+
+ @ddt.data(
+ {'auth_url': 'only_v3', 'api_key': 'password_backward_compat',
+ 'endpoint_type': 'publicURL', 'project_id': 'foo_tenant_project_id'},
+ {'password': 'renamed_api_key', 'endpoint_type': 'public',
+ 'tenant_id': 'foo_tenant_project_id'},
+ )
+ def test_client_init_no_session_no_auth_token_v3(self, kwargs):
+ def fake_url_for(version):
+ if version == 'v3.0':
+ return 'url_v3.0'
+ elif version == 'v2.0' and self.auth_url == 'both':
+ return 'url_v2.0'
+ else:
+ return None
+
+ self.mock_object(client.httpclient, 'HTTPClient')
+ self.mock_object(client.ks_client, 'Client')
+ self.mock_object(client.discover, 'Discover')
+ self.mock_object(client.session, 'Session')
+ client_args = self._get_client_args(**kwargs)
+ self.auth_url = client_args['auth_url']
+ catalog = {
+ 'share': [
+ {'region': 'SecondRegion', 'region_id': 'SecondRegion',
+ 'url': 'http://4.4.4.4', 'interface': 'public',
+ },
+ ],
+ 'sharev2': [
+ {'region': 'FirstRegion', 'interface': 'public',
+ 'region_id': 'SecondRegion', 'url': 'http://1.1.1.1'},
+ {'region': 'secondregion', 'interface': 'public',
+ 'region_id': 'SecondRegion', 'url': 'http://2.2.2.2'},
+ {'region': 'SecondRegion', 'interface': 'internal',
+ 'region_id': 'SecondRegion', 'url': 'http://3.3.3.1'},
+ {'region': 'SecondRegion', 'interface': 'public',
+ 'region_id': 'SecondRegion', 'url': 'http://3.3.3.3'},
+ {'region': 'SecondRegion', 'interface': 'admin',
+ 'region_id': 'SecondRegion', 'url': 'http://3.3.3.2'},
+ ],
+ }
+ client.discover.Discover.return_value.url_for.side_effect = (
+ fake_url_for)
+ client.ks_client.Client.return_value.auth_token.return_value = (
+ 'fake_token')
+ mocked_ks_client = client.ks_client.Client.return_value
+ mocked_ks_client.service_catalog.get_endpoints.return_value = catalog
+
+ client.Client(**client_args)
+
+ client.httpclient.HTTPClient.assert_called_once_with(
+ 'http://3.3.3.3', mock.ANY, 'python-manilaclient', insecure=False,
+ cacert=None, timeout=None, retries=None, http_log_debug=False,
+ api_version=constants.MAX_API_VERSION)
+ client.ks_client.Client.assert_called_once_with(
+ version=(3, 0), auth_url='url_v3.0',
+ username=client_args['username'],
+ password=client_args.get('password', client_args.get('api_key')),
+ user_id=client_args['user_id'],
+ user_domain_name=client_args['user_domain_name'],
+ user_domain_id=client_args['user_domain_id'],
+ project_id=client_args.get('tenant_id',
+ client_args.get('project_id')),
+ project_name=client_args['project_name'],
+ project_domain_name=client_args['project_domain_name'],
+ project_domain_id=client_args['project_domain_id'],
+ region_name=client_args['region_name'],
+ )
+ mocked_ks_client.service_catalog.get_endpoints.assert_called_once_with(
+ client_args['service_type'])
+ mocked_ks_client.authenticate.assert_called_once_with()
+
+ @ddt.data(
+ {'auth_url': 'only_v2', 'api_key': 'foo', 'project_id': 'bar'},
+ {'password': 'foo', 'tenant_id': 'bar'},
+ )
+ def test_client_init_no_session_no_auth_token_v2(self, kwargs):
+ self.mock_object(client.httpclient, 'HTTPClient')
+ self.mock_object(client.ks_client, 'Client')
+ self.mock_object(client.discover, 'Discover')
+ self.mock_object(client.session, 'Session')
+ client_args = self._get_client_args(**kwargs)
+ self.auth_url = client_args['auth_url']
+ catalog = {
+ 'share': [
+ {'region': 'SecondRegion', 'publicUrl': 'http://4.4.4.4'},
+ ],
+ 'sharev2': [
+ {'region': 'FirstRegion', 'publicUrl': 'http://1.1.1.1'},
+ {'region': 'secondregion', 'publicUrl': 'http://2.2.2.2'},
+ {'region': 'SecondRegion', 'internalUrl': 'http://3.3.3.1',
+ 'publicUrl': 'http://3.3.3.3', 'adminUrl': 'http://3.3.3.2'},
+ ],
+ }
+ client.discover.Discover.return_value.url_for.side_effect = (
+ lambda v: 'url_v2.0' if v == 'v2.0' else None)
+ client.ks_client.Client.return_value.auth_token.return_value = (
+ 'fake_token')
+ mocked_ks_client = client.ks_client.Client.return_value
+ mocked_ks_client.service_catalog.get_endpoints.return_value = catalog
+
+ client.Client(**client_args)
+
+ client.httpclient.HTTPClient.assert_called_once_with(
+ 'http://3.3.3.3', mock.ANY, 'python-manilaclient', insecure=False,
+ cacert=None, timeout=None, retries=None, http_log_debug=False,
+ api_version=constants.MAX_API_VERSION)
+ client.ks_client.Client.assert_called_once_with(
+ version=(2, 0), auth_url='url_v2.0',
+ username=client_args['username'],
+ password=client_args.get('password', client_args.get('api_key')),
+ tenant_id=client_args.get('tenant_id',
+ client_args.get('project_id')),
+ tenant_name=client_args['project_name'],
+ region_name=client_args['region_name'], cert=client_args['cert'],
+ use_keyring=False, force_new_token=False, stale_duration=300)
+ mocked_ks_client.service_catalog.get_endpoints.assert_called_once_with(
+ client_args['service_type'])
+ mocked_ks_client.authenticate.assert_called_once_with()
+
+ @mock.patch.object(client.ks_client, 'Client', mock.Mock())
+ @mock.patch.object(client.discover, 'Discover', mock.Mock())
+ @mock.patch.object(client.session, 'Session', mock.Mock())
+ def test_client_init_no_session_no_auth_token_endpoint_not_found(self):
+ self.mock_object(client.httpclient, 'HTTPClient')
+ client_args = self._get_client_args(
+ auth_urli='fake_url',
+ password='foo_password',
+ tenant_id='foo_tenant_id')
+ client.discover.Discover.return_value.url_for.return_value = None
+ mocked_ks_client = client.ks_client.Client.return_value
+
+ self.assertRaises(
+ exceptions.CommandError, client.Client, **client_args)
+
+ self.assertTrue(client.session.Session.called)
+ self.assertTrue(client.discover.Discover.called)
+ self.assertFalse(client.httpclient.HTTPClient.called)
+ self.assertFalse(client.ks_client.Client.called)
+ self.assertFalse(mocked_ks_client.service_catalog.get_endpoints.called)
+ self.assertFalse(mocked_ks_client.authenticate.called)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-manilaclient-1.4.0/manilaclient/tests/unit/v1/test_shell.py
new/python-manilaclient-1.5.0/manilaclient/tests/unit/v1/test_shell.py
--- old/python-manilaclient-1.4.0/manilaclient/tests/unit/v1/test_shell.py
2015-09-18 16:22:37.000000000 +0200
+++ new/python-manilaclient-1.5.0/manilaclient/tests/unit/v1/test_shell.py
2015-10-19 21:24:31.000000000 +0200
@@ -99,6 +99,69 @@
def assert_called_anytime(self, method, url, body=None):
return self.shell.cs.assert_called_anytime(method, url, body)
+ @ddt.data(
+ {'serviceCatalog': [{'name': 'foo', 'endpoints': ['bar']}]},
+ {'catalog': [{'name': 'foo', 'endpoints': ['bar']}]},
+ {'serviceCatalog': [{'name': 'foo', 'endpoints': ['bar']}],
+ 'catalog': 'fake'},
+ )
+ def test_do_endpoints(self, catalog):
+ cs = type('Fake', (object, ), {'keystone_client': type(
+ 'FakeKeystoneClient', (object, ), {
+ 'service_catalog': type('FakeCatalog', (object, ), {
+ 'catalog': catalog})})})
+
+ with mock.patch.object(
+ shell_v1.cliutils, 'print_dict') as mock_print_dict:
+ shell_v1.do_endpoints(cs, ('no', 'args'))
+
+ mock_print_dict.assert_has_calls([
+ mock.call('bar', 'foo'),
+ ])
+
+ @ddt.data(
+ {'version': 'v3',
+ 'user': 'foo_user',
+ 'issued_at': 'foo_issued_at',
+ 'expires_at': 'foo_expires',
+ 'auth_token': 'foo_ids',
+ 'audit_ids': 'foo_audit_ids',
+ 'project': 'foo_tenant_project',
+ 'redundant_key': 'should not be used',
+ },
+ {'version': 'v2.0',
+ 'user': 'foo_user',
+ 'token': {
+ 'issued_at': 'foo_issued_at',
+ 'expires': 'foo_expires',
+ 'id': 'foo_ids',
+ 'audit_ids': 'foo_audit_ids',
+ 'tenant': 'foo_tenant_project',
+ },
+ },
+ )
+ def test_do_credentials(self, catalog):
+ cs = type('Fake', (object, ), {'keystone_client': type(
+ 'FakeKeystoneClient', (object, ), {
+ 'service_catalog': type('FakeCatalog', (object, ), {
+ 'catalog': catalog})})})
+ expected_call_data = {
+ 'issued_at': 'foo_issued_at',
+ 'expires': 'foo_expires',
+ 'id': 'foo_ids',
+ 'audit_ids': 'foo_audit_ids',
+ 'tenant': 'foo_tenant_project',
+ }
+
+ with mock.patch.object(
+ shell_v1.cliutils, 'print_dict') as mock_print_dict:
+ shell_v1.do_credentials(cs, ('no', 'args'))
+
+ mock_print_dict.assert_has_calls([
+ mock.call('foo_user', 'User Credentials'),
+ mock.call(expected_call_data, 'Token'),
+ ])
+
def test_list(self):
self.run_command('list')
# NOTE(jdg): we default to detail currently
@@ -1440,3 +1503,29 @@
self.run_command('cg-snapshot-delete --force fake-cg')
self.assert_called('POST', '/cgsnapshots/1234/action',
{'os-force_delete': None})
+
+ @ddt.data(
+ {'--shares': 5},
+ {'--snapshots': 5},
+ {'--gigabytes': 5},
+ {'--snapshot-gigabytes': 5},
+ {'--snapshot_gigabytes': 5},
+ {'--share-networks': 5},
+ {'--share_networks': 5},
+ {'--shares': 5,
+ '--snapshots': 5,
+ '--gigabytes': 5,
+ '--snapshot-gigabytes': 5,
+ '--share-networks': 5})
+ def test_quota_class_update(self, data):
+ cmd = 'quota-class-update test'
+ expected = dict()
+ for k, v in data.items():
+ cmd += ' %(arg)s %(val)s' % {'arg': k, 'val': v}
+ expected[k[2:].replace('-', '_')] = v
+ expected['class_name'] = 'test'
+ expected = dict(quota_class_set=expected)
+
+ self.run_command(cmd)
+ self.assert_called('PUT', '/os-quota-class-sets/test',
+ body=expected)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-manilaclient-1.4.0/manilaclient/v1/client.py
new/python-manilaclient-1.5.0/manilaclient/v1/client.py
--- old/python-manilaclient-1.4.0/manilaclient/v1/client.py 2015-09-18
16:22:37.000000000 +0200
+++ new/python-manilaclient-1.5.0/manilaclient/v1/client.py 2015-10-19
21:24:31.000000000 +0200
@@ -13,8 +13,9 @@
import warnings
from keystoneclient import adapter
-from keystoneclient.v2_0 import client as keystone_client_v2
-from keystoneclient.v3 import client as keystone_client_v3
+from keystoneclient import client as ks_client
+from keystoneclient import discover
+from keystoneclient import session
import six
from manilaclient.common import constants
@@ -72,7 +73,41 @@
service_catalog_url=None, user_agent='python-manilaclient',
use_keyring=False, force_new_token=False,
cached_token_lifetime=300,
- api_version=constants.V1_API_VERSION, **kwargs):
+ api_version=constants.V1_API_VERSION,
+ user_id=None,
+ user_domain_id=None,
+ user_domain_name=None,
+ project_domain_id=None,
+ project_domain_name=None,
+ cert=None,
+ password=None,
+ **kwargs):
+
+ self.username = username
+ self.password = password or api_key
+ self.tenant_id = tenant_id or project_id
+ self.tenant_name = project_name
+
+ self.user_id = user_id
+ self.project_id = project_id or tenant_id
+ self.project_name = project_name
+ self.user_domain_id = user_domain_id
+ self.user_domain_name = user_domain_name
+ self.project_domain_id = project_domain_id
+ self.project_domain_name = project_domain_name
+
+ self.endpoint_type = endpoint_type
+ self.auth_url = auth_url
+ self.region_name = region_name
+
+ self.cacert = cacert
+ self.cert = cert
+ self.insecure = insecure
+
+ self.use_keyring = use_keyring
+ self.force_new_token = force_new_token
+ self.cached_token_lifetime = cached_token_lifetime
+
service_name = kwargs.get("share_service_name", service_name)
def check_deprecated_arguments():
@@ -80,7 +115,8 @@
'share_service_name': 'service_name',
'proxy_tenant_id': None,
'proxy_token': None,
- 'os_cache': 'use_keyring'
+ 'os_cache': 'use_keyring',
+ 'api_key': 'password',
}
for arg, replacement in six.iteritems(deprecated):
@@ -124,15 +160,7 @@
input_auth_token = self.keystone_client.session.get_token(auth)
else:
- self.keystone_client = self._get_keystone_client(
- username=username,
- api_key=api_key,
- auth_url=auth_url,
- project_id=self.project_id,
- project_name=project_name,
- use_keyring=use_keyring,
- force_new_token=force_new_token,
- stale_duration=cached_token_lifetime)
+ self.keystone_client = self._get_keystone_client()
input_auth_token = self.keystone_client.auth_token
if not input_auth_token:
@@ -145,12 +173,18 @@
elif not service_catalog_url:
catalog = self.keystone_client.service_catalog.get_endpoints(
service_type)
-
- if service_type in catalog:
- for e_type, endpoint in catalog.get(service_type)[0].items():
- if str(e_type).lower() == str(endpoint_type).lower():
- service_catalog_url = endpoint
- break
+ for catalog_entry in catalog.get(service_type, []):
+ if (catalog_entry.get("interface") == (
+ endpoint_type.lower().split("url")[0]) or
+ catalog_entry.get(endpoint_type)):
+ if (region_name and not region_name == (
+ catalog_entry.get(
+ "region",
+ catalog_entry.get("region_id")))):
+ continue
+ service_catalog_url = catalog_entry.get(
+ "url", catalog_entry.get(endpoint_type))
+ break
if not service_catalog_url:
raise RuntimeError("Could not find Manila endpoint in catalog")
@@ -196,33 +230,6 @@
if extension.manager_class:
setattr(self, extension.name, extension.manager_class(self))
- def _get_keystone_client(self, username=None, api_key=None, auth_url=None,
- token=None, project_id=None, project_name=None,
- use_keyring=False, force_new_token=False,
- stale_duration=0):
- if not auth_url:
- raise RuntimeError("No auth url specified")
-
- if not getattr(self, "keystone_client", None):
- imported_client = (keystone_client_v2 if "v2.0" in auth_url
- else keystone_client_v3)
-
- self.keystone_client = imported_client.Client(
- username=username,
- password=api_key,
- token=token,
- tenant_id=project_id,
- tenant_name=project_name,
- auth_url=auth_url,
- endpoint=auth_url,
- use_keyring=use_keyring,
- force_new_token=force_new_token,
- stale_duration=stale_duration)
-
- self.keystone_client.authenticate()
-
- return self.keystone_client
-
def authenticate(self):
"""Authenticate against the server.
@@ -235,3 +242,54 @@
warnings.warn("authenticate() method is deprecated. "
"Client automatically makes authentication call "
"in the constructor.")
+
+ def _get_keystone_client(self):
+ # First create a Keystone session
+ if self.insecure:
+ verify = False
+ else:
+ verify = self.cacert or True
+ ks_session = session.Session(verify=verify, cert=self.cert)
+
+ # Discover the supported keystone versions using the given url
+ ks_discover = discover.Discover(
+ session=ks_session, auth_url=self.auth_url)
+
+ # Inspect the auth_url to see the supported version. If both v3 and v2
+ # are supported, then use the highest version if possible.
+ v2_auth_url = ks_discover.url_for('v2.0')
+ v3_auth_url = ks_discover.url_for('v3.0')
+
+ if v3_auth_url:
+ keystone_client = ks_client.Client(
+ version=(3, 0),
+ auth_url=v3_auth_url,
+ username=self.username,
+ password=self.password,
+ user_id=self.user_id,
+ user_domain_name=self.user_domain_name,
+ user_domain_id=self.user_domain_id,
+ project_id=self.project_id or self.tenant_id,
+ project_name=self.project_name,
+ project_domain_name=self.project_domain_name,
+ project_domain_id=self.project_domain_id,
+ region_name=self.region_name)
+ elif v2_auth_url:
+ keystone_client = ks_client.Client(
+ version=(2, 0),
+ auth_url=v2_auth_url,
+ username=self.username,
+ password=self.password,
+ tenant_id=self.tenant_id,
+ tenant_name=self.tenant_name,
+ region_name=self.region_name,
+ cert=self.cert,
+ use_keyring=self.use_keyring,
+ force_new_token=self.force_new_token,
+ stale_duration=self.cached_token_lifetime)
+ else:
+ raise exceptions.CommandError(
+ 'Unable to determine the Keystone version to authenticate '
+ 'with using the given auth_url.')
+ keystone_client.authenticate()
+ return keystone_client
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-manilaclient-1.4.0/manilaclient/v1/quota_classes.py
new/python-manilaclient-1.5.0/manilaclient/v1/quota_classes.py
--- old/python-manilaclient-1.4.0/manilaclient/v1/quota_classes.py
2015-09-18 16:22:36.000000000 +0200
+++ new/python-manilaclient-1.5.0/manilaclient/v1/quota_classes.py
2015-10-19 21:24:31.000000000 +0200
@@ -40,6 +40,7 @@
shares=None,
gigabytes=None,
snapshots=None,
+ snapshot_gigabytes=None,
share_networks=None):
body = {
@@ -48,6 +49,7 @@
'shares': shares,
'snapshots': snapshots,
'gigabytes': gigabytes,
+ 'snapshot_gigabytes': snapshot_gigabytes,
'share_networks': share_networks,
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-manilaclient-1.4.0/manilaclient/v1/shell.py
new/python-manilaclient-1.5.0/manilaclient/v1/shell.py
--- old/python-manilaclient-1.4.0/manilaclient/v1/shell.py 2015-09-18
16:22:37.000000000 +0200
+++ new/python-manilaclient-1.5.0/manilaclient/v1/shell.py 2015-10-19
21:24:31.000000000 +0200
@@ -201,7 +201,7 @@
def do_endpoints(cs, args):
"""Discover endpoints that get returned from the authenticate services."""
catalog = cs.keystone_client.service_catalog.catalog
- for e in catalog['serviceCatalog']:
+ for e in catalog.get('serviceCatalog', catalog.get('catalog')):
cliutils.print_dict(e['endpoints'][0], e['name'])
@@ -209,7 +209,17 @@
"""Show user credentials returned from auth."""
catalog = cs.keystone_client.service_catalog.catalog
cliutils.print_dict(catalog['user'], "User Credentials")
- cliutils.print_dict(catalog['token'], "Token")
+ if not catalog['version'] == 'v3':
+ data = catalog['token']
+ else:
+ data = {
+ 'issued_at': catalog['issued_at'],
+ 'expires': catalog['expires_at'],
+ 'id': catalog['auth_token'],
+ 'audit_ids': catalog['audit_ids'],
+ 'tenant': catalog['project'],
+ }
+ cliutils.print_dict(data, "Token")
_quota_resources = [
'shares',
@@ -366,7 +376,7 @@
@cliutils.arg(
- 'class-name',
+ 'class_name',
metavar='<class-name>',
help='Name of quota class to set the quotas for.')
@cliutils.arg(
@@ -397,9 +407,11 @@
help='New value for the "snapshot_gigabytes" quota.')
@cliutils.arg(
'--share-networks',
+ '--share_networks', # alias
metavar='<share-networks>',
type=int,
default=None,
+ action='single_alias',
help='New value for the "share_networks" quota.')
@cliutils.service_type('sharev2')
def do_quota_class_update(cs, args):
@@ -607,7 +619,7 @@
metavar='<export_path>',
type=str,
help='Share export path, NFS share such as: 10.0.0.1:/foo_path, '
- 'CIFS share such as: \\10.0.0.1\foo_name_of_cifs_share')
+ 'CIFS share such as: \\\\10.0.0.1\\foo_name_of_cifs_share')
@cliutils.arg(
'--name',
metavar='<name>',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-manilaclient-1.4.0/python_manilaclient.egg-info/PKG-INFO
new/python-manilaclient-1.5.0/python_manilaclient.egg-info/PKG-INFO
--- old/python-manilaclient-1.4.0/python_manilaclient.egg-info/PKG-INFO
2015-09-18 16:23:34.000000000 +0200
+++ new/python-manilaclient-1.5.0/python_manilaclient.egg-info/PKG-INFO
2015-10-19 21:25:25.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: python-manilaclient
-Version: 1.4.0
+Version: 1.5.0
Summary: Client library for OpenStack Manila API.
Home-page: http://www.openstack.org/
Author: OpenStack Contributors
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-manilaclient-1.4.0/python_manilaclient.egg-info/pbr.json
new/python-manilaclient-1.5.0/python_manilaclient.egg-info/pbr.json
--- old/python-manilaclient-1.4.0/python_manilaclient.egg-info/pbr.json
2015-09-18 16:23:34.000000000 +0200
+++ new/python-manilaclient-1.5.0/python_manilaclient.egg-info/pbr.json
2015-10-19 21:25:25.000000000 +0200
@@ -1 +1 @@
-{"is_release": true, "git_version": "0bbd214"}
\ No newline at end of file
+{"git_version": "997cc43", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-manilaclient-1.4.0/python_manilaclient.egg-info/requires.txt
new/python-manilaclient-1.5.0/python_manilaclient.egg-info/requires.txt
--- old/python-manilaclient-1.4.0/python_manilaclient.egg-info/requires.txt
2015-09-18 16:23:34.000000000 +0200
+++ new/python-manilaclient-1.5.0/python_manilaclient.egg-info/requires.txt
2015-10-19 21:25:25.000000000 +0200
@@ -1,4 +1,4 @@
-pbr<2.0,>=1.6
+pbr>=1.6
argparse
iso8601>=0.1.9
oslo.config>=2.3.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-manilaclient-1.4.0/requirements.txt
new/python-manilaclient-1.5.0/requirements.txt
--- old/python-manilaclient-1.4.0/requirements.txt 2015-09-18
16:22:36.000000000 +0200
+++ new/python-manilaclient-1.5.0/requirements.txt 2015-10-19
21:24:31.000000000 +0200
@@ -3,7 +3,7 @@
# process, which may cause wedges in the gate later.
# pbr should be first
-pbr<2.0,>=1.6
+pbr>=1.6
argparse
iso8601>=0.1.9
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-manilaclient-1.4.0/setup.cfg
new/python-manilaclient-1.5.0/setup.cfg
--- old/python-manilaclient-1.4.0/setup.cfg 2015-09-18 16:23:34.000000000
+0200
+++ new/python-manilaclient-1.5.0/setup.cfg 2015-10-19 21:25:25.000000000
+0200
@@ -43,6 +43,6 @@
[egg_info]
tag_svn_revision = 0
-tag_date = 0
tag_build =
+tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-manilaclient-1.4.0/setup.py
new/python-manilaclient-1.5.0/setup.py
--- old/python-manilaclient-1.4.0/setup.py 2015-09-18 16:22:36.000000000
+0200
+++ new/python-manilaclient-1.5.0/setup.py 2015-10-19 21:24:31.000000000
+0200
@@ -25,5 +25,5 @@
pass
setuptools.setup(
- setup_requires=['pbr>=1.3'],
+ setup_requires=['pbr>=1.8'],
pbr=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-manilaclient-1.4.0/test-requirements.txt
new/python-manilaclient-1.5.0/test-requirements.txt
--- old/python-manilaclient-1.4.0/test-requirements.txt 2015-09-18
16:22:36.000000000 +0200
+++ new/python-manilaclient-1.5.0/test-requirements.txt 2015-10-19
21:24:31.000000000 +0200
@@ -13,7 +13,7 @@
ordereddict
oslosphinx>=2.5.0 # Apache-2.0
sphinx!=1.2.0,!=1.3b1,<1.3,>=1.1.2
-tempest-lib>=0.6.1
+tempest-lib>=0.9.0
testrepository>=0.0.18
testtools>=1.4.0
python-openstackclient>=1.5.0