Hello community,
here is the log from the commit of package python-os-client-config for
openSUSE:Factory checked in at 2017-02-21 13:39:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-os-client-config (Old)
and /work/SRC/openSUSE:Factory/.python-os-client-config.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-os-client-config"
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-os-client-config/python-os-client-config.changes
2016-09-30 15:29:13.000000000 +0200
+++
/work/SRC/openSUSE:Factory/.python-os-client-config.new/python-os-client-config.changes
2017-02-21 13:39:41.406514495 +0100
@@ -1,0 +2,38 @@
+Fri Feb 10 15:28:26 UTC 2017 - [email protected]
+
+- update to version 1.26.0:
+ - Revert "Split auth plugin loading into its own method"
+ - Add docutils contraint on 0.13.1 to fix building
+ - Fix interface_key for identity clients
+ - Use upper-constraints for tox envs
+ - Update ECS image_api_version to 1
+ - Enable release notes translation
+ - Update swift constructor to be Session aware
+ - Remove validate_auth_ksc
+ - Fix AttributeError in `get_config`
+ - Update reno for stable/newton
+ - Revert "Fix interface_key for identity clients"
+ - Normalize cloud config before osc-lib call
+ - List py35 in the default tox env list
+ - Show team and repo badges on README
+ - Fix a bunch of tests
+ - Add setter for session constructor
+ - Don't create envvars cloud if cloud or region are set
+ - Using assertIsNone() instead of assertEqual(None, ...)
+ - Magnum's service_type is container_infra
+ - cloud_config:get_session_endpoint: catch Keystone EndpointNotFound
+ - modify the home-page info with the developer documentation
+ - Add OpenTelekomCloud to the vendors
+ - Split auth plugin loading into its own method
+ - Update homepage with developer documentation page
+ - Support token_endpoint as an auth_type
+ - Add fuga.io to vendors
+ - Add support for Murano
+ - Add ability to configure Session constructor
+ - Remove 3.4 from tox envlist
+ - Add support for volumev3 service type
+ - Clarify how to set SSL settings
+ - Revert "Remove validate_auth_ksc"
+ - Don't build releasenotes in normal docs build
+
+-------------------------------------------------------------------
Old:
----
os-client-config-1.21.1.tar.gz
New:
----
os-client-config-1.26.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-os-client-config.spec ++++++
--- /var/tmp/diff_new_pack.Y42cx0/_old 2017-02-21 13:39:41.818456382 +0100
+++ /var/tmp/diff_new_pack.Y42cx0/_new 2017-02-21 13:39:41.818456382 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-os-client-config
#
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -20,28 +20,28 @@
%bcond_with test
%bcond_with docs
Name: python-os-client-config
-Version: 1.21.1
+Version: 1.26.0
Release: 0
Summary: OpenStack Client Configuration Library
License: Apache-2.0
-Group: Development/Libraries
+Group: Development/Languages/Python
Url: https://launchpad.net/%{sname}
Source0:
https://pypi.io/packages/source/o/%{sname}/%{sname}-%{version}.tar.gz
BuildRequires: openstack-macros
BuildRequires: python-devel
-BuildRequires: python-pbr >= 1.6
+BuildRequires: python-pbr >= 1.8
BuildRequires: python-setuptools >= 16.0
-Requires: python-PyYAML >= 3.1.0
+Requires: python-PyYAML >= 3.10.0
Requires: python-appdirs >= 1.3.0
-Requires: python-keystoneauth1 >= 2.10.0
+Requires: python-keystoneauth1 >= 2.17.0
Requires: python-requestsexceptions >= 1.1.1
BuildArch: noarch
%if %{with test}
BuildRequires: python-extras
BuildRequires: python-fixtures >= 3.0.0
-BuildRequires: python-glanceclient >= 2.0.0
+BuildRequires: python-glanceclient >= 2.5.0
BuildRequires: python-jsonschema >= 2.0.0
-BuildRequires: python-keystoneclient >= 2.0.0
+BuildRequires: python-keystoneclient >= 3.8.0
BuildRequires: python-mock >= 2.0
BuildRequires: python-oslotest >= 1.10.0
BuildRequires: python-python-subunit >= 0.0.18
@@ -61,9 +61,9 @@
%if %{with docs}
%package doc
Summary: Documentation for OpenStack client configuration library
-Group: Development/Libraries
+Group: Development/Languages/Python
BuildRequires: python-Sphinx
-BuildRequires: python-oslosphinx >= 2.5.0
+BuildRequires: python-oslosphinx >= 4.7.0
BuildRequires: python-reno >= 1.8.0
%description doc
@@ -71,7 +71,8 @@
%endif
%prep
-%setup -q -n %{sname}-%{version}
+%autosetup -n %{sname}-%{version}
+%py_req_cleanup
%build
%{py2_build}
@@ -93,7 +94,7 @@
%files
%license LICENSE
-%doc README.rst AUTHORS
+%doc README.rst
%{python2_sitelib}/os_client_config
%{python2_sitelib}/*.egg-info
++++++ _service ++++++
--- /var/tmp/diff_new_pack.Y42cx0/_old 2017-02-21 13:39:41.854451304 +0100
+++ /var/tmp/diff_new_pack.Y42cx0/_new 2017-02-21 13:39:41.854451304 +0100
@@ -1,13 +1,12 @@
<services>
<service mode="disabled" name="renderspec">
- <param
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/master/openstack/os-client-config/os-client-config.spec.j2</param>
+ <param
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/ocata/openstack/os-client-config/os-client-config.spec.j2</param>
<param name="output-name">python-os-client-config.spec</param>
- <param
name="requirements">https://raw.githubusercontent.com/openstack/rpm-packaging/master/global-requirements.txt</param>
+ <param
name="requirements">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/ocata/global-requirements.txt</param>
+ <param name="changelog-email">[email protected]</param>
+ <param name="changelog-provider">gh,openstack,os-client-config</param>
</service>
<service mode="disabled" name="download_files">
- <param name="changesgenerate">enable</param>
- </service>
- <service name="refresh_patches" mode="disabled">
- <param name="changesgenerate">enable</param>
</service>
+ <service name="format_spec_file" mode="disabled"/>
</services>
++++++ os-client-config-1.21.1.tar.gz -> os-client-config-1.26.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/os-client-config-1.21.1/AUTHORS
new/os-client-config-1.26.0/AUTHORS
--- old/os-client-config-1.21.1/AUTHORS 2016-09-01 21:02:30.000000000 +0200
+++ new/os-client-config-1.26.0/AUTHORS 2017-01-19 10:34:38.000000000 +0100
@@ -1,7 +1,11 @@
Alex Gaynor <[email protected]>
Alvaro Lopez Garcia <[email protected]>
+Andreas Jaeger <[email protected]>
+Andy Botting <[email protected]>
Anita Kuno <[email protected]>
Arie Bregman <[email protected]>
+Cao Xuan Hoang <[email protected]>
+Cedric Brandily <[email protected]>
ChangBo Guo(gcb) <[email protected]>
Chris Church <[email protected]>
Clark Boylan <[email protected]>
@@ -14,6 +18,7 @@
Doug Hellmann <[email protected]>
Doug Wiegley <[email protected]>
Eric Harney <[email protected]>
+Flavio Percoco <[email protected]>
Ghe Rivero <[email protected]>
Gregory Haynes <[email protected]>
Ilya Shakhat <[email protected]>
@@ -21,19 +26,24 @@
Jamie Lennox <[email protected]>
Javier Pena <[email protected]>
Jeremy Stanley <[email protected]>
+Jordan Pittier <[email protected]>
Julia Kreger <[email protected]>
LiuNanke <[email protected]>
Mathieu Gagné <[email protected]>
Mohammed Naser <[email protected]>
Monty Taylor <[email protected]>
+Paulo Matias <[email protected]>
Shuquan Huang <[email protected]>
Simon Leinen <[email protected]>
Spencer Krum <[email protected]>
+Steve Martinelli <[email protected]>
Steve Martinelli <[email protected]>
TerryHowe <[email protected]>
Thomas Bechtold <[email protected]>
Tim Burke <[email protected]>
+Tony Xu <[email protected]>
Xav Paice <[email protected]>
Yaguang Tang <[email protected]>
Yuriy Taraday <[email protected]>
+avnish <[email protected]>
lifeless <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/os-client-config-1.21.1/ChangeLog
new/os-client-config-1.26.0/ChangeLog
--- old/os-client-config-1.21.1/ChangeLog 2016-09-01 21:02:30.000000000
+0200
+++ new/os-client-config-1.26.0/ChangeLog 2017-01-19 10:34:38.000000000
+0100
@@ -1,6 +1,59 @@
CHANGES
=======
+1.26.0
+------
+
+* Revert "Fix interface_key for identity clients"
+* Add support for Murano
+
+1.25.0
+------
+
+* Add OpenTelekomCloud to the vendors
+* Remove 3.4 from tox envlist
+* Use upper-constraints for tox envs
+* Update swift constructor to be Session aware
+* Magnum's service_type is container_infra
+* Add docutils contraint on 0.13.1 to fix building
+* Fix interface_key for identity clients
+* Show team and repo badges on README
+
+1.24.0
+------
+
+* Revert "Remove validate_auth_ksc"
+
+1.23.0
+------
+
+* Remove validate_auth_ksc
+* Add fuga.io to vendors
+* Support token_endpoint as an auth_type
+* Add support for volumev3 service type
+* Normalize cloud config before osc-lib call
+* Fix a bunch of tests
+* Clarify how to set SSL settings
+* Update ECS image_api_version to 1
+
+1.22.0
+------
+
+* Revert "Split auth plugin loading into its own method"
+* Add setter for session constructor
+* Enable release notes translation
+* cloud_config:get_session_endpoint: catch Keystone EndpointNotFound
+* Using assertIsNone() instead of assertEqual(None, ...)
+* Update homepage with developer documentation page
+* List py35 in the default tox env list
+* Fix AttributeError in `get_config`
+* modify the home-page info with the developer documentation
+* Don't create envvars cloud if cloud or region are set
+* Don't build releasenotes in normal docs build
+* Update reno for stable/newton
+* Add ability to configure Session constructor
+* Split auth plugin loading into its own method
+
1.21.1
------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/os-client-config-1.21.1/PKG-INFO
new/os-client-config-1.26.0/PKG-INFO
--- old/os-client-config-1.21.1/PKG-INFO 2016-09-01 21:02:31.000000000
+0200
+++ new/os-client-config-1.26.0/PKG-INFO 2017-01-19 10:34:38.000000000
+0100
@@ -1,12 +1,21 @@
Metadata-Version: 1.1
Name: os-client-config
-Version: 1.21.1
+Version: 1.26.0
Summary: OpenStack Client Configuation Library
-Home-page: http://www.openstack.org/
+Home-page: http://docs.openstack.org/developer/os-client-config/
Author: OpenStack
Author-email: [email protected]
License: UNKNOWN
-Description: ================
+Description: ========================
+ Team and repository tags
+ ========================
+
+ .. image:: http://governance.openstack.org/badges/os-client-config.svg
+ :target: http://governance.openstack.org/reference/tags/index.html
+
+ .. Change things from this point on
+
+ ================
os-client-config
================
@@ -193,6 +202,19 @@
location. In case the cert key is not included within the client cert
file,
its file location needs to be set via `key`.
+ .. code-block:: yaml
+
+ # clouds.yaml
+ clouds:
+ secure:
+ auth: ...
+ key: /home/myhome/client-cert.key
+ cert: /home/myhome/client-cert.crt
+ cacert: /home/myhome/ca.crt
+ insecure:
+ auth: ...
+ verify: False
+
Cache Settings
--------------
@@ -506,4 +528,4 @@
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
+Classifier: Programming Language :: Python :: 3.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/os-client-config-1.21.1/README.rst
new/os-client-config-1.26.0/README.rst
--- old/os-client-config-1.21.1/README.rst 2016-09-01 21:00:48.000000000
+0200
+++ new/os-client-config-1.26.0/README.rst 2017-01-19 10:32:33.000000000
+0100
@@ -1,3 +1,12 @@
+========================
+Team and repository tags
+========================
+
+.. image:: http://governance.openstack.org/badges/os-client-config.svg
+ :target: http://governance.openstack.org/reference/tags/index.html
+
+.. Change things from this point on
+
================
os-client-config
================
@@ -185,6 +194,19 @@
location. In case the cert key is not included within the client cert file,
its file location needs to be set via `key`.
+.. code-block:: yaml
+
+ # clouds.yaml
+ clouds:
+ secure:
+ auth: ...
+ key: /home/myhome/client-cert.key
+ cert: /home/myhome/client-cert.crt
+ cacert: /home/myhome/ca.crt
+ insecure:
+ auth: ...
+ verify: False
+
Cache Settings
--------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/os-client-config-1.21.1/doc/source/releasenotes.rst
new/os-client-config-1.26.0/doc/source/releasenotes.rst
--- old/os-client-config-1.21.1/doc/source/releasenotes.rst 2016-09-01
21:00:48.000000000 +0200
+++ new/os-client-config-1.26.0/doc/source/releasenotes.rst 2017-01-19
10:32:33.000000000 +0100
@@ -2,4 +2,5 @@
Release Notes
=============
-.. release-notes::
+Release notes for `os-client-config` can be found at
+http://docs.openstack.org/releasenotes/os-client-config/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/os-client-config-1.21.1/doc/source/vendor-support.rst
new/os-client-config-1.26.0/doc/source/vendor-support.rst
--- old/os-client-config-1.21.1/doc/source/vendor-support.rst 2016-09-01
21:00:48.000000000 +0200
+++ new/os-client-config-1.26.0/doc/source/vendor-support.rst 2017-01-19
10:32:33.000000000 +0100
@@ -134,6 +134,21 @@
* Public IPv4 is provided via NAT with Neutron Floating IP
* IPv6 is provided to every server
+otc
+---
+
+https://iam.%(region_name)s.otc.t-systems.com/v3
+
+============== ================
+Region Name Location
+============== ================
+eu-de Germany
+============== ================
+
+* Identity API Version is 3
+* Images must be in `vhd` format
+* Public IPv4 is provided via NAT with Neutron Floating IP
+
elastx
------
@@ -160,8 +175,23 @@
de-fra1 Frankfurt, DE
============== ================
+* Image API Version is 1
* Volume API Version is 1
+fuga
+----
+
+https://identity.api.fuga.io:5000
+
+============== ================
+Region Name Location
+============== ================
+cystack Netherlands
+============== ================
+
+* Identity API Version is 3
+* Volume API Version is 3
+
internap
--------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/os-client-config-1.21.1/os_client_config/__init__.py
new/os-client-config-1.26.0/os_client_config/__init__.py
--- old/os-client-config-1.21.1/os_client_config/__init__.py 2016-09-01
21:00:48.000000000 +0200
+++ new/os-client-config-1.26.0/os_client_config/__init__.py 2017-01-19
10:32:33.000000000 +0100
@@ -26,7 +26,7 @@
def get_config(service_key=None, options=None, **kwargs):
config = OpenStackConfig()
if options:
- config.register_argparse_options(options, sys.argv, service_key)
+ config.register_argparse_arguments(options, sys.argv, service_key)
parsed_options = options.parse_known_args(sys.argv)
else:
parsed_options = None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/os-client-config-1.21.1/os_client_config/cloud_config.py
new/os-client-config-1.26.0/os_client_config/cloud_config.py
--- old/os-client-config-1.21.1/os_client_config/cloud_config.py
2016-09-01 21:00:48.000000000 +0200
+++ new/os-client-config-1.26.0/os_client_config/cloud_config.py
2017-01-19 10:32:33.000000000 +0100
@@ -16,6 +16,7 @@
import warnings
from keystoneauth1 import adapter
+import keystoneauth1.exceptions.catalog
from keystoneauth1 import plugin
from keystoneauth1 import session
import requestsexceptions
@@ -70,7 +71,7 @@
class CloudConfig(object):
def __init__(self, name, region, config,
force_ipv4=False, auth_plugin=None,
- openstack_config=None):
+ openstack_config=None, session_constructor=None):
self.name = name
self.region = region
self.config = config
@@ -79,6 +80,7 @@
self._auth = auth_plugin
self._openstack_config = openstack_config
self._keystone_session = None
+ self._session_constructor = session_constructor or session.Session
def __getattr__(self, key):
"""Return arbitrary attributes."""
@@ -101,6 +103,10 @@
def __ne__(self, other):
return not self == other
+ def set_session_constructor(self, session_constructor):
+ """Sets the Session constructor."""
+ self._session_constructor = session_constructor
+
def get_requests_verify_args(self):
"""Return the verify and cert values for the requests library."""
if self.config['verify'] and self.config['cacert']:
@@ -154,9 +160,12 @@
# atrocity from the as-yet-unsullied eyes of our users.
# Of course, if the user requests a volumev2, that structure should
# still work.
- if (service_type == 'volume' and
- self.get_api_version(service_type).startswith('2')):
- service_type = 'volumev2'
+ # What's even more amazing is that they did it AGAIN with cinder v3
+ if service_type == 'volume':
+ if self.get_api_version(service_type).startswith('2'):
+ service_type = 'volumev2'
+ elif self.get_api_version(service_type).startswith('3'):
+ service_type = 'volumev3'
return self.config.get(key, service_type)
def get_service_name(self, service_type):
@@ -196,7 +205,7 @@
" since verify=False".format(
cloud=self.name, region=self.region))
requestsexceptions.squelch_warnings(insecure_requests=not verify)
- self._keystone_session = session.Session(
+ self._keystone_session = self._session_constructor(
auth=self._auth,
verify=verify,
cert=cert,
@@ -246,11 +255,18 @@
if service_key == 'identity':
endpoint = session.get_endpoint(interface=plugin.AUTH_INTERFACE)
else:
- endpoint = session.get_endpoint(
- service_type=self.get_service_type(service_key),
- service_name=self.get_service_name(service_key),
- interface=self.get_interface(service_key),
- region_name=self.region)
+ args = {
+ 'service_type': self.get_service_type(service_key),
+ 'service_name': self.get_service_name(service_key),
+ 'interface': self.get_interface(service_key),
+ 'region_name': self.region
+ }
+ try:
+ endpoint = session.get_endpoint(**args)
+ except keystoneauth1.exceptions.catalog.EndpointNotFound:
+ self.log.warning("Keystone catalog entry not found (%s)",
+ args)
+ endpoint = None
return endpoint
def get_legacy_client(
@@ -296,9 +312,6 @@
if not client_class:
client_class = _get_client(service_key)
- # Because of course swift is different
- if service_key == 'object-store':
- return self._get_swift_client(client_class=client_class, **kwargs)
interface = self.get_interface(service_key)
# trigger exception on lack of service
endpoint = self.get_session_endpoint(service_key)
@@ -310,12 +323,20 @@
else:
interface_key = 'endpoint_type'
- constructor_kwargs = dict(
- session=self.get_session(),
- service_name=self.get_service_name(service_key),
- service_type=self.get_service_type(service_key),
- endpoint_override=endpoint_override,
- region_name=self.region)
+ if service_key == 'object-store':
+ constructor_kwargs = dict(
+ session=self.get_session(),
+ os_options=dict(
+ service_type=self.get_service_type(service_key),
+ object_storage_url=endpoint_override,
+ region_name=self.region))
+ else:
+ constructor_kwargs = dict(
+ session=self.get_session(),
+ service_name=self.get_service_name(service_key),
+ service_type=self.get_service_type(service_key),
+ endpoint_override=endpoint_override,
+ region_name=self.region)
if service_key == 'image':
# os-client-config does not depend on glanceclient, but if
@@ -334,8 +355,11 @@
if not endpoint_override:
constructor_kwargs['endpoint_override'] = endpoint
constructor_kwargs.update(kwargs)
- constructor_kwargs[interface_key] = interface
- if pass_version_arg:
+ if service_key == 'object-store':
+ constructor_kwargs['os_options'][interface_key] = interface
+ else:
+ constructor_kwargs[interface_key] = interface
+ if pass_version_arg and service_key != 'object-store':
if not version:
version = self.get_api_version(service_key)
# Temporary workaround while we wait for python-openstackclient
@@ -361,56 +385,6 @@
return client_class(**constructor_kwargs)
- def _get_swift_client(self, client_class, **kwargs):
- auth_args = self.get_auth_args()
- auth_version = self.get_api_version('identity')
- session = self.get_session()
- token = session.get_token()
- endpoint = self.get_session_endpoint(service_key='object-store')
- if not endpoint:
- return None
- # If we have a username/password, we want to pass them to
- # swift - because otherwise it will not re-up tokens appropriately
- # However, if we only have non-password auth, then get a token
- # and pass it in
- swift_kwargs = dict(
- auth_version=auth_version,
- preauthurl=endpoint,
- preauthtoken=token,
- os_options=dict(
- region_name=self.get_region_name(),
- auth_token=token,
- object_storage_url=endpoint,
- service_type=self.get_service_type('object-store'),
- endpoint_type=self.get_interface('object-store'),
-
- ))
- if self.config['api_timeout'] is not None:
- swift_kwargs['timeout'] = float(self.config['api_timeout'])
-
- # create with password
- swift_kwargs['user'] = auth_args.get('username')
- swift_kwargs['key'] = auth_args.get('password')
- swift_kwargs['authurl'] = auth_args.get('auth_url')
- os_options = {}
- if auth_version == '2.0':
- os_options['tenant_name'] = auth_args.get('project_name')
- os_options['tenant_id'] = auth_args.get('project_id')
- else:
- os_options['project_name'] = auth_args.get('project_name')
- os_options['project_id'] = auth_args.get('project_id')
-
- for key in (
- 'user_id',
- 'project_domain_id',
- 'project_domain_name',
- 'user_domain_id',
- 'user_domain_name'):
- os_options[key] = auth_args.get(key)
- swift_kwargs['os_options'].update(os_options)
-
- return client_class(**swift_kwargs)
-
def get_cache_expiration_time(self):
if self._openstack_config:
return self._openstack_config.get_cache_expiration_time()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/os-client-config-1.21.1/os_client_config/config.py
new/os-client-config-1.26.0/os_client_config/config.py
--- old/os-client-config-1.21.1/os_client_config/config.py 2016-09-01
21:00:48.000000000 +0200
+++ new/os-client-config-1.26.0/os_client_config/config.py 2017-01-19
10:32:33.000000000 +0100
@@ -105,12 +105,11 @@
for k in environkeys:
newkey = k.split('_', 1)[-1].lower()
ret[newkey] = os.environ[k]
- # If the only environ key is region name, don't make a cloud, because
- # it's being used as a cloud selector
- if not environkeys or (
- len(environkeys) == 1 and 'region_name' in ret):
- return None
- return ret
+ # If the only environ keys are cloud and region_name, don't return anything
+ # because they are cloud selectors
+ if set(environkeys) - set(['OS_CLOUD', 'OS_REGION_NAME']):
+ return ret
+ return None
def _merge_clouds(old_dict, new_dict):
@@ -174,8 +173,9 @@
def __init__(self, config_files=None, vendor_files=None,
override_defaults=None, force_ipv4=None,
envvar_prefix=None, secure_files=None,
- pw_func=None):
+ pw_func=None, session_constructor=None):
self.log = _log.setup_logging(__name__)
+ self._session_constructor = session_constructor
self._config_files = config_files or CONFIG_FILES
self._secure_files = secure_files or SECURE_FILES
@@ -640,7 +640,7 @@
# completely broken
return cloud
- def register_argparse_arguments(self, parser, argv, service_keys=[]):
+ def register_argparse_arguments(self, parser, argv, service_keys=None):
"""Register all of the common argparse options needed.
Given an argparse parser, register the keystoneauth Session arguments,
@@ -659,6 +659,9 @@
is requested
"""
+ if service_keys is None:
+ service_keys = []
+
# Fix argv in place - mapping any keys with embedded _ in them to -
_fix_argv(argv)
@@ -851,6 +854,11 @@
# Set to notused rather than None because validate_auth will
# strip the value if it's actually python None
config['auth']['token'] = 'notused'
+ elif config['auth_type'] == 'token_endpoint':
+ # Humans have been trained to use a thing called token_endpoint
+ # That it does not exist in keystoneauth is irrelvant- it not
+ # doing what they want causes them sorrow.
+ config['auth_type'] = 'admin_token'
return loading.get_plugin_loader(config['auth_type'])
def _validate_auth_ksc(self, config, cloud):
@@ -932,6 +940,15 @@
winning_value,
)
+ if winning_value:
+ # Prefer the plugin configuration dest value if the value's key
+ # is marked as deprecated.
+ if p_opt.dest is None:
+ good_name = p_opt.name.replace('-', '_')
+ config['auth'][good_name] = winning_value
+ else:
+ config['auth'][p_opt.dest] = winning_value
+
# See if this needs a prompting
config = self.option_prompt(config, p_opt)
@@ -1082,6 +1099,7 @@
config[key] = val
config = self.magic_fixes(config)
+ config = self._normalize_keys(config)
# NOTE(dtroyer): OSC needs a hook into the auth args before the
# plugin is loaded in order to maintain backward-
@@ -1124,10 +1142,11 @@
return cloud_config.CloudConfig(
name=cloud_name,
region=config['region_name'],
- config=self._normalize_keys(config),
+ config=config,
force_ipv4=force_ipv4,
auth_plugin=auth_plugin,
- openstack_config=self
+ openstack_config=self,
+ session_constructor=self._session_constructor,
)
def get_one_cloud_osc(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/os-client-config-1.21.1/os_client_config/constructors.json
new/os-client-config-1.26.0/os_client_config/constructors.json
--- old/os-client-config-1.21.1/os_client_config/constructors.json
2016-09-01 21:00:48.000000000 +0200
+++ new/os-client-config-1.26.0/os_client_config/constructors.json
2017-01-19 10:32:33.000000000 +0100
@@ -1,5 +1,7 @@
{
+ "application-catalog": "muranoclient.client.Client",
"compute": "novaclient.client.Client",
+ "container-infra": "magnumclient.client.Client",
"database": "troveclient.client.Client",
"identity": "keystoneclient.client.Client",
"image": "glanceclient.Client",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/os-client-config-1.21.1/os_client_config/defaults.json
new/os-client-config-1.26.0/os_client_config/defaults.json
--- old/os-client-config-1.21.1/os_client_config/defaults.json 2016-09-01
21:00:48.000000000 +0200
+++ new/os-client-config-1.26.0/os_client_config/defaults.json 2017-01-19
10:32:33.000000000 +0100
@@ -1,7 +1,9 @@
{
+ "application_catalog_api_version": "1",
"auth_type": "password",
"baremetal_api_version": "1",
"container_api_version": "1",
+ "container_infra_api_version": "1",
"compute_api_version": "2",
"database_api_version": "1.0",
"disable_vendor_agent": {},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/os-client-config-1.21.1/os_client_config/tests/test_cloud_config.py
new/os-client-config-1.26.0/os_client_config/tests/test_cloud_config.py
--- old/os-client-config-1.21.1/os_client_config/tests/test_cloud_config.py
2016-09-01 21:00:48.000000000 +0200
+++ new/os-client-config-1.26.0/os_client_config/tests/test_cloud_config.py
2017-01-19 10:32:33.000000000 +0100
@@ -12,6 +12,7 @@
import copy
+from keystoneauth1 import exceptions as ksa_exceptions
from keystoneauth1 import plugin as ksa_plugin
from keystoneauth1 import session as ksa_session
import mock
@@ -157,6 +158,11 @@
cc.config['volume_api_version'] = '2'
self.assertEqual('volumev2', cc.get_service_type('volume'))
+ def test_volume_override_v3(self):
+ cc = cloud_config.CloudConfig("test1", "region-al", fake_services_dict)
+ cc.config['volume_api_version'] = '3'
+ self.assertEqual('volumev3', cc.get_service_type('volume'))
+
def test_get_session_no_auth(self):
config_dict = defaults.get_defaults()
config_dict.update(fake_services_dict)
@@ -235,6 +241,14 @@
region_name='region-al',
service_type='orchestration')
+ @mock.patch.object(cloud_config.CloudConfig, 'get_session')
+ def test_session_endpoint_not_found(self, mock_get_session):
+ exc_to_raise = ksa_exceptions.catalog.EndpointNotFound
+ mock_get_session.return_value.get_endpoint.side_effect = exc_to_raise
+ cc = cloud_config.CloudConfig(
+ "test1", "region-al", {}, auth_plugin=mock.Mock())
+ self.assertIsNone(cc.get_session_endpoint('notfound'))
+
@mock.patch.object(cloud_config.CloudConfig, 'get_api_version')
@mock.patch.object(cloud_config.CloudConfig, 'get_auth_args')
@mock.patch.object(cloud_config.CloudConfig, 'get_session_endpoint')
@@ -258,26 +272,13 @@
"test1", "region-al", config_dict, auth_plugin=mock.Mock())
cc.get_legacy_client('object-store', mock_client)
mock_client.assert_called_with(
- preauthtoken=mock.ANY,
- auth_version=u'3',
- authurl='http://example.com',
- key='testpassword',
+ session=mock.ANY,
os_options={
- 'auth_token': mock.ANY,
'region_name': 'region-al',
- 'object_storage_url': 'http://swift.example.com',
- 'user_id': None,
- 'user_domain_name': None,
- 'project_name': 'testproject',
- 'project_domain_name': None,
- 'project_domain_id': None,
- 'project_id': None,
'service_type': 'object-store',
+ 'object_storage_url': None,
'endpoint_type': 'public',
- 'user_domain_id': None
- },
- preauthurl='http://swift.example.com',
- user='testuser')
+ })
@mock.patch.object(cloud_config.CloudConfig, 'get_auth_args')
@mock.patch.object(cloud_config.CloudConfig, 'get_session_endpoint')
@@ -297,26 +298,13 @@
"test1", "region-al", config_dict, auth_plugin=mock.Mock())
cc.get_legacy_client('object-store', mock_client)
mock_client.assert_called_with(
- preauthtoken=mock.ANY,
- auth_version=u'2.0',
- authurl='http://example.com',
- key='testpassword',
+ session=mock.ANY,
os_options={
- 'auth_token': mock.ANY,
'region_name': 'region-al',
- 'object_storage_url': 'http://swift.example.com',
- 'user_id': None,
- 'user_domain_name': None,
- 'tenant_name': 'testproject',
- 'project_domain_name': None,
- 'project_domain_id': None,
- 'tenant_id': None,
'service_type': 'object-store',
+ 'object_storage_url': None,
'endpoint_type': 'public',
- 'user_domain_id': None
- },
- preauthurl='http://swift.example.com',
- user='testuser')
+ })
@mock.patch.object(cloud_config.CloudConfig, 'get_auth_args')
@mock.patch.object(cloud_config.CloudConfig, 'get_session_endpoint')
@@ -331,26 +319,13 @@
"test1", "region-al", config_dict, auth_plugin=mock.Mock())
cc.get_legacy_client('object-store', mock_client)
mock_client.assert_called_with(
- preauthtoken=mock.ANY,
- auth_version=u'2.0',
- authurl=None,
- key=None,
+ session=mock.ANY,
os_options={
- 'auth_token': mock.ANY,
'region_name': 'region-al',
- 'object_storage_url': 'http://example.com/v2',
- 'user_id': None,
- 'user_domain_name': None,
- 'tenant_name': None,
- 'project_domain_name': None,
- 'project_domain_id': None,
- 'tenant_id': None,
'service_type': 'object-store',
+ 'object_storage_url': None,
'endpoint_type': 'public',
- 'user_domain_id': None
- },
- preauthurl='http://example.com/v2',
- user=None)
+ })
@mock.patch.object(cloud_config.CloudConfig, 'get_auth_args')
@mock.patch.object(cloud_config.CloudConfig, 'get_session_endpoint')
@@ -366,27 +341,13 @@
"test1", "region-al", config_dict, auth_plugin=mock.Mock())
cc.get_legacy_client('object-store', mock_client)
mock_client.assert_called_with(
- preauthtoken=mock.ANY,
- auth_version=u'2.0',
- authurl=None,
- key=None,
+ session=mock.ANY,
os_options={
- 'auth_token': mock.ANY,
'region_name': 'region-al',
- 'object_storage_url': 'http://example.com/v2',
- 'user_id': None,
- 'user_domain_name': None,
- 'tenant_name': None,
- 'project_domain_name': None,
- 'project_domain_id': None,
- 'tenant_id': None,
'service_type': 'object-store',
+ 'object_storage_url': None,
'endpoint_type': 'public',
- 'user_domain_id': None
- },
- preauthurl='http://example.com/v2',
- timeout=9.0,
- user=None)
+ })
@mock.patch.object(cloud_config.CloudConfig, 'get_auth_args')
def test_legacy_client_object_store_endpoint(
@@ -400,26 +361,13 @@
"test1", "region-al", config_dict, auth_plugin=mock.Mock())
cc.get_legacy_client('object-store', mock_client)
mock_client.assert_called_with(
- preauthtoken=mock.ANY,
- auth_version=u'2.0',
- authurl=None,
- key=None,
+ session=mock.ANY,
os_options={
- 'auth_token': mock.ANY,
'region_name': 'region-al',
- 'object_storage_url': 'http://example.com/swift',
- 'user_id': None,
- 'user_domain_name': None,
- 'tenant_name': None,
- 'project_domain_name': None,
- 'project_domain_id': None,
- 'tenant_id': None,
'service_type': 'object-store',
+ 'object_storage_url': 'http://example.com/swift',
'endpoint_type': 'public',
- 'user_domain_id': None
- },
- preauthurl='http://example.com/swift',
- user=None)
+ })
@mock.patch.object(cloud_config.CloudConfig, 'get_session_endpoint')
def test_legacy_client_image(self, mock_get_session_endpoint):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/os-client-config-1.21.1/os_client_config/tests/test_config.py
new/os-client-config-1.26.0/os_client_config/tests/test_config.py
--- old/os-client-config-1.21.1/os_client_config/tests/test_config.py
2016-09-01 21:00:48.000000000 +0200
+++ new/os-client-config-1.26.0/os_client_config/tests/test_config.py
2017-01-19 10:32:33.000000000 +0100
@@ -735,7 +735,7 @@
self.assertEqual(opts.http_timeout, '20')
with testtools.ExpectedException(AttributeError):
opts.os_network_service_type
- cloud = c.get_one_cloud(argparse=opts, verify=False)
+ cloud = c.get_one_cloud(argparse=opts, validate=False)
self.assertEqual(cloud.config['service_type'], 'network')
self.assertEqual(cloud.config['interface'], 'admin')
self.assertEqual(cloud.config['api_timeout'], '20')
@@ -753,10 +753,10 @@
opts, _remain = parser.parse_known_args(args)
self.assertEqual(opts.os_service_type, 'network')
self.assertEqual(opts.os_endpoint_type, 'admin')
- self.assertEqual(opts.os_network_service_type, None)
- self.assertEqual(opts.os_network_api_version, None)
+ self.assertIsNone(opts.os_network_service_type)
+ self.assertIsNone(opts.os_network_api_version)
self.assertEqual(opts.network_api_version, '4')
- cloud = c.get_one_cloud(argparse=opts, verify=False)
+ cloud = c.get_one_cloud(argparse=opts, validate=False)
self.assertEqual(cloud.config['service_type'], 'network')
self.assertEqual(cloud.config['interface'], 'admin')
self.assertEqual(cloud.config['network_api_version'], '4')
@@ -776,14 +776,14 @@
parser, args, ['compute', 'network', 'volume'])
opts, _remain = parser.parse_known_args(args)
self.assertEqual(opts.os_network_service_type, 'badtype')
- self.assertEqual(opts.os_compute_service_type, None)
- self.assertEqual(opts.os_volume_service_type, None)
+ self.assertIsNone(opts.os_compute_service_type)
+ self.assertIsNone(opts.os_volume_service_type)
self.assertEqual(opts.os_service_type, 'compute')
self.assertEqual(opts.os_compute_service_name, 'cloudServers')
self.assertEqual(opts.os_endpoint_type, 'admin')
- self.assertEqual(opts.os_network_api_version, None)
+ self.assertIsNone(opts.os_network_api_version)
self.assertEqual(opts.network_api_version, '4')
- cloud = c.get_one_cloud(argparse=opts, verify=False)
+ cloud = c.get_one_cloud(argparse=opts, validate=False)
self.assertEqual(cloud.config['service_type'], 'compute')
self.assertEqual(cloud.config['network_service_type'], 'badtype')
self.assertEqual(cloud.config['interface'], 'admin')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/os-client-config-1.21.1/os_client_config/tests/test_environ.py
new/os-client-config-1.26.0/os_client_config/tests/test_environ.py
--- old/os-client-config-1.21.1/os_client_config/tests/test_environ.py
2016-09-01 21:00:48.000000000 +0200
+++ new/os-client-config-1.26.0/os_client_config/tests/test_environ.py
2017-01-19 10:32:33.000000000 +0100
@@ -139,11 +139,30 @@
self.assertRaises(
exceptions.OpenStackConfigException, c.get_one_cloud, 'envvars')
+ def test_incomplete_envvars(self):
+ self.useFixture(
+ fixtures.EnvironmentVariable('NOVA_USERNAME', 'nova'))
+ self.useFixture(
+ fixtures.EnvironmentVariable('OS_USERNAME', 'user'))
+ config.OpenStackConfig(config_files=[self.cloud_yaml],
+ vendor_files=[self.vendor_yaml])
+ # This is broken due to an issue that's fixed in a subsequent patch
+ # commenting it out in this patch to keep the patch size reasonable
+ # self.assertRaises(
+ # keystoneauth1.exceptions.auth_plugins.MissingRequiredOptions,
+ # c.get_one_cloud, 'envvars')
+
def test_have_envvars(self):
self.useFixture(
fixtures.EnvironmentVariable('NOVA_USERNAME', 'nova'))
self.useFixture(
+ fixtures.EnvironmentVariable('OS_AUTH_URL', 'http://example.com'))
+ self.useFixture(
fixtures.EnvironmentVariable('OS_USERNAME', 'user'))
+ self.useFixture(
+ fixtures.EnvironmentVariable('OS_PASSWORD', 'password'))
+ self.useFixture(
+ fixtures.EnvironmentVariable('OS_PROJECT_NAME', 'project'))
c = config.OpenStackConfig(config_files=[self.cloud_yaml],
vendor_files=[self.vendor_yaml])
cc = c.get_one_cloud('envvars')
@@ -152,6 +171,13 @@
def test_old_envvars(self):
self.useFixture(
fixtures.EnvironmentVariable('NOVA_USERNAME', 'nova'))
+ self.useFixture(
+ fixtures.EnvironmentVariable(
+ 'NOVA_AUTH_URL', 'http://example.com'))
+ self.useFixture(
+ fixtures.EnvironmentVariable('NOVA_PASSWORD', 'password'))
+ self.useFixture(
+ fixtures.EnvironmentVariable('NOVA_PROJECT_NAME', 'project'))
c = config.OpenStackConfig(config_files=[self.cloud_yaml],
vendor_files=[self.vendor_yaml],
envvar_prefix='NOVA_')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/os-client-config-1.21.1/os_client_config/tests/test_init.py
new/os-client-config-1.26.0/os_client_config/tests/test_init.py
--- old/os-client-config-1.21.1/os_client_config/tests/test_init.py
1970-01-01 01:00:00.000000000 +0100
+++ new/os-client-config-1.26.0/os_client_config/tests/test_init.py
2017-01-19 10:32:33.000000000 +0100
@@ -0,0 +1,33 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import argparse
+
+import os_client_config
+from os_client_config.tests import base
+
+
+class TestInit(base.TestCase):
+ def test_get_config_without_arg_parser(self):
+ cloud_config = os_client_config.get_config(options=None)
+ self.assertIsInstance(
+ cloud_config,
+ os_client_config.cloud_config.CloudConfig
+ )
+
+ def test_get_config_with_arg_parser(self):
+ cloud_config = os_client_config.get_config(
+ options=argparse.ArgumentParser())
+ self.assertIsInstance(
+ cloud_config,
+ os_client_config.cloud_config.CloudConfig
+ )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/os-client-config-1.21.1/os_client_config/vendors/entercloudsuite.json
new/os-client-config-1.26.0/os_client_config/vendors/entercloudsuite.json
--- old/os-client-config-1.21.1/os_client_config/vendors/entercloudsuite.json
2016-09-01 21:00:48.000000000 +0200
+++ new/os-client-config-1.26.0/os_client_config/vendors/entercloudsuite.json
2017-01-19 10:32:33.000000000 +0100
@@ -5,6 +5,7 @@
"auth_url": "https://api.entercloudsuite.com/"
},
"identity_api_version": "3",
+ "image_api_version": "1",
"volume_api_version": "1",
"regions": [
"it-mil1",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/os-client-config-1.21.1/os_client_config/vendors/fuga.json
new/os-client-config-1.26.0/os_client_config/vendors/fuga.json
--- old/os-client-config-1.21.1/os_client_config/vendors/fuga.json
1970-01-01 01:00:00.000000000 +0100
+++ new/os-client-config-1.26.0/os_client_config/vendors/fuga.json
2017-01-19 10:32:33.000000000 +0100
@@ -0,0 +1,15 @@
+{
+ "name": "fuga",
+ "profile": {
+ "auth": {
+ "auth_url": "https://identity.api.fuga.io:5000",
+ "user_domain_name": "Default",
+ "project_domain_name": "Default"
+ },
+ "regions": [
+ "cystack"
+ ],
+ "identity_api_version": "3",
+ "volume_api_version": "3"
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/os-client-config-1.21.1/os_client_config/vendors/otc.json
new/os-client-config-1.26.0/os_client_config/vendors/otc.json
--- old/os-client-config-1.21.1/os_client_config/vendors/otc.json
1970-01-01 01:00:00.000000000 +0100
+++ new/os-client-config-1.26.0/os_client_config/vendors/otc.json
2017-01-19 10:32:33.000000000 +0100
@@ -0,0 +1,13 @@
+{
+ "name": "otc",
+ "profile": {
+ "auth": {
+ "auth_url": "https://iam.%(region_name)s.otc.t-systems.com/v3"
+ },
+ "regions": [
+ "eu-de"
+ ],
+ "identity_api_version": "3",
+ "image_format": "vhd"
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/os-client-config-1.21.1/os_client_config.egg-info/PKG-INFO
new/os-client-config-1.26.0/os_client_config.egg-info/PKG-INFO
--- old/os-client-config-1.21.1/os_client_config.egg-info/PKG-INFO
2016-09-01 21:02:30.000000000 +0200
+++ new/os-client-config-1.26.0/os_client_config.egg-info/PKG-INFO
2017-01-19 10:34:38.000000000 +0100
@@ -1,12 +1,21 @@
Metadata-Version: 1.1
Name: os-client-config
-Version: 1.21.1
+Version: 1.26.0
Summary: OpenStack Client Configuation Library
-Home-page: http://www.openstack.org/
+Home-page: http://docs.openstack.org/developer/os-client-config/
Author: OpenStack
Author-email: [email protected]
License: UNKNOWN
-Description: ================
+Description: ========================
+ Team and repository tags
+ ========================
+
+ .. image:: http://governance.openstack.org/badges/os-client-config.svg
+ :target: http://governance.openstack.org/reference/tags/index.html
+
+ .. Change things from this point on
+
+ ================
os-client-config
================
@@ -193,6 +202,19 @@
location. In case the cert key is not included within the client cert
file,
its file location needs to be set via `key`.
+ .. code-block:: yaml
+
+ # clouds.yaml
+ clouds:
+ secure:
+ auth: ...
+ key: /home/myhome/client-cert.key
+ cert: /home/myhome/client-cert.crt
+ cacert: /home/myhome/ca.crt
+ insecure:
+ auth: ...
+ verify: False
+
Cache Settings
--------------
@@ -506,4 +528,4 @@
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
+Classifier: Programming Language :: Python :: 3.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/os-client-config-1.21.1/os_client_config.egg-info/SOURCES.txt
new/os-client-config-1.26.0/os_client_config.egg-info/SOURCES.txt
--- old/os-client-config-1.21.1/os_client_config.egg-info/SOURCES.txt
2016-09-01 21:02:31.000000000 +0200
+++ new/os-client-config-1.26.0/os_client_config.egg-info/SOURCES.txt
2017-01-19 10:34:38.000000000 +0100
@@ -43,6 +43,7 @@
os_client_config/tests/test_cloud_config.py
os_client_config/tests/test_config.py
os_client_config/tests/test_environ.py
+os_client_config/tests/test_init.py
os_client_config/tests/test_json.py
os_client_config/vendors/__init__.py
os_client_config/vendors/auro.json
@@ -55,9 +56,11 @@
os_client_config/vendors/dreamhost.json
os_client_config/vendors/elastx.json
os_client_config/vendors/entercloudsuite.json
+os_client_config/vendors/fuga.json
os_client_config/vendors/ibmcloud.json
os_client_config/vendors/internap.json
os_client_config/vendors/osic.json
+os_client_config/vendors/otc.json
os_client_config/vendors/ovh.json
os_client_config/vendors/rackspace.json
os_client_config/vendors/switchengines.json
@@ -79,6 +82,8 @@
releasenotes/source/conf.py
releasenotes/source/index.rst
releasenotes/source/mitaka.rst
+releasenotes/source/newton.rst
releasenotes/source/unreleased.rst
releasenotes/source/_static/.placeholder
-releasenotes/source/_templates/.placeholder
\ No newline at end of file
+releasenotes/source/_templates/.placeholder
+tools/tox_install.sh
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/os-client-config-1.21.1/os_client_config.egg-info/pbr.json
new/os-client-config-1.26.0/os_client_config.egg-info/pbr.json
--- old/os-client-config-1.21.1/os_client_config.egg-info/pbr.json
2016-09-01 21:02:30.000000000 +0200
+++ new/os-client-config-1.26.0/os_client_config.egg-info/pbr.json
2017-01-19 10:34:38.000000000 +0100
@@ -1 +1 @@
-{"git_version": "42885dc", "is_release": true}
\ No newline at end of file
+{"git_version": "3c47e25", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/os-client-config-1.21.1/releasenotes/source/conf.py
new/os-client-config-1.26.0/releasenotes/source/conf.py
--- old/os-client-config-1.21.1/releasenotes/source/conf.py 2016-09-01
21:00:48.000000000 +0200
+++ new/os-client-config-1.26.0/releasenotes/source/conf.py 2017-01-19
10:32:33.000000000 +0100
@@ -259,3 +259,6 @@
# If true, do not generate a @detailmenu in the "Top" node's menu.
#texinfo_no_detailmenu = False
+
+# -- Options for Internationalization output ------------------------------
+locale_dirs = ['locale/']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/os-client-config-1.21.1/releasenotes/source/index.rst
new/os-client-config-1.26.0/releasenotes/source/index.rst
--- old/os-client-config-1.21.1/releasenotes/source/index.rst 2016-09-01
21:00:48.000000000 +0200
+++ new/os-client-config-1.26.0/releasenotes/source/index.rst 2017-01-19
10:32:33.000000000 +0100
@@ -9,6 +9,7 @@
:maxdepth: 2
unreleased
+ newton
mitaka
Indices and tables
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/os-client-config-1.21.1/releasenotes/source/newton.rst
new/os-client-config-1.26.0/releasenotes/source/newton.rst
--- old/os-client-config-1.21.1/releasenotes/source/newton.rst 1970-01-01
01:00:00.000000000 +0100
+++ new/os-client-config-1.26.0/releasenotes/source/newton.rst 2017-01-19
10:32:33.000000000 +0100
@@ -0,0 +1,6 @@
+===================================
+ Newton Series Release Notes
+===================================
+
+.. release-notes::
+ :branch: origin/stable/newton
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/os-client-config-1.21.1/setup.cfg
new/os-client-config-1.26.0/setup.cfg
--- old/os-client-config-1.21.1/setup.cfg 2016-09-01 21:02:31.000000000
+0200
+++ new/os-client-config-1.26.0/setup.cfg 2017-01-19 10:34:38.000000000
+0100
@@ -5,7 +5,7 @@
README.rst
author = OpenStack
author-email = [email protected]
-home-page = http://www.openstack.org/
+home-page = http://docs.openstack.org/developer/os-client-config/
classifier =
Environment :: OpenStack
Intended Audience :: Information Technology
@@ -16,7 +16,7 @@
Programming Language :: Python :: 2
Programming Language :: Python :: 2.7
Programming Language :: Python :: 3
- Programming Language :: Python :: 3.4
+ Programming Language :: Python :: 3.5
[files]
packages =
@@ -36,5 +36,4 @@
[egg_info]
tag_build =
tag_date = 0
-tag_svn_revision = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/os-client-config-1.21.1/test-requirements.txt
new/os-client-config-1.26.0/test-requirements.txt
--- old/os-client-config-1.21.1/test-requirements.txt 2016-09-01
21:00:48.000000000 +0200
+++ new/os-client-config-1.26.0/test-requirements.txt 2017-01-19
10:32:33.000000000 +0100
@@ -5,6 +5,7 @@
hacking>=0.10.2,<0.11 # Apache-2.0
coverage>=3.6
+docutils>=0.11,!=0.13.1 # OSI-Approved Open Source, Public Domain
extras
fixtures>=0.3.14
jsonschema>=2.0.0,<3.0.0,!=2.5.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/os-client-config-1.21.1/tools/tox_install.sh
new/os-client-config-1.26.0/tools/tox_install.sh
--- old/os-client-config-1.21.1/tools/tox_install.sh 1970-01-01
01:00:00.000000000 +0100
+++ new/os-client-config-1.26.0/tools/tox_install.sh 2017-01-19
10:32:33.000000000 +0100
@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+
+# Client constraint file contains this client version pin that is in conflict
+# with installing the client from source. We should remove the version pin in
+# the constraints file before applying it for from-source installation.
+
+CONSTRAINTS_FILE=$1
+shift 1
+
+set -e
+
+# NOTE(tonyb): Place this in the tox enviroment's log dir so it will get
+# published to logs.openstack.org for easy debugging.
+localfile="$VIRTUAL_ENV/log/upper-constraints.txt"
+
+if [[ $CONSTRAINTS_FILE != http* ]]; then
+ CONSTRAINTS_FILE=file://$CONSTRAINTS_FILE
+fi
+# NOTE(tonyb): need to add curl to bindep.txt if the project supports bindep
+curl $CONSTRAINTS_FILE --insecure --progress-bar --output $localfile
+
+pip install -c$localfile openstack-requirements
+
+# This is the main purpose of the script: Allow local installation of
+# the current repo. It is listed in constraints file and thus any
+# install will be constrained and we need to unconstrain it.
+edit-constraints $localfile -- $CLIENT_NAME
+
+pip install -c$localfile -U $*
+exit $?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/os-client-config-1.21.1/tox.ini
new/os-client-config-1.26.0/tox.ini
--- old/os-client-config-1.21.1/tox.ini 2016-09-01 21:00:48.000000000 +0200
+++ new/os-client-config-1.26.0/tox.ini 2017-01-19 10:32:33.000000000 +0100
@@ -1,13 +1,17 @@
[tox]
minversion = 1.6
-envlist = py34,py27,pypy,pep8
+envlist = py35,py27,pypy,pep8
skipsdist = True
[testenv]
usedevelop = True
-install_command = pip install -U {opts} {packages}
+passenv = ZUUL_CACHE_DIR
+ REQUIREMENTS_PIP_LOCATION
+install_command = {toxinidir}/tools/tox_install.sh
{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt}
{opts} {packages}
setenv =
VIRTUAL_ENV={envdir}
+ BRANCH_NAME=master
+ CLIENT_NAME=os-client-config
deps = -r{toxinidir}/test-requirements.txt
commands = python setup.py testr --slowest --testr-args='{posargs}'