diff -Nru python-os-client-config-1.28.0/AUTHORS python-os-client-config-1.29.0/AUTHORS --- python-os-client-config-1.28.0/AUTHORS 2017-07-10 19:30:51.000000000 +0000 +++ python-os-client-config-1.29.0/AUTHORS 2018-02-01 14:33:09.000000000 +0000 @@ -8,6 +8,7 @@ Cedric Brandily ChangBo Guo(gcb) Chris Church +Christian Berendt Clark Boylan Clint Byrum Colleen Murphy @@ -15,6 +16,7 @@ Davide Guerri Dean Troyer Dean Troyer +Dirk Mueller Doug Hellmann Doug Wiegley Eric Harney @@ -27,7 +29,9 @@ Javier Pena Jeremy Stanley Jim Rollenhagen +John Dennis Jordan Pittier +Joshua Harlow Julia Kreger LiuNanke Mathieu Gagné @@ -36,6 +40,7 @@ Monty Taylor OpenStack Release Bot Paulo Matias +Sean Handley Shuquan Huang Simon Leinen Spencer Krum @@ -48,7 +53,9 @@ Xav Paice Yaguang Tang Yuriy Taraday +Zuul avnish lifeless +lingyongxu ricolin xhzhf diff -Nru python-os-client-config-1.28.0/ChangeLog python-os-client-config-1.29.0/ChangeLog --- python-os-client-config-1.28.0/ChangeLog 2017-07-10 19:30:51.000000000 +0000 +++ python-os-client-config-1.29.0/ChangeLog 2018-02-01 14:33:09.000000000 +0000 @@ -1,6 +1,40 @@ CHANGES ======= +1.29.0 +------ + +* Updated from global requirements +* Split docs requirements and update tox.ini +* Add betacloud to the vendors +* Make the get\_service\_type() overrides tolernat of no defaults +* Remove osc devstack tips jobs +* Do not apply format expansions to passwords +* Updated from global requirements +* Remove setting of version/release from releasenotes +* Add shade-functional-tips jobs +* Consume the osc-functional-devstack-tips job +* Fix doc typo +* Added nat\_source flag for networks +* Add shade-tox-tips jobs +* Update make\_rest\_client to work with version discovery +* Protect against p\_opt not having prompt attribute +* Treat clouds.yaml with one cloud like envvars +* Updated from global requirements +* Fix requires\_floating\_ip +* Updates for stestr +* Updated from global requirements +* Updated from global requirements +* Updated from global requirements +* Updated from global requirements +* DataCentred supports Keystone V3 and Glance V2 +* Update globals safely +* Update the documentation link for doc migration +* Remove OSIC +* Update reno for stable/pike +* Updated from global requirements +* Manually sync with g-r + 1.28.0 ------ diff -Nru python-os-client-config-1.28.0/debian/changelog python-os-client-config-1.29.0/debian/changelog --- python-os-client-config-1.28.0/debian/changelog 2017-07-28 16:52:12.000000000 +0000 +++ python-os-client-config-1.29.0/debian/changelog 2018-02-28 21:11:37.000000000 +0000 @@ -1,3 +1,14 @@ +python-os-client-config (1.29.0-0ubuntu1) bionic; urgency=medium + + * New upstream release. + * d/*: wrap-and-sort -bast. + * d/control: Update Standards-Version to 4.1.2. + * d/control: Bump debhelper compat to 10. + * d/control: Align (Build-)Depends with upstream. + * d/rules: Run tests with stestr. + + -- Corey Bryant Wed, 28 Feb 2018 16:11:37 -0500 + python-os-client-config (1.28.0-0ubuntu1) artful; urgency=medium * New upstream release. diff -Nru python-os-client-config-1.28.0/debian/compat python-os-client-config-1.29.0/debian/compat --- python-os-client-config-1.28.0/debian/compat 2017-07-28 16:52:12.000000000 +0000 +++ python-os-client-config-1.29.0/debian/compat 2018-02-28 21:11:37.000000000 +0000 @@ -1 +1 @@ -9 +10 diff -Nru python-os-client-config-1.28.0/debian/control python-os-client-config-1.29.0/debian/control --- python-os-client-config-1.28.0/debian/control 2017-07-28 16:52:12.000000000 +0000 +++ python-os-client-config-1.29.0/debian/control 2018-02-28 21:11:37.000000000 +0000 @@ -3,51 +3,61 @@ Priority: optional Maintainer: Ubuntu Developers XSBC-Original-Maintainer: PKG OpenStack -Uploaders: Thomas Goirand , - gustavo panizzo , -Build-Depends: debhelper (>= 9), - dh-python, - openstack-pkg-tools, - python-all, - python-pbr, - python-setuptools, - python-sphinx, - python3-all, - python3-pbr, - python3-setuptools, -Build-Depends-Indep: python-appdirs (>= 1.3.0), - python-coverage (>= 3.6), - python-extras, - python-fixtures (>= 0.3.14), - python-glanceclient (>= 1:0.18.0), - python-hacking (>= 0.10.2), - python-jsonschema (>= 2.0.0), - python-keystoneauth1 (>= 2.1.0), - python-keystoneclient (>= 1:1.1.0), - python-mock (>= 1.2), - python-openstackdocstheme (>= 1.5.0), - python-oslotest (>= 1.5.1), - python-requestsexceptions (>= 1.1.1), - python-testscenarios (>= 0.4), - python-testtools (>= 0.9.36), - python-yaml (>= 3.1.0), - python3-appdirs (>= 1.3.0), - python3-fixtures (>= 0.3.14), - python3-glanceclient (>= 1:0.18.0), - python3-jsonschema (>= 2.0.0), - python3-keystoneauth1 (>= 2.1.0), - python3-keystoneclient (>= 1:1.1.0), - python3-mock (>= 1.2), - python3-openstackdocstheme (>= 1.5.0), - python3-oslotest (>= 1.5.1), - python3-requestsexceptions (>= 1.1.1), - python3-subunit, - python3-testscenarios (>= 0.4), - python3-testtools (>= 0.9.36), - python3-yaml (>= 3.1.0), - subunit, - testrepository -Standards-Version: 3.9.7 +Uploaders: + Thomas Goirand , + gustavo panizzo , +Build-Depends: + debhelper (>= 10~), + dh-python, + openstack-pkg-tools, + python-all, + python-pbr, + python-setuptools, + python-sphinx (>= 1.6.2), + python3-all, + python3-pbr, + python3-setuptools, + python3-sphinx (>= 1.6.2), +Build-Depends-Indep: + python-coverage (>= 4.0), + python-docutils (>= 0.11), + python-extras (>= 1.0.0), + python-fixtures (>= 3.0.0), + python-glanceclient (>= 1:2.8.0), + python-hacking (>= 0.12.0), + python-jsonschema (>= 2.6.0), + python-keystoneauth1 (>= 3.3.0), + python-keystoneclient (>= 1:1.1.0), + python-mock (>= 2.0.0), + python-openstackdocstheme (>= 1.18.1), + python-oslotest (>= 1:3.2.0), + python-requestsexceptions (>= 1.2.0), + python-stestr (>= 1.0.0), + python-subunit (>= 1.0.0), + python-testscenarios (>= 0.4), + python-testtools (>= 2.2.0), + python-yaml (>= 3.10), + python3-coverage (>= 4.0), + python3-docutils (>= 0.11), + python3-extras (>= 1.0.0), + python3-fixtures (>= 3.0.0), + python3-glanceclient (>= 1:2.8.0), + python3-hacking (>= 0.12.0), + python3-jsonschema (>= 2.6.0), + python3-keystoneauth1 (>= 3.3.0), + python3-keystoneclient (>= 1:1.1.0), + python3-mock (>= 2.0.0), + python3-openstackdocstheme (>= 1.18.1), + python3-oslotest (>= 1:3.2.0), + python3-requestsexceptions (>= 1.2.0), + python3-stestr (>= 1.0.0), + python3-subunit (>= 1.0.0), + python3-testscenarios (>= 0.4), + python3-testtools (>= 2.2.0), + python3-yaml (>= 3.10), + subunit, + testrepository, +Standards-Version: 4.1.2 Vcs-Browser: https://git.launchpad.net/~ubuntu-server-dev/ubuntu/+source/python-os-client-config Vcs-Git: git://git.launchpad.net/~ubuntu-server-dev/ubuntu/+source/python-os-client-config Homepage: https://github.com/stackforge/os-client-config @@ -55,13 +65,16 @@ Package: python-os-client-config Architecture: all -Depends: python-keystoneauth1 (>= 2.1.0), - python-pbr, - python-requestsexceptions (>= 1.1.1), - python-yaml (>= 3.1.0), - ${misc:Depends}, - ${python:Depends} -Suggests: python-os-client-config-doc, +Depends: + python-appdirs (>= 1.3.0), + python-keystoneauth1 (>= 3.3.0), + python-pbr, + python-requestsexceptions (>= 1.2.0), + python-yaml (>= 3.10), + ${misc:Depends}, + ${python:Depends}, +Suggests: + python-os-client-config-doc, Description: OpenStack client configuration library - Python 2.x Os-client-config is a library for collecting client configuration for using an OpenStack cloud in a consistent and comprehensive manner. It will find cloud @@ -79,16 +92,13 @@ . This package contains the Python 2.x module. -Package: python3-os-client-config +Package: python-os-client-config-doc +Section: doc Architecture: all -Depends: python3-keystoneauth1 (>= 2.1.0), - python3-pbr, - python3-requestsexceptions (>= 1.1.1), - python3-yaml (>= 3.1.0), - ${misc:Depends}, - ${python3:Depends} -Suggests: python-os-client-config-doc, -Description: OpenStack client configuration library - Python 3.x +Depends: + ${misc:Depends}, + ${sphinxdoc:Depends}, +Description: OpenStack client configuration library - doc Os-client-config is a library for collecting client configuration for using an OpenStack cloud in a consistent and comprehensive manner. It will find cloud config for as few as 1 cloud and as many as you want to put in a config file. @@ -103,13 +113,21 @@ produce a cloud config object named "openstack" containing your values from the environment. . - This package contains the Python 3.x module. + This package contains the documentation. -Package: python-os-client-config-doc -Section: doc +Package: python3-os-client-config Architecture: all -Depends: ${misc:Depends}, ${sphinxdoc:Depends} -Description: OpenStack client configuration library - doc +Depends: + python3-appdirs (>= 1.3.0), + python3-keystoneauth1 (>= 3.3.0), + python3-pbr, + python3-requestsexceptions (>= 1.2.0), + python3-yaml (>= 3.10), + ${misc:Depends}, + ${python3:Depends}, +Suggests: + python-os-client-config-doc, +Description: OpenStack client configuration library - Python 3.x Os-client-config is a library for collecting client configuration for using an OpenStack cloud in a consistent and comprehensive manner. It will find cloud config for as few as 1 cloud and as many as you want to put in a config file. @@ -124,4 +142,4 @@ produce a cloud config object named "openstack" containing your values from the environment. . - This package contains the documentation. + This package contains the Python 3.x module. diff -Nru python-os-client-config-1.28.0/debian/rules python-os-client-config-1.29.0/debian/rules --- python-os-client-config-1.28.0/debian/rules 2017-07-28 16:52:12.000000000 +0000 +++ python-os-client-config-1.29.0/debian/rules 2018-02-28 21:11:37.000000000 +0000 @@ -34,13 +34,7 @@ set -e && for i in $(PYTHONS) $(PYTHON3S) ; do \ PYMAJOR=`echo $$i | cut -d'.' -f1` ; \ echo "===> Testing with python$$i (python$$PYMAJOR)" ; \ - rm -rf .testrepository ; \ - testr-python$$PYMAJOR init ; \ - TEMP_REZ=`mktemp -t` && \ - PYTHONPATH=$(CURDIR) PYTHON=python$$i testr-python$$PYMAJOR run --subunit 'os_client_config\.tests\.(?!(.*OptsTestCase.test_entry_point.*|.*test_environ.TestEnviron.test_environ_exists.*|.*test_environ.TestEnviron.test_envvar_name_override.*|.*test_config.TestConfig.test_get_all_clouds.*|.*TestBackwardsCompatibility\.test_set_no_default.*))' | tee $$TEMP_REZ | subunit2pyunit ; \ - cat $$TEMP_REZ | subunit-filter -s --no-passthrough | subunit-stats ; \ - rm -f $$TEMP_REZ ; \ - testr-python$$PYMAJOR slowest ; \ + PYTHONPATH=$(CURDIR) PYTHON=python$$i stestr run 'os_client_config\.tests\.(?!(.*OptsTestCase.test_entry_point.*|.*test_environ.TestEnviron.test_environ_exists.*|.*test_environ.TestEnviron.test_envvar_name_override.*|.*test_config.TestConfig.test_get_all_clouds.*|.*TestBackwardsCompatibility\.test_set_no_default.*))' ; \ done endif diff -Nru python-os-client-config-1.28.0/doc/requirements.txt python-os-client-config-1.29.0/doc/requirements.txt --- python-os-client-config-1.28.0/doc/requirements.txt 1970-01-01 00:00:00.000000000 +0000 +++ python-os-client-config-1.29.0/doc/requirements.txt 2018-02-01 14:30:06.000000000 +0000 @@ -0,0 +1,4 @@ +docutils>=0.11 # OSI-Approved Open Source, Public Domain +sphinx!=1.6.6,>=1.6.2 # BSD +openstackdocstheme>=1.18.1 # Apache-2.0 +reno>=2.5.0 # Apache-2.0 diff -Nru python-os-client-config-1.28.0/doc/source/install/index.rst python-os-client-config-1.29.0/doc/source/install/index.rst --- python-os-client-config-1.28.0/doc/source/install/index.rst 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/doc/source/install/index.rst 2018-02-01 14:30:06.000000000 +0000 @@ -9,4 +9,4 @@ Or, if you have virtualenvwrapper installed:: $ mkvirtualenv os-client-config - $ pip install os-client-config \ No newline at end of file + $ pip install os-client-config diff -Nru python-os-client-config-1.28.0/doc/source/user/configuration.rst python-os-client-config-1.29.0/doc/source/user/configuration.rst --- python-os-client-config-1.28.0/doc/source/user/configuration.rst 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/doc/source/user/configuration.rst 2018-02-01 14:30:06.000000000 +0000 @@ -9,8 +9,8 @@ provide backwards compatibility to service-specific variables such as `NOVA_USERNAME`. -If you have OpenStack environment variables set, `os-client-config` will produce -a cloud config object named `envvars` containing your values from the +If you have OpenStack environment variables set, `os-client-config` will +produce a cloud config object named `envvars` containing your values from the environment. If you don't like the name `envvars`, that's ok, you can override it by setting `OS_CLOUD_NAME`. @@ -115,11 +115,11 @@ `regions` can be a list of regions. When you call `get_all_clouds`, you'll get a cloud config object for each cloud/region combo. -As seen with `dns_service_type`, any setting that makes sense to be per-service, -like `service_type` or `endpoint` or `api_version` can be set by prefixing -the setting with the default service type. That might strike you funny when -setting `service_type` and it does me too - but that's just the world we live -in. +As seen with `dns_service_type`, any setting that makes sense to be +per-service, like `service_type` or `endpoint` or `api_version` can be set by +prefixing the setting with the default service type. That might strike you +funny when setting `service_type` and it does me too - but that's just the +world we live in. Auth Settings ------------- diff -Nru python-os-client-config-1.28.0/doc/source/user/network-config.rst python-os-client-config-1.29.0/doc/source/user/network-config.rst --- python-os-client-config-1.28.0/doc/source/user/network-config.rst 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/doc/source/user/network-config.rst 2018-02-01 14:29:39.000000000 +0000 @@ -58,3 +58,10 @@ possible to have more than one network that satisfies that condition, so the user might want to tell programs which one to pick. There can be only one `nat_destination` per cloud. + +`nat_source` is a boolean field that indicates which network floating +ips should be requested from. It defaults to false. Normally this can be +inferred by looking for a network that is attached to a router. But it's +possible to have more than one network that satisfies that condition, so the +user might want to tell programs which one to pick. There can be only one +`nat_source` per cloud. diff -Nru python-os-client-config-1.28.0/doc/source/user/vendor-support.rst python-os-client-config-1.29.0/doc/source/user/vendor-support.rst --- python-os-client-config-1.28.0/doc/source/user/vendor-support.rst 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/doc/source/user/vendor-support.rst 2018-02-01 14:30:06.000000000 +0000 @@ -39,6 +39,20 @@ * Public IPv4 is provided via NAT with Neutron Floating IP +betacloud +--------- + +============== ================== +Region Name Location +============== ================== +betacloud-1 Nuremberg, Germany +============== ================== + +* Identity API Version is 3 +* Images must be in `raw` format +* Public IPv4 is provided via NAT with Neutron Floating IP +* Volume API Version is 3 + catalyst -------- diff -Nru python-os-client-config-1.28.0/HACKING.rst python-os-client-config-1.29.0/HACKING.rst --- python-os-client-config-1.28.0/HACKING.rst 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/HACKING.rst 2018-02-01 14:29:39.000000000 +0000 @@ -1,4 +1,4 @@ os-client-config Style Commandments =============================================== -Read the OpenStack Style Commandments http://docs.openstack.org/developer/hacking/ \ No newline at end of file +Read the OpenStack Style Commandments https://docs.openstack.org/hacking/latest diff -Nru python-os-client-config-1.28.0/os_client_config/cloud_config.py python-os-client-config-1.29.0/os_client_config/cloud_config.py --- python-os-client-config-1.28.0/os_client_config/cloud_config.py 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/os_client_config/cloud_config.py 2018-02-01 14:29:39.000000000 +0000 @@ -167,12 +167,14 @@ # What's even more amazing is that they did it AGAIN with cinder v3 # And then I learned that mistral copied it. if service_type == 'volume': - if self.get_api_version(service_type).startswith('2'): + vol_type = self.get_api_version(service_type) + if vol_type and vol_type.startswith('2'): service_type = 'volumev2' - elif self.get_api_version(service_type).startswith('3'): + elif vol_type and vol_type.startswith('3'): service_type = 'volumev3' elif service_type == 'workflow': - if self.get_api_version(service_type).startswith('2'): + wk_type = self.get_api_version(service_type) + if wk_type and wk_type.startswith('2'): service_type = 'workflowv2' return self.config.get(key, service_type) @@ -235,7 +237,27 @@ """Helper method to grab the service catalog.""" return self._auth.get_access(self.get_session()).service_catalog - def get_session_client(self, service_key): + def _get_version_args(self, service_key, version): + """Translate OCC version args to those needed by ksa adapter. + + If no version is requested explicitly and we have a configured version, + set the version parameter and let ksa deal with expanding that to + min=ver.0, max=ver.latest. + + If version is set, pass it through. + + If version is not set and we don't have a configured version, default + to latest. + """ + if version == 'latest': + return None, None, 'latest' + if not version: + version = self.get_api_version(service_key) + if not version: + return None, None, 'latest' + return version, None, None + + def get_session_client(self, service_key, version=None): """Return a prepped requests adapter for a given service. This is useful for making direct requests calls against a @@ -249,12 +271,17 @@ and it will work like you think. """ + (version, min_version, max_version) = self._get_version_args( + service_key, version) return adapter.Adapter( session=self.get_session(), service_type=self.get_service_type(service_key), service_name=self.get_service_name(service_key), interface=self.get_interface(service_key), + version=version, + min_version=min_version, + max_version=max_version, region_name=self.region) def _get_highest_endpoint(self, service_types, kwargs): @@ -505,7 +532,7 @@ """ if self.config['floating_ip_source'] == "None": return False - return self.config['requires_floating_ip'] + return self.config.get('requires_floating_ip') def get_external_networks(self): """Get list of network names for external networks.""" @@ -556,3 +583,10 @@ if net['nat_destination']: return net['name'] return None + + def get_nat_source(self): + """Get network used for NAT source.""" + for net in self.config['networks']: + if net.get('nat_source'): + return net['name'] + return None diff -Nru python-os-client-config-1.28.0/os_client_config/config.py python-os-client-config-1.29.0/os_client_config/config.py --- python-os-client-config-1.28.0/os_client_config/config.py 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/os_client_config/config.py 2018-02-01 14:29:39.000000000 +0000 @@ -69,6 +69,8 @@ BOOL_KEYS = ('insecure', 'cache') +FORMAT_EXCLUSIONS = frozenset(['password']) + # NOTE(dtroyer): This turns out to be not the best idea so let's move # overriding defaults to a kwarg to OpenStackConfig.__init__() @@ -263,6 +265,17 @@ if not self.default_cloud: self.default_cloud = self.envvar_key + if not self.default_cloud and self.cloud_config['clouds']: + if len(self.cloud_config['clouds'].keys()) == 1: + # If there is only one cloud just use it. This matches envvars + # behavior and allows for much less typing. + # TODO(mordred) allow someone to mark a cloud as "default" in + # clouds.yaml. + # The next/iter thing is for python3 compat where dict.keys + # returns an iterator but in python2 it's a list. + self.default_cloud = next(iter( + self.cloud_config['clouds'].keys())) + # Finally, fall through and make a cloud that starts with defaults # because we need somewhere to put arguments, and there are neither # config files or env vars @@ -539,6 +552,7 @@ network = dict( name=name, routes_externally=get_boolean(net.get('routes_externally')), + nat_source=get_boolean(net.get('nat_source')), nat_destination=get_boolean(net.get('nat_destination')), default_interface=get_boolean(net.get('default_interface')), ) @@ -950,7 +964,7 @@ def option_prompt(self, config, p_opt): """Prompt user for option that requires a value""" if ( - p_opt.prompt is not None and + getattr(p_opt, 'prompt', None) is not None and p_opt.dest not in config['auth'] and self._pw_callback is not None ): @@ -1077,7 +1091,7 @@ # If any of the defaults reference other values, we need to expand for (key, value) in config.items(): - if hasattr(value, 'format'): + if hasattr(value, 'format') and key not in FORMAT_EXCLUSIONS: config[key] = value.format(**config) force_ipv4 = config.pop('force_ipv4', self.force_ipv4) @@ -1172,7 +1186,7 @@ # If any of the defaults reference other values, we need to expand for (key, value) in config.items(): - if hasattr(value, 'format'): + if hasattr(value, 'format') and key not in FORMAT_EXCLUSIONS: config[key] = value.format(**config) force_ipv4 = config.pop('force_ipv4', self.force_ipv4) diff -Nru python-os-client-config-1.28.0/os_client_config/constructors.py python-os-client-config-1.29.0/os_client_config/constructors.py --- python-os-client-config-1.28.0/os_client_config/constructors.py 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/os_client_config/constructors.py 2018-02-01 14:29:39.000000000 +0000 @@ -14,15 +14,23 @@ import json import os +import threading _json_path = os.path.join( os.path.dirname(os.path.realpath(__file__)), 'constructors.json') _class_mapping = None +_class_mapping_lock = threading.Lock() def get_constructor_mapping(): global _class_mapping - if not _class_mapping: + if _class_mapping is not None: + return _class_mapping.copy() + with _class_mapping_lock: + if _class_mapping is not None: + return _class_mapping.copy() + tmp_class_mapping = {} with open(_json_path, 'r') as json_file: - _class_mapping = json.load(json_file) - return _class_mapping + tmp_class_mapping.update(json.load(json_file)) + _class_mapping = tmp_class_mapping + return tmp_class_mapping.copy() diff -Nru python-os-client-config-1.28.0/os_client_config/defaults.py python-os-client-config-1.29.0/os_client_config/defaults.py --- python-os-client-config-1.28.0/os_client_config/defaults.py 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/os_client_config/defaults.py 2018-02-01 14:29:39.000000000 +0000 @@ -14,19 +14,30 @@ import json import os +import threading _json_path = os.path.join( os.path.dirname(os.path.realpath(__file__)), 'defaults.json') _defaults = None +_defaults_lock = threading.Lock() def get_defaults(): global _defaults - if not _defaults: + if _defaults is not None: + return _defaults.copy() + with _defaults_lock: + if _defaults is not None: + # Did someone else just finish filling it? + return _defaults.copy() # Python language specific defaults # These are defaults related to use of python libraries, they are # not qualities of a cloud. - _defaults = dict( + # + # NOTE(harlowja): update a in-memory dict, before updating + # the global one so that other callers of get_defaults do not + # see the partially filled one. + tmp_defaults = dict( api_timeout=None, verify=True, cacert=None, @@ -36,6 +47,6 @@ with open(_json_path, 'r') as json_file: updates = json.load(json_file) if updates is not None: - _defaults.update(updates) - - return _defaults.copy() + tmp_defaults.update(updates) + _defaults = tmp_defaults + return tmp_defaults.copy() diff -Nru python-os-client-config-1.28.0/os_client_config/__init__.py python-os-client-config-1.29.0/os_client_config/__init__.py --- python-os-client-config-1.28.0/os_client_config/__init__.py 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/os_client_config/__init__.py 2018-02-01 14:29:39.000000000 +0000 @@ -45,7 +45,7 @@ def make_rest_client( service_key, options=None, - app_name=None, app_version=None, + app_name=None, app_version=None, version=None, **kwargs): """Simple wrapper function. It has almost no features. @@ -63,7 +63,7 @@ service_key=service_key, options=options, app_name=app_name, app_version=app_version, **kwargs) - return cloud.get_session_client(service_key) + return cloud.get_session_client(service_key, version=version) # Backwards compat - simple_client was a terrible name simple_client = make_rest_client # Backwards compat - session_client was a terrible name diff -Nru python-os-client-config-1.28.0/os_client_config/tests/base.py python-os-client-config-1.29.0/os_client_config/tests/base.py --- python-os-client-config-1.28.0/os_client_config/tests/base.py 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/os_client_config/tests/base.py 2018-02-01 14:29:39.000000000 +0000 @@ -102,6 +102,7 @@ 'networks': [{ 'name': 'a-public', 'routes_externally': True, + 'nat_source': True, }, { 'name': 'another-public', 'routes_externally': True, diff -Nru python-os-client-config-1.28.0/os_client_config/tests/test_cloud_config.py python-os-client-config-1.29.0/os_client_config/tests/test_cloud_config.py --- python-os-client-config-1.28.0/os_client_config/tests/test_cloud_config.py 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/os_client_config/tests/test_cloud_config.py 2018-02-01 14:29:39.000000000 +0000 @@ -167,6 +167,13 @@ cc.config['workflow_api_version'] = '2' self.assertEqual('workflowv2', cc.get_service_type('workflow')) + def test_no_override(self): + """Test no override happens when defaults are not configured""" + cc = cloud_config.CloudConfig("test1", "region-al", fake_services_dict) + self.assertEqual('volume', cc.get_service_type('volume')) + self.assertEqual('workflow', cc.get_service_type('workflow')) + self.assertEqual('not-exist', cc.get_service_type('not-exist')) + def test_get_session_no_auth(self): config_dict = defaults.get_defaults() config_dict.update(fake_services_dict) diff -Nru python-os-client-config-1.28.0/os_client_config/tests/test_config.py python-os-client-config-1.29.0/os_client_config/tests/test_config.py --- python-os-client-config-1.28.0/os_client_config/tests/test_config.py 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/os_client_config/tests/test_config.py 2018-02-01 14:29:39.000000000 +0000 @@ -55,6 +55,25 @@ self.assertIsInstance(cloud, cloud_config.CloudConfig) self.assertEqual(cloud.name, '') + def test_get_one_cloud_default_cloud_from_file(self): + single_conf = base._write_yaml({ + 'clouds': { + 'single': { + 'auth': { + 'auth_url': 'http://example.com/v2', + 'username': 'testuser', + 'password': 'testpass', + 'project_name': 'testproject', + }, + 'region_name': 'test-region', + } + } + }) + c = config.OpenStackConfig(config_files=[single_conf], + vendor_files=[self.vendor_yaml]) + cc = c.get_one_cloud() + self.assertEqual(cc.name, 'single') + def test_get_one_cloud_auth_defaults(self): c = config.OpenStackConfig(config_files=[self.cloud_yaml]) cc = c.get_one_cloud(cloud='_test-cloud_', auth={'username': 'user'}) @@ -205,6 +224,7 @@ self.assertEqual( ['a-private', 'another-private', 'split-no-default'], cc.get_internal_networks()) + self.assertEqual('a-public', cc.get_nat_source()) self.assertEqual('another-private', cc.get_nat_destination()) self.assertEqual('another-public', cc.get_default_network()) self.assertEqual( @@ -220,6 +240,7 @@ cc = c.get_one_cloud('_test-cloud-domain-scoped_') self.assertEqual([], cc.get_external_networks()) self.assertEqual([], cc.get_internal_networks()) + self.assertIsNone(cc.get_nat_source()) self.assertIsNone(cc.get_nat_destination()) self.assertIsNone(cc.get_default_network()) @@ -355,6 +376,66 @@ self.assertEqual(region, {'name': 'no-cloud-region', 'values': {}}) +class TestExcludedFormattedConfigValue(base.TestCase): + # verify LaunchPad bug #1635696 + # + # get_one_cloud() and get_one_cloud_osc() iterate over config + # values and try to expand any variables in those values by + # calling value.format(), however some config values + # (e.g. password) should never have format() applied to them, not + # only might that change the password but it will also cause the + # format() function to raise an exception if it can not parse the + # format string. Examples would be single brace (e.g. 'foo{') + # which raises an ValueError because it's looking for a matching + # end brace or a brace pair with a key value that cannot be found + # (e.g. 'foo{bar}') which raises a KeyError. + + def setUp(self): + super(TestExcludedFormattedConfigValue, self).setUp() + + self.args = dict( + auth_url='http://example.com/v2', + username='user', + project_name='project', + region_name='region2', + snack_type='cookie', + os_auth_token='no-good-things', + ) + + self.options = argparse.Namespace(**self.args) + + def test_get_one_cloud_password_brace(self): + c = config.OpenStackConfig(config_files=[self.cloud_yaml], + vendor_files=[self.vendor_yaml]) + + password = 'foo{' # Would raise ValueError, single brace + self.options.password = password + cc = c.get_one_cloud( + cloud='_test_cloud_regions', argparse=self.options, validate=False) + self.assertEqual(cc.password, password) + + password = 'foo{bar}' # Would raise KeyError, 'bar' not found + self.options.password = password + cc = c.get_one_cloud( + cloud='_test_cloud_regions', argparse=self.options, validate=False) + self.assertEqual(cc.password, password) + + def test_get_one_cloud_osc_password_brace(self): + c = config.OpenStackConfig(config_files=[self.cloud_yaml], + vendor_files=[self.vendor_yaml]) + password = 'foo{' # Would raise ValueError, single brace + self.options.password = password + cc = c.get_one_cloud_osc( + cloud='_test_cloud_regions', argparse=self.options, validate=False) + self.assertEqual(cc.password, password) + + password = 'foo{bar}' # Would raise KeyError, 'bar' not found + self.options.password = password + cc = c.get_one_cloud_osc( + cloud='_test_cloud_regions', argparse=self.options, validate=False) + self.assertEqual(cc.password, password) + + class TestConfigArgparse(base.TestCase): def setUp(self): @@ -1000,6 +1081,7 @@ 'networks': [ {'name': 'private', 'routes_externally': False, 'nat_destination': False, 'default_interface': False, + 'nat_source': False, 'routes_ipv4_externally': False, 'routes_ipv6_externally': False}, ] diff -Nru python-os-client-config-1.28.0/os_client_config/vendors/betacloud.json python-os-client-config-1.29.0/os_client_config/vendors/betacloud.json --- python-os-client-config-1.28.0/os_client_config/vendors/betacloud.json 1970-01-01 00:00:00.000000000 +0000 +++ python-os-client-config-1.29.0/os_client_config/vendors/betacloud.json 2018-02-01 14:30:06.000000000 +0000 @@ -0,0 +1,14 @@ +{ + "name": "betacloud", + "profile": { + "auth": { + "auth_url": "https://api-1.betacloud.io:5000/v3" + }, + "regions": [ + "betacloud-1" + ], + "identity_api_version": "3", + "image_format": "raw", + "volume_api_version": "3" + } +} diff -Nru python-os-client-config-1.28.0/os_client_config/vendors/datacentred.json python-os-client-config-1.29.0/os_client_config/vendors/datacentred.json --- python-os-client-config-1.28.0/os_client_config/vendors/datacentred.json 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/os_client_config/vendors/datacentred.json 2018-02-01 14:29:39.000000000 +0000 @@ -5,7 +5,7 @@ "auth_url": "https://compute.datacentred.io:5000" }, "region-name": "sal01", - "identity_api_version": "2", - "image_api_version": "1" + "identity_api_version": "3", + "image_api_version": "2" } } diff -Nru python-os-client-config-1.28.0/os_client_config/vendors/osic.json python-os-client-config-1.29.0/os_client_config/vendors/osic.json --- python-os-client-config-1.28.0/os_client_config/vendors/osic.json 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/os_client_config/vendors/osic.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -{ - "name": "osic", - "profile": { - "auth": { - "auth_url": "https://cloud1.osic.org:5000" - }, - "regions": [ - "RegionOne" - ] - } -} diff -Nru python-os-client-config-1.28.0/os_client_config.egg-info/pbr.json python-os-client-config-1.29.0/os_client_config.egg-info/pbr.json --- python-os-client-config-1.28.0/os_client_config.egg-info/pbr.json 2017-07-10 19:30:51.000000000 +0000 +++ python-os-client-config-1.29.0/os_client_config.egg-info/pbr.json 2018-02-01 14:33:09.000000000 +0000 @@ -1 +1 @@ -{"git_version": "f74902b", "is_release": true} \ No newline at end of file +{"git_version": "ed71a59", "is_release": true} \ No newline at end of file diff -Nru python-os-client-config-1.28.0/os_client_config.egg-info/PKG-INFO python-os-client-config-1.29.0/os_client_config.egg-info/PKG-INFO --- python-os-client-config-1.28.0/os_client_config.egg-info/PKG-INFO 2017-07-10 19:30:51.000000000 +0000 +++ python-os-client-config-1.29.0/os_client_config.egg-info/PKG-INFO 2018-02-01 14:33:09.000000000 +0000 @@ -1,11 +1,12 @@ Metadata-Version: 1.1 Name: os-client-config -Version: 1.28.0 +Version: 1.29.0 Summary: OpenStack Client Configuation Library -Home-page: http://docs.openstack.org/developer/os-client-config/ +Home-page: https://docs.openstack.org/os-client-config/latest Author: OpenStack Author-email: openstack-dev@lists.openstack.org License: UNKNOWN +Description-Content-Type: UNKNOWN Description: ================ os-client-config ================ diff -Nru python-os-client-config-1.28.0/os_client_config.egg-info/requires.txt python-os-client-config-1.29.0/os_client_config.egg-info/requires.txt --- python-os-client-config-1.28.0/os_client_config.egg-info/requires.txt 2017-07-10 19:30:51.000000000 +0000 +++ python-os-client-config-1.29.0/os_client_config.egg-info/requires.txt 2018-02-01 14:33:09.000000000 +0000 @@ -1,4 +1,4 @@ -PyYAML>=3.1.0 +PyYAML>=3.10 appdirs>=1.3.0 -keystoneauth1>=2.1.0 -requestsexceptions>=1.1.1 +keystoneauth1>=3.3.0 +requestsexceptions>=1.2.0 diff -Nru python-os-client-config-1.28.0/os_client_config.egg-info/SOURCES.txt python-os-client-config-1.29.0/os_client_config.egg-info/SOURCES.txt --- python-os-client-config-1.28.0/os_client_config.egg-info/SOURCES.txt 2017-07-10 19:30:52.000000000 +0000 +++ python-os-client-config-1.29.0/os_client_config.egg-info/SOURCES.txt 2018-02-01 14:33:10.000000000 +0000 @@ -1,6 +1,7 @@ .coveragerc .mailmap -.testr.conf +.stestr.conf +.zuul.yaml AUTHORS CONTRIBUTING.rst ChangeLog @@ -12,6 +13,7 @@ setup.py test-requirements.txt tox.ini +doc/requirements.txt doc/source/conf.py doc/source/index.rst doc/source/contributor/index.rst @@ -50,6 +52,7 @@ os_client_config/tests/test_json.py os_client_config/vendors/__init__.py os_client_config/vendors/auro.json +os_client_config/vendors/betacloud.json os_client_config/vendors/bluebox.json os_client_config/vendors/catalyst.json os_client_config/vendors/citycloud.json @@ -62,7 +65,6 @@ 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 @@ -73,27 +75,31 @@ os_client_config/vendors/zetta.json releasenotes/notes/catch-up-release-notes-e385fad34e9f3d6e.yaml releasenotes/notes/cloud-profile-status-e0d29b5e2f10e95c.yaml +releasenotes/notes/default-cloud-7ee0bcb9e5dd24b9.yaml releasenotes/notes/fix-compat-with-old-keystoneauth-66e11ee9d008b962.yaml releasenotes/notes/ironic-microversion-ba5b0f36f11196a6.yaml releasenotes/notes/load-yaml-3177efca78e5c67a.yaml releasenotes/notes/magic-fixes-dca4ae4dac2441a8.yaml releasenotes/notes/make-rest-client-dd3d365632a26fa0.yaml +releasenotes/notes/make-rest-client-version-discovery-84125700f159491a.yaml releasenotes/notes/min-max-legacy-version-301242466ddefa93.yaml +releasenotes/notes/nat-source-field-7c7db2a724616d59.yaml releasenotes/notes/network-list-e6e9dafdd8446263.yaml releasenotes/notes/option-precedence-1fecab21fdfb2c33.yaml releasenotes/notes/sdk-helper-41f8d815cfbcfb00.yaml releasenotes/notes/session-client-b581a6e5d18c8f04.yaml releasenotes/notes/shade-helper-568f8cb372eef6d9.yaml releasenotes/notes/started-using-reno-242e2b0cd27f9480.yaml +releasenotes/notes/vendor-add-betacloud-03872c3485104853.yaml releasenotes/notes/vendor-updates-f11184ba56bb27cf.yaml releasenotes/source/conf.py releasenotes/source/index.rst releasenotes/source/mitaka.rst releasenotes/source/newton.rst releasenotes/source/ocata.rst +releasenotes/source/pike.rst releasenotes/source/unreleased.rst releasenotes/source/_static/.placeholder releasenotes/source/_templates/.placeholder tools/keystone_version.py -tools/nova_version.py -tools/tox_install.sh \ No newline at end of file +tools/nova_version.py \ No newline at end of file diff -Nru python-os-client-config-1.28.0/PKG-INFO python-os-client-config-1.29.0/PKG-INFO --- python-os-client-config-1.28.0/PKG-INFO 2017-07-10 19:30:52.000000000 +0000 +++ python-os-client-config-1.29.0/PKG-INFO 2018-02-01 14:33:10.000000000 +0000 @@ -1,11 +1,12 @@ Metadata-Version: 1.1 Name: os-client-config -Version: 1.28.0 +Version: 1.29.0 Summary: OpenStack Client Configuation Library -Home-page: http://docs.openstack.org/developer/os-client-config/ +Home-page: https://docs.openstack.org/os-client-config/latest Author: OpenStack Author-email: openstack-dev@lists.openstack.org License: UNKNOWN +Description-Content-Type: UNKNOWN Description: ================ os-client-config ================ diff -Nru python-os-client-config-1.28.0/releasenotes/notes/default-cloud-7ee0bcb9e5dd24b9.yaml python-os-client-config-1.29.0/releasenotes/notes/default-cloud-7ee0bcb9e5dd24b9.yaml --- python-os-client-config-1.28.0/releasenotes/notes/default-cloud-7ee0bcb9e5dd24b9.yaml 1970-01-01 00:00:00.000000000 +0000 +++ python-os-client-config-1.29.0/releasenotes/notes/default-cloud-7ee0bcb9e5dd24b9.yaml 2018-02-01 14:29:39.000000000 +0000 @@ -0,0 +1,7 @@ +--- +issues: + - If there was only one cloud defined in clouds.yaml + os-client-config was requiring the cloud parameter + be passed. This is inconsistent with how the envvars + cloud works which WILL work without setting the cloud + parameter if it's the only cloud. diff -Nru python-os-client-config-1.28.0/releasenotes/notes/make-rest-client-version-discovery-84125700f159491a.yaml python-os-client-config-1.29.0/releasenotes/notes/make-rest-client-version-discovery-84125700f159491a.yaml --- python-os-client-config-1.28.0/releasenotes/notes/make-rest-client-version-discovery-84125700f159491a.yaml 1970-01-01 00:00:00.000000000 +0000 +++ python-os-client-config-1.29.0/releasenotes/notes/make-rest-client-version-discovery-84125700f159491a.yaml 2018-02-01 14:29:39.000000000 +0000 @@ -0,0 +1,6 @@ +--- +features: + - Add version argument to make_rest_client and plumb + version discovery through get_session_client so that + versioned endpoints are properly found if unversioned + are in the catalog. diff -Nru python-os-client-config-1.28.0/releasenotes/notes/nat-source-field-7c7db2a724616d59.yaml python-os-client-config-1.29.0/releasenotes/notes/nat-source-field-7c7db2a724616d59.yaml --- python-os-client-config-1.28.0/releasenotes/notes/nat-source-field-7c7db2a724616d59.yaml 1970-01-01 00:00:00.000000000 +0000 +++ python-os-client-config-1.29.0/releasenotes/notes/nat-source-field-7c7db2a724616d59.yaml 2018-02-01 14:29:39.000000000 +0000 @@ -0,0 +1,6 @@ +--- +features: + - Added nat_source flag for networks. In some more complex clouds there + can not only be more than one valid network on a server that NAT can + attach to, there can also be more than one valid network from which to + get a NAT address. Allow flagging a network so that it can be found. diff -Nru python-os-client-config-1.28.0/releasenotes/notes/vendor-add-betacloud-03872c3485104853.yaml python-os-client-config-1.29.0/releasenotes/notes/vendor-add-betacloud-03872c3485104853.yaml --- python-os-client-config-1.28.0/releasenotes/notes/vendor-add-betacloud-03872c3485104853.yaml 1970-01-01 00:00:00.000000000 +0000 +++ python-os-client-config-1.29.0/releasenotes/notes/vendor-add-betacloud-03872c3485104853.yaml 2018-02-01 14:30:06.000000000 +0000 @@ -0,0 +1,3 @@ +--- +other: + - Add betacloud region for Germany diff -Nru python-os-client-config-1.28.0/releasenotes/source/conf.py python-os-client-config-1.29.0/releasenotes/source/conf.py --- python-os-client-config-1.28.0/releasenotes/source/conf.py 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/releasenotes/source/conf.py 2018-02-01 14:29:39.000000000 +0000 @@ -46,16 +46,12 @@ project = u'os-client-config Release Notes' copyright = u'2015, os-client-config developers' -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -import pbr.version -occ_version = pbr.version.VersionInfo('os-client-config') +# Release notes do not need a version in the title, they span +# multiple versions. # The short X.Y version. -version = occ_version.canonical_version_string() +version = '' # The full version, including alpha/beta/rc tags. -release = occ_version.version_string_with_vcs() +release = '' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff -Nru python-os-client-config-1.28.0/releasenotes/source/index.rst python-os-client-config-1.29.0/releasenotes/source/index.rst --- python-os-client-config-1.28.0/releasenotes/source/index.rst 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/releasenotes/source/index.rst 2018-02-01 14:29:39.000000000 +0000 @@ -9,6 +9,7 @@ :maxdepth: 2 unreleased + pike ocata newton mitaka diff -Nru python-os-client-config-1.28.0/releasenotes/source/pike.rst python-os-client-config-1.29.0/releasenotes/source/pike.rst --- python-os-client-config-1.28.0/releasenotes/source/pike.rst 1970-01-01 00:00:00.000000000 +0000 +++ python-os-client-config-1.29.0/releasenotes/source/pike.rst 2018-02-01 14:29:39.000000000 +0000 @@ -0,0 +1,6 @@ +=================================== + Pike Series Release Notes +=================================== + +.. release-notes:: + :branch: stable/pike diff -Nru python-os-client-config-1.28.0/requirements.txt python-os-client-config-1.29.0/requirements.txt --- python-os-client-config-1.28.0/requirements.txt 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/requirements.txt 2018-02-01 14:29:39.000000000 +0000 @@ -1,7 +1,7 @@ # The order of packages is significant, because pip processes them in the order # of appearance. Changing the order has an impact on the overall integration # process, which may cause wedges in the gate later. -PyYAML>=3.1.0 -appdirs>=1.3.0 -keystoneauth1>=2.1.0 -requestsexceptions>=1.1.1 # Apache-2.0 +PyYAML>=3.10 # MIT +appdirs>=1.3.0 # MIT License +keystoneauth1>=3.3.0 # Apache-2.0 +requestsexceptions>=1.2.0 # Apache-2.0 diff -Nru python-os-client-config-1.28.0/setup.cfg python-os-client-config-1.29.0/setup.cfg --- python-os-client-config-1.28.0/setup.cfg 2017-07-10 19:30:52.000000000 +0000 +++ python-os-client-config-1.29.0/setup.cfg 2018-02-01 14:33:10.000000000 +0000 @@ -5,7 +5,7 @@ README.rst author = OpenStack author-email = openstack-dev@lists.openstack.org -home-page = http://docs.openstack.org/developer/os-client-config/ +home-page = https://docs.openstack.org/os-client-config/latest classifier = Environment :: OpenStack Intended Audience :: Information Technology diff -Nru python-os-client-config-1.28.0/setup.py python-os-client-config-1.29.0/setup.py --- python-os-client-config-1.28.0/setup.py 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/setup.py 2018-02-01 14:29:39.000000000 +0000 @@ -1,4 +1,3 @@ -#!/usr/bin/env python # Copyright (c) 2013 Hewlett-Packard Development Company, L.P. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,6 +16,14 @@ # THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT import setuptools +# In python < 2.7.4, a lazy loading of package `pbr` will break +# setuptools if some other modules registered functions in `atexit`. +# solution from: http://bugs.python.org/issue15881#msg170215 +try: + import multiprocessing # noqa +except ImportError: + pass + setuptools.setup( - setup_requires=['pbr'], + setup_requires=['pbr>=2.0.0'], pbr=True) diff -Nru python-os-client-config-1.28.0/.stestr.conf python-os-client-config-1.29.0/.stestr.conf --- python-os-client-config-1.28.0/.stestr.conf 1970-01-01 00:00:00.000000000 +0000 +++ python-os-client-config-1.29.0/.stestr.conf 2018-02-01 14:29:39.000000000 +0000 @@ -0,0 +1,3 @@ +[DEFAULT] +test_path=. +top_dir=./ diff -Nru python-os-client-config-1.28.0/.testr.conf python-os-client-config-1.29.0/.testr.conf --- python-os-client-config-1.28.0/.testr.conf 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/.testr.conf 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -[DEFAULT] -test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \ - OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \ - OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-60} \ - ${PYTHON:-python} -m subunit.run discover -t ./ . $LISTOPT $IDOPTION -test_id_option=--load-list $IDFILE -test_list_option=--list \ No newline at end of file diff -Nru python-os-client-config-1.28.0/test-requirements.txt python-os-client-config-1.29.0/test-requirements.txt --- python-os-client-config-1.28.0/test-requirements.txt 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/test-requirements.txt 2018-02-01 14:30:06.000000000 +0000 @@ -2,20 +2,16 @@ # of appearance. Changing the order has an impact on the overall integration # process, which may cause wedges in the gate later. -hacking>=0.12.0,!=0.13.0,<0.14 # Apache-2.0 +hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0 -coverage>=3.6 -docutils>=0.11 # OSI-Approved Open Source, Public Domain -extras -fixtures>=0.3.14 -jsonschema>=2.0.0,<3.0.0,!=2.5.0 -mock>=1.2 -python-glanceclient>=0.18.0 -python-subunit>=0.0.18 -sphinx>=1.5.1 # BSD -openstackdocstheme>=1.5.0 # Apache-2.0 -oslotest>=1.5.1,<1.6.0 # Apache-2.0 -reno>=0.1.1 # Apache2 -testrepository>=0.0.18 -testscenarios>=0.4 -testtools>=0.9.36,!=1.2.0 +coverage!=4.4,>=4.0 # Apache-2.0 +extras>=1.0.0 # MIT +fixtures>=3.0.0 # Apache-2.0/BSD +jsonschema<3.0.0,>=2.6.0 # MIT +mock>=2.0.0 # BSD +python-glanceclient>=2.8.0 # Apache-2.0 +python-subunit>=1.0.0 # Apache-2.0/BSD +oslotest>=3.2.0 # Apache-2.0 +stestr>=1.0.0 # Apache-2.0 +testscenarios>=0.4 # Apache-2.0/BSD +testtools>=2.2.0 # MIT diff -Nru python-os-client-config-1.28.0/tools/tox_install.sh python-os-client-config-1.29.0/tools/tox_install.sh --- python-os-client-config-1.28.0/tools/tox_install.sh 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/tools/tox_install.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -#!/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 -Nru python-os-client-config-1.28.0/tox.ini python-os-client-config-1.29.0/tox.ini --- python-os-client-config-1.28.0/tox.ini 2017-07-10 19:28:35.000000000 +0000 +++ python-os-client-config-1.29.0/tox.ini 2018-02-01 14:30:06.000000000 +0000 @@ -5,34 +5,64 @@ [testenv] usedevelop = True -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} +passenv = UPPER_CONSTRAINTS_FILE +install_command = pip install -U {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}' + VIRTUAL_ENV={envdir} + LANG=en_US.UTF-8 + LANGUAGE=en_US:en + LC_ALL=C + OS_STDOUT_CAPTURE=1 + OS_STDERR_CAPTURE=1 + OS_TEST_TIMEOUT=60 +deps = + -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} + -r{toxinidir}/requirements.txt + -r{toxinidir}/test-requirements.txt +commands = stestr run {posargs} + stestr slowest [testenv:pep8] -commands = flake8 +usedevelop = False +skip_install = True +deps = + -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} + doc8 + hacking + pygments + readme +commands = + doc8 doc/source + python setup.py check -r -s + flake8 os_client_config [testenv:venv] commands = {posargs} [testenv:cover] -commands = python setup.py test --coverage --coverage-package-name=os_client_config --testr-args='{posargs}' +setenv = + {[testenv]setenv} + PYTHON=coverage run --source os_client_config --parallel-mode +commands = + stestr run {posargs} + coverage combine + coverage html -d cover + coverage xml -o cover/coverage.xml [testenv:docs] +skip_install = True deps = - {[testenv]deps} - readme + -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} + -r{toxinidir}/requirements.txt + -r{toxinidir}/doc/requirements.txt commands = - python setup.py build_sphinx - python setup.py check -r -s + sphinx-build -W -d doc/build/doctrees -b html doc/source/ doc/build/html [testenv:releasenotes] +skip_install = True +deps = + -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} + -r{toxinidir}/doc/requirements.txt commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html [flake8] diff -Nru python-os-client-config-1.28.0/.zuul.yaml python-os-client-config-1.29.0/.zuul.yaml --- python-os-client-config-1.28.0/.zuul.yaml 1970-01-01 00:00:00.000000000 +0000 +++ python-os-client-config-1.29.0/.zuul.yaml 2018-02-01 14:29:39.000000000 +0000 @@ -0,0 +1,5 @@ +- project: + name: openstack/os-client-config + templates: + - shade-functional-tips + - shade-tox-tips