Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-oslo.config for openSUSE:Factory checked in at 2021-05-10 15:37:36 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-oslo.config (Old) and /work/SRC/openSUSE:Factory/.python-oslo.config.new.2988 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-oslo.config" Mon May 10 15:37:36 2021 rev:37 rq:889990 version:8.5.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-oslo.config/python-oslo.config.changes 2021-02-02 14:26:02.203425879 +0100 +++ /work/SRC/openSUSE:Factory/.python-oslo.config.new.2988/python-oslo.config.changes 2021-05-10 15:39:47.957461300 +0200 @@ -1,0 +2,20 @@ +Sun May 2 16:34:34 UTC 2021 - [email protected] + +- update to version 8.5.0 + - remove lower-constraints.txt + - sphinxext: Add 'merge_domaindata' + - Update master for stable/victoria + - Add Python3 wallaby unit tests + - Adding pre-commit + - Convert rst to plaintext for oslo.config output + - Use py3 as the default runtime for tox + - inherit from object is not required for py3 + - Add a new type HostDomain. + - Adding --check-defaults to validator + - Bump minimum version for PyYAML to 5.1 + - Remove Babel from lower-constraints.txt + - Dropping lower constraints testing + - tox: Enable parallel docs builds + - Move zuul config file to root folder + +------------------------------------------------------------------- Old: ---- oslo.config-8.3.3.tar.gz New: ---- oslo.config-8.5.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-oslo.config.spec ++++++ --- /var/tmp/diff_new_pack.k17zzO/_old 2021-05-10 15:39:48.405459467 +0200 +++ /var/tmp/diff_new_pack.k17zzO/_new 2021-05-10 15:39:48.405459467 +0200 @@ -17,15 +17,16 @@ Name: python-oslo.config -Version: 8.3.3 +Version: 8.5.0 Release: 0 +Epoch: 0 Summary: OpenStack common configuration library License: Apache-2.0 Group: Development/Languages/Python -URL: https://launchpad.net/oslo.config -Source0: https://files.pythonhosted.org/packages/source/o/oslo.config/oslo.config-8.3.3.tar.gz +URL: https://docs.openstack.org/oslo.config +Source0: https://files.pythonhosted.org/packages/source/o/oslo.config/oslo.config-8.5.0.tar.gz BuildRequires: openstack-macros -BuildRequires: python3-PyYAML >= 3.12 +BuildRequires: python3-PyYAML >= 5.1 BuildRequires: python3-debtcollector >= 1.2.0 BuildRequires: python3-fixtures BuildRequires: python3-importlib-metadata @@ -55,8 +56,7 @@ %package -n python3-oslo.config Summary: OpenStack common configuration library -Group: Development/Languages/Python -Requires: python3-PyYAML >= 3.12 +Requires: python3-PyYAML >= 5.1 Requires: python3-debtcollector >= 1.2.0 Requires: python3-importlib-metadata Requires: python3-netaddr >= 0.7.18 @@ -82,7 +82,6 @@ %package -n python-oslo.config-doc Summary: Documentation for OpenStack common configuration library -Group: Development/Languages/Python BuildRequires: python3-Sphinx BuildRequires: python3-openstackdocstheme BuildRequires: python3-sphinxcontrib-apidoc @@ -91,13 +90,13 @@ Documentation for the oslo-config library. %prep -%autosetup -p1 -n oslo.config-8.3.3 +%autosetup -p1 -n oslo.config-8.5.0 %py_req_cleanup %build %{py3_build} -PBR_VERSION=8.3.3 PYTHONPATH=. \ +PBR_VERSION=8.5.0 PYTHONPATH=. \ %sphinx_build -b html doc/source doc/build/html # remove the sphinx-build leftovers rm -rf doc/build/html/.{doctrees,buildinfo} ++++++ _service ++++++ --- /var/tmp/diff_new_pack.k17zzO/_old 2021-05-10 15:39:48.429459369 +0200 +++ /var/tmp/diff_new_pack.k17zzO/_new 2021-05-10 15:39:48.433459352 +0200 @@ -1,8 +1,8 @@ <services> <service mode="disabled" name="renderspec"> - <param name="input-template">https://opendev.org/openstack/rpm-packaging/raw/branch/stable/victoria/openstack/oslo.config/oslo.config.spec.j2</param> + <param name="input-template">https://opendev.org/openstack/rpm-packaging/raw/branch/stable/wallaby/openstack/oslo.config/oslo.config.spec.j2</param> <param name="output-name">python-oslo.config.spec</param> - <param name="requirements">https://opendev.org/openstack/oslo.config/raw/branch/stable/victoria/requirements.txt</param> + <param name="requirements">https://opendev.org/openstack/oslo.config/raw/branch/stable/wallaby/requirements.txt</param> <param name="changelog-email">[email protected]</param> <param name="changelog-provider">gh,openstack,oslo.config</param> </service> ++++++ oslo.config-8.3.3.tar.gz -> oslo.config-8.5.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/.pre-commit-config.yaml new/oslo.config-8.5.0/.pre-commit-config.yaml --- old/oslo.config-8.3.3/.pre-commit-config.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/oslo.config-8.5.0/.pre-commit-config.yaml 2021-03-03 14:41:15.000000000 +0100 @@ -0,0 +1,35 @@ +# We from the Oslo project decided to pin repos based on the +# commit hash instead of the version tag to prevend arbitrary +# code from running in developer's machines. To update to a +# newer version, run `pre-commit autoupdate` and then replace +# the newer versions with their commit hash. + +default_language_version: + python: python3 + +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: ebc15addedad713c86ef18ae9632c88e187dd0af # v3.1.0 + hooks: + - id: trailing-whitespace + # Replaces or checks mixed line ending + - id: mixed-line-ending + args: ['--fix', 'lf'] + exclude: '.*\.(svg)$' + # Forbid files which have a UTF-8 byte-order marker + - id: check-byte-order-marker + # Checks that non-binary executables have a proper shebang + - id: check-executables-have-shebangs + # Check for files that contain merge conflict strings. + - id: check-merge-conflict + # Check for debugger imports and py37+ breakpoint() + # calls in python source + - id: debug-statements + - id: check-yaml + files: .*\.(yaml|yml)$ + - repo: https://gitlab.com/pycqa/flake8 + rev: 181bb46098dddf7e2d45319ea654b4b4d58c2840 # 3.8.3 + hooks: + - id: flake8 + additional_dependencies: + - hacking>=3.0.1,<3.1.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/.zuul.d/project.yaml new/oslo.config-8.5.0/.zuul.d/project.yaml --- old/oslo.config-8.3.3/.zuul.d/project.yaml 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/.zuul.d/project.yaml 1970-01-01 01:00:00.000000000 +0100 @@ -1,9 +0,0 @@ -- project: - templates: - - check-requirements - - lib-forward-testing-python3 - - openstack-lower-constraints-jobs - - openstack-python3-victoria-jobs - - periodic-stable-jobs - - publish-openstack-docs-pti - - release-notes-jobs-python3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/.zuul.yaml new/oslo.config-8.5.0/.zuul.yaml --- old/oslo.config-8.3.3/.zuul.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/oslo.config-8.5.0/.zuul.yaml 2021-03-03 14:41:15.000000000 +0100 @@ -0,0 +1,8 @@ +- project: + templates: + - check-requirements + - lib-forward-testing-python3 + - openstack-python3-wallaby-jobs + - periodic-stable-jobs + - publish-openstack-docs-pti + - release-notes-jobs-python3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/AUTHORS new/oslo.config-8.5.0/AUTHORS --- old/oslo.config-8.3.3/AUTHORS 2020-11-18 18:43:08.000000000 +0100 +++ new/oslo.config-8.5.0/AUTHORS 2021-03-03 14:42:06.000000000 +0100 @@ -40,6 +40,7 @@ Davanum Srinivas <[email protected]> David Ripton <[email protected]> David Stanek <[email protected]> +David Vallee Delisle <[email protected]> Dharini Chandrasekar <[email protected]> Dirk Mueller <[email protected]> Dolph Mathews <[email protected]> @@ -186,6 +187,7 @@ howardlee <[email protected]> huang.xiangdong <[email protected]> jacky06 <[email protected]> +likui <[email protected]> liu-sheng <[email protected]> liyingjun <[email protected]> llg8212 <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/ChangeLog new/oslo.config-8.5.0/ChangeLog --- old/oslo.config-8.3.3/ChangeLog 2020-11-18 18:43:07.000000000 +0100 +++ new/oslo.config-8.5.0/ChangeLog 2021-03-03 14:42:06.000000000 +0100 @@ -1,18 +1,33 @@ CHANGES ======= -8.3.3 +8.5.0 ----- +* Bump minimum version for PyYAML to 5.1 +* remove lower-constraints.txt +* inherit from object is not required for py3 +* Move zuul config file to root folder +* Dropping lower constraints testing + +8.4.0 +----- + +* Adding --check-defaults to validator +* Use py3 as the default runtime for tox * Add a new type HostDomain +* Adding pre-commit +* Add Python3 wallaby unit tests +* Update master for stable/victoria +* tox: Enable parallel docs builds * sphinxext: Add 'merge\_domaindata' -* Update TOX\_CONSTRAINTS\_FILE for stable/victoria -* Update .gitreview for stable/victoria +* Remove Babel from lower-constraints.txt 8.3.2 ----- * Bump bandit version +* Convert rst to plaintext for oslo.config output 8.3.1 ----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/PKG-INFO new/oslo.config-8.5.0/PKG-INFO --- old/oslo.config-8.3.3/PKG-INFO 2020-11-18 18:43:08.247316800 +0100 +++ new/oslo.config-8.5.0/PKG-INFO 2021-03-03 14:42:06.849606500 +0100 @@ -1,6 +1,6 @@ -Metadata-Version: 1.2 +Metadata-Version: 2.1 Name: oslo.config -Version: 8.3.3 +Version: 8.5.0 Summary: Oslo Configuration API Home-page: https://docs.openstack.org/oslo.config/latest/ Author: OpenStack @@ -52,3 +52,5 @@ Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: Implementation :: CPython Requires-Python: >=3.6 +Provides-Extra: rst_generator +Provides-Extra: test diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/doc/source/cli/validator.rst new/oslo.config-8.5.0/doc/source/cli/validator.rst --- old/oslo.config-8.3.3/doc/source/cli/validator.rst 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/doc/source/cli/validator.rst 2021-03-03 14:41:15.000000000 +0100 @@ -32,7 +32,7 @@ the option [foo]/bar added to demonstrate a failure):: $ oslo-config-validator --config-file /opt/stack/nova/etc/nova/nova-config-generator.conf --input-file /etc/nova/nova.conf - ERROR:root:foo/bar not found + ERROR:root:foo/bar is not part of the sample config INFO:root:Ignoring missing option "project_domain_name" from group "keystone_authtoken" because the group is known to have incomplete sample config data and thus cannot be validated properly. INFO:root:Ignoring missing option "project_name" from group "keystone_authtoken" because the group is known to have incomplete sample config data and thus cannot be validated properly. INFO:root:Ignoring missing option "user_domain_name" from group "keystone_authtoken" because the group is known to have incomplete sample config data and thus cannot be validated properly. @@ -58,7 +58,7 @@ the option [foo]/bar added to demonstrate a failure):: $ oslo-config-validator --opt-data config-data.yaml --input-file /etc/nova/nova.conf - ERROR:root:foo/bar not found + ERROR:root:foo/bar is not part of the sample config INFO:root:Ignoring missing option "project_domain_name" from group "keystone_authtoken" because the group is known to have incomplete sample config data and thus cannot be validated properly. INFO:root:Ignoring missing option "project_name" from group "keystone_authtoken" because the group is known to have incomplete sample config data and thus cannot be validated properly. INFO:root:Ignoring missing option "user_domain_name" from group "keystone_authtoken" because the group is known to have incomplete sample config data and thus cannot be validated properly. @@ -66,6 +66,158 @@ INFO:root:Ignoring missing option "username" from group "keystone_authtoken" because the group is known to have incomplete sample config data and thus cannot be validated properly. INFO:root:Ignoring missing option "auth_url" from group "keystone_authtoken" because the group is known to have incomplete sample config data and thus cannot be validated properly. +Comparing configuration with the default configuration +------------------------------------------------------ + +.. note:: For most accurate results, the validation should be done using the + same version of the code as the system whose config file is being + validated. + +Comparing the default configuration with the current configuration can help +operators with troubleshooting issues. Since the generator config is not always +available in production environment, we can pass the ``--namespace`` arguments. +In addition to the ``--namespace``, we need to pass a ``--input-file`` as well +as the ``--check-defaults``. + +Some options are ignored by default but this behavior can be overridden with +the ``--exclude-options`` list argument. + +Here's an example of using the validator on Nova:: + + $ oslo-config-validator --input-file /etc/nova/nova.conf \ + --check-defaults \ + --namespace nova.conf \ + --namespace oslo.log \ + --namespace oslo.messaging \ + --namespace oslo.policy \ + --namespace oslo.privsep \ + --namespace oslo.service.periodic_task \ + --namespace oslo.service.service \ + --namespace oslo.db \ + --namespace oslo.db.concurrency \ + --namespace oslo.middleware \ + --namespace oslo.concurrency \ + --namespace keystonemiddleware.auth_token \ + --namespace osprofiler + INFO:keyring.backend:Loading Gnome + INFO:keyring.backend:Loading Google + INFO:keyring.backend:Loading Windows (alt) + INFO:keyring.backend:Loading file + INFO:keyring.backend:Loading keyczar + INFO:keyring.backend:Loading multi + INFO:keyring.backend:Loading pyfs + WARNING:root:DEFAULT/compute_driver sample value is empty but input-file has libvirt.LibvirtDriver + WARNING:root:DEFAULT/allow_resize_to_same_host sample value is empty but input-file has True + WARNING:root:DEFAULT/default_ephemeral_format sample value is empty but input-file has ext4 + WARNING:root:DEFAULT/pointer_model sample value ['usbtablet'] is not in ['ps2mouse'] + WARNING:root:DEFAULT/instances_path sample value ['$state_path/instances'] is not in ['/opt/stack/data/nova/instances'] + WARNING:root:DEFAULT/shutdown_timeout sample value ['60'] is not in ['0'] + INFO:root:DEFAULT/my_ip Ignoring option because it is part of the excluded patterns. This can be changed with the --exclude-options argument. + WARNING:root:DEFAULT/state_path sample value ['$pybasedir'] is not in ['/opt/stack/data/nova'] + INFO:root:DEFAULT/osapi_compute_listen Ignoring option because it is part of the excluded patterns. This can be changed with the --exclude-options argument. + WARNING:root:DEFAULT/osapi_compute_workers sample value is empty but input-file has 2 + WARNING:root:DEFAULT/metadata_workers sample value is empty but input-file has 2 + WARNING:root:DEFAULT/graceful_shutdown_timeout sample value ['60'] is not in ['5'] + INFO:root:DEFAULT/transport_url Ignoring option because it is part of the excluded patterns. This can be changed with the --exclude-options argument. + WARNING:root:DEFAULT/debug sample value is empty but input-file has True + WARNING:root:DEFAULT/logging_context_format_string sample value ['%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s'] is not in ['%(color)s%(levelname)s %(name)s [\x1b[01;36m%(global_request_id)s %(request_id)s \x1b[00;36m%(project_name)s %(user_name)s%(color)s] \x1b[01;35m%(instance)s%(color)s%(message)s\x1b[00m'] + WARNING:root:DEFAULT/logging_default_format_string sample value ['%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s'] is not in ['%(color)s%(levelname)s %(name)s [\x1b[00;36m-%(color)s] \x1b[01;35m%(instance)s%(color)s%(message)s\x1b[00m'] + WARNING:root:DEFAULT/logging_debug_format_suffix sample value ['%(funcName)s %(pathname)s:%(lineno)d'] is not in ['\x1b[00;33m{{(pid=%(process)d) %(funcName)s %(pathname)s:%(lineno)d}}\x1b[00m'] + WARNING:root:DEFAULT/logging_exception_prefix sample value ['%(asctime)s.%(msecs)03d %(process)d ERROR %(name)s %(instance)s'] is not in ['ERROR %(name)s \x1b[01;35m%(instance)s\x1b[00m'] + WARNING:root:Group api from the sample config is not defined in input-file + WARNING:root:cache/backend sample value ['dogpile.cache.null'] is not in ['dogpile.cache.memcached'] + WARNING:root:cache/enabled sample value is empty but input-file has True + WARNING:root:cinder/os_region_name sample value is empty but input-file has RegionOne + WARNING:root:cinder/auth_type sample value is empty but input-file has password + INFO:root:cinder/auth_url Ignoring option because it is part of the excluded patterns. This can be changed with the --exclude-options argument. + WARNING:root:cinder/project_name sample value is empty but input-file has service + WARNING:root:cinder/project_domain_name sample value is empty but input-file has Default + INFO:root:cinder/username Ignoring option because it is part of the excluded patterns. This can be changed with the --exclude-options argument. + WARNING:root:cinder/user_domain_name sample value is empty but input-file has Default + INFO:root:cinder/password Ignoring option because it is part of the excluded patterns. This can be changed with the --exclude-options argument. + WARNING:root:Group compute from the sample config is not defined in input-file + WARNING:root:conductor/workers sample value is empty but input-file has 2 + WARNING:root:Group console from the sample config is not defined in input-file + WARNING:root:Group consoleauth from the sample config is not defined in input-file + WARNING:root:Group cyborg from the sample config is not defined in input-file + INFO:root:api_database/connection Ignoring option because it is part of the excluded patterns. This can be changed with the --exclude-options argument. + WARNING:root:Group devices from the sample config is not defined in input-file + WARNING:root:Group ephemeral_storage_encryption from the sample config is not defined in input-file + WARNING:root:Group glance from the sample config is not defined in input-file + WARNING:root:Group guestfs from the sample config is not defined in input-file + WARNING:root:Group hyperv from the sample config is not defined in input-file + WARNING:root:Group image_cache from the sample config is not defined in input-file + WARNING:root:Group ironic from the sample config is not defined in input-file + WARNING:root:key_manager/fixed_key sample value is empty but input-file has bae3516cc1c0eb18b05440eba8012a4a880a2ee04d584a9c1579445e675b12defdc716ec + WARNING:root:key_manager/backend sample value ['barbican'] is not in ['nova.keymgr.conf_key_mgr.ConfKeyManager'] + WARNING:root:Group barbican from the sample config is not defined in input-file + WARNING:root:Group vault from the sample config is not defined in input-file + WARNING:root:Group keystone from the sample config is not defined in input-file + INFO:root:libvirt/live_migration_uri Ignoring option because it is part of the excluded patterns. This can be changed with the --exclude-options argument. + WARNING:root:libvirt/cpu_mode sample value is empty but input-file has none + WARNING:root:Group mks from the sample config is not defined in input-file + WARNING:root:neutron/default_floating_pool sample value ['nova'] is not in ['public'] + WARNING:root:neutron/service_metadata_proxy sample value is empty but input-file has True + WARNING:root:neutron/auth_type sample value is empty but input-file has password + INFO:root:neutron/auth_url Ignoring option because it is part of the excluded patterns. This can be changed with the --exclude-options argument. + WARNING:root:neutron/project_name sample value is empty but input-file has service + WARNING:root:neutron/project_domain_name sample value is empty but input-file has Default + INFO:root:neutron/username Ignoring option because it is part of the excluded patterns. This can be changed with the --exclude-options argument. + WARNING:root:neutron/user_domain_name sample value is empty but input-file has Default + INFO:root:neutron/password Ignoring option because it is part of the excluded patterns. This can be changed with the --exclude-options argument. + WARNING:root:neutron/region_name sample value is empty but input-file has RegionOne + WARNING:root:Group pci from the sample config is not defined in input-file + WARNING:root:placement/auth_type sample value is empty but input-file has password + INFO:root:placement/auth_url Ignoring option because it is part of the excluded patterns. This can be changed with the --exclude-options argument. + WARNING:root:placement/project_name sample value is empty but input-file has service + WARNING:root:placement/project_domain_name sample value is empty but input-file has Default + INFO:root:placement/username Ignoring option because it is part of the excluded patterns. This can be changed with the --exclude-options argument. + WARNING:root:placement/user_domain_name sample value is empty but input-file has Default + INFO:root:placement/password Ignoring option because it is part of the excluded patterns. This can be changed with the --exclude-options argument. + WARNING:root:placement/region_name sample value is empty but input-file has RegionOne + WARNING:root:Group powervm from the sample config is not defined in input-file + WARNING:root:Group quota from the sample config is not defined in input-file + WARNING:root:Group rdp from the sample config is not defined in input-file + WARNING:root:Group remote_debug from the sample config is not defined in input-file + WARNING:root:scheduler/workers sample value is empty but input-file has 2 + WARNING:root:filter_scheduler/track_instance_changes sample value ['True'] is not in ['False'] + WARNING:root:filter_scheduler/enabled_filters sample value ['AvailabilityZoneFilter', 'ComputeFilter', 'ComputeCapabilitiesFilter', 'ImagePropertiesFilter', 'ServerGroupAntiAffinityFilter', 'ServerGroupAffinityFilter'] is not in ['AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,SameHostFilter,DifferentHostFilter'] + WARNING:root:Group metrics from the sample config is not defined in input-file + WARNING:root:Group serial_console from the sample config is not defined in input-file + WARNING:root:Group service_user from the sample config is not defined in input-file + WARNING:root:Group spice from the sample config is not defined in input-file + WARNING:root:upgrade_levels/compute sample value is empty but input-file has auto + WARNING:root:Group vendordata_dynamic_auth from the sample config is not defined in input-file + WARNING:root:Group vmware from the sample config is not defined in input-file + WARNING:root:Group vnc from the sample config is not defined in input-file + WARNING:root:Group workarounds from the sample config is not defined in input-file + WARNING:root:wsgi/api_paste_config sample value ['api-paste.ini'] is not in ['/etc/nova/api-paste.ini'] + WARNING:root:Group zvm from the sample config is not defined in input-file + WARNING:root:oslo_concurrency/lock_path sample value is empty but input-file has /opt/stack/data/nova + WARNING:root:Group oslo_middleware from the sample config is not defined in input-file + WARNING:root:Group cors from the sample config is not defined in input-file + WARNING:root:Group healthcheck from the sample config is not defined in input-file + WARNING:root:Group oslo_messaging_amqp from the sample config is not defined in input-file + WARNING:root:oslo_messaging_notifications/driver sample value is empty but input-file has messagingv2 + INFO:root:oslo_messaging_notifications/transport_url Ignoring option because it is part of the excluded patterns. This can be changed with the --exclude-options argument. + WARNING:root:Group oslo_messaging_rabbit from the sample config is not defined in input-file + WARNING:root:Group oslo_messaging_kafka from the sample config is not defined in input-file + WARNING:root:Group oslo_policy from the sample config is not defined in input-file + WARNING:root:Group privsep from the sample config is not defined in input-file + WARNING:root:Group profiler from the sample config is not defined in input-file + INFO:root:database/connection Ignoring option because it is part of the excluded patterns. This can be changed with the --exclude-options argument. + WARNING:root:keystone_authtoken/interface sample value ['internal'] is not in ['public'] + WARNING:root:keystone_authtoken/cafile sample value is empty but input-file has /opt/stack/data/ca-bundle.pem + WARNING:root:keystone_authtoken/memcached_servers sample value is empty but input-file has localhost:11211 + WARNING:root:keystone_authtoken/auth_type sample value is empty but input-file has password + ERROR:root:neutron/auth_strategy is not part of the sample config + INFO:root:Ignoring missing option "project_domain_name" from group "keystone_authtoken" because the group is known to have incomplete sample config data and thus cannot be validated properly. + INFO:root:Ignoring missing option "project_name" from group "keystone_authtoken" because the group is known to have incomplete sample config data and thus cannot be validated properly. + INFO:root:Ignoring missing option "user_domain_name" from group "keystone_authtoken" because the group is known to have incomplete sample config data and thus cannot be validated properly. + INFO:root:Ignoring missing option "password" from group "keystone_authtoken" because the group is known to have incomplete sample config data and thus cannot be validated properly. + INFO:root:Ignoring missing option "username" from group "keystone_authtoken" because the group is known to have incomplete sample config data and thus cannot be validated properly. + INFO:root:Ignoring missing option "auth_url" from group "keystone_authtoken" because the group is known to have incomplete sample config data and thus cannot be validated properly + Handling Dynamic Groups ----------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/doc/source/conf.py new/oslo.config-8.5.0/doc/source/conf.py --- old/oslo.config-8.3.3/doc/source/conf.py 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/doc/source/conf.py 2021-03-03 14:41:15.000000000 +0100 @@ -1,4 +1,17 @@ # -*- coding: utf-8 -*- +# Copyright (C) 2020 Red Hat, Inc. +# +# 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 os import sys diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/doc/source/reference/configuration-files.rst new/oslo.config-8.5.0/doc/source/reference/configuration-files.rst --- old/oslo.config-8.3.3/doc/source/reference/configuration-files.rst 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/doc/source/reference/configuration-files.rst 2021-03-03 14:41:15.000000000 +0100 @@ -7,7 +7,7 @@ .. code-block:: python - class ConfigOpts(object): + class ConfigOpts: def __call__(self, ...): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/doc/source/reference/defining.rst new/oslo.config-8.5.0/doc/source/reference/defining.rst --- old/oslo.config-8.3.3/doc/source/reference/defining.rst 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/doc/source/reference/defining.rst 2021-03-03 14:41:15.000000000 +0100 @@ -81,7 +81,7 @@ .. code-block:: python - class ExtensionManager(object): + class ExtensionManager: enabled_apis_opt = cfg.ListOpt(...) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/lower-constraints.txt new/oslo.config-8.5.0/lower-constraints.txt --- old/oslo.config-8.3.3/lower-constraints.txt 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/lower-constraints.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1,79 +0,0 @@ -alabaster==0.7.10 -appdirs==1.3.0 -Babel==2.3.4 -certifi==2020.4.5.2 -chardet==3.0.4 -cliff==3.1.0 -cmd2==0.8.9 -coverage==4.0 -debtcollector==1.2.0 -doc8==0.8.1 -docutils==0.11 -dulwich==0.15.0 -entrypoints==0.3 -extras==1.0.0 -fixtures==3.0.0 -future==0.18.2 -gitdb==0.6.4 -GitPython==1.0.1 -idna==2.5 -imagesize==0.7.1 -importlib_metadata==1.7.0 -iso8601==0.1.11 -Jinja2==2.10 -keystoneauth1==3.4.0 -linecache2==1.0.0 -MarkupSafe==1.0 -mock==4.0.2 -monotonic==1.5 -mox3==0.20.0 -msgpack==1.0.0 -mypy==0.720 -mypy-extensions==0.4.3 -netaddr==0.7.18 -netifaces==0.10.9 -openstackdocstheme==1.20.0 -os-client-config==1.28.0 -oslo.context==3.1.0 -oslo.i18n==3.15.3 -oslo.log==3.36.0 -oslo.serialization==3.2.0 -oslo.utils==4.2.0 -oslotest==3.2.0 -packaging==20.4 -pbr==2.0.0 -prettytable==0.7.2 -Pygments==2.2.0 -pyinotify==0.9.6 -pyparsing==2.4.7 -pyperclip==1.8.0 -python-dateutil==2.8.1 -python-mimeparse==1.6.0 -python-subunit==1.0.0 -pytz==2013.6 -PyYAML==3.12 -reno==2.5.0 -requests==2.18.0 -requests-mock==1.5.0 -requestsexceptions==1.2.0 -restructuredtext-lint==1.3.1 -rfc3986==1.2.0 -six==1.15.0 -smmap==0.9.0 -snowballstemmer==1.2.1 -Sphinx==1.8.0 -sphinxcontrib-apidoc==0.3.0 -sphinxcontrib-websupport==1.0.1 -stestr==2.1.0 -stevedore==1.20.0 -testrepository==0.0.20 -testscenarios==0.4 -testtools==2.2.0 -traceback2==1.4.0 -typed-ast==1.4.1 -typing-extensions==3.7.4.2 -unittest2==1.1.0 -urllib3==1.21.1 -voluptuous==0.11.7 -wcwidth==0.2.4 -wrapt==1.7.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/oslo.config.egg-info/PKG-INFO new/oslo.config-8.5.0/oslo.config.egg-info/PKG-INFO --- old/oslo.config-8.3.3/oslo.config.egg-info/PKG-INFO 2020-11-18 18:43:08.000000000 +0100 +++ new/oslo.config-8.5.0/oslo.config.egg-info/PKG-INFO 2021-03-03 14:42:06.000000000 +0100 @@ -1,6 +1,6 @@ -Metadata-Version: 1.2 +Metadata-Version: 2.1 Name: oslo.config -Version: 8.3.3 +Version: 8.5.0 Summary: Oslo Configuration API Home-page: https://docs.openstack.org/oslo.config/latest/ Author: OpenStack @@ -52,3 +52,5 @@ Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: Implementation :: CPython Requires-Python: >=3.6 +Provides-Extra: rst_generator +Provides-Extra: test diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/oslo.config.egg-info/SOURCES.txt new/oslo.config-8.5.0/oslo.config.egg-info/SOURCES.txt --- old/oslo.config-8.3.3/oslo.config.egg-info/SOURCES.txt 2020-11-18 18:43:08.000000000 +0100 +++ new/oslo.config-8.5.0/oslo.config.egg-info/SOURCES.txt 2021-03-03 14:42:06.000000000 +0100 @@ -1,5 +1,7 @@ .coveragerc +.pre-commit-config.yaml .stestr.conf +.zuul.yaml AUTHORS CONTRIBUTING.rst ChangeLog @@ -7,13 +9,11 @@ LICENSE README.rst bindep.txt -lower-constraints.txt requirements.txt setup.cfg setup.py test-requirements.txt tox.ini -.zuul.d/project.yaml doc/requirements.txt doc/source/conf.py doc/source/config-generator.conf @@ -101,6 +101,7 @@ releasenotes/notes/show-deprecated-reason-361a8eb31e05c97e.yaml releasenotes/notes/support-choice-descriptions-8b2d0c14fbd16b2a.yaml releasenotes/notes/support-fatal-deprecations-ea0513aa58a395ca.yaml +releasenotes/notes/validator-check-defaults-e7b596a2fde781a8.yaml releasenotes/notes/validator-exclude-groups-ad2f046522a3407e.yaml releasenotes/source/conf.py releasenotes/source/index.rst @@ -115,5 +116,6 @@ releasenotes/source/train.rst releasenotes/source/unreleased.rst releasenotes/source/ussuri.rst +releasenotes/source/victoria.rst releasenotes/source/_static/.placeholder releasenotes/source/_templates/.placeholder \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/oslo.config.egg-info/pbr.json new/oslo.config-8.5.0/oslo.config.egg-info/pbr.json --- old/oslo.config-8.3.3/oslo.config.egg-info/pbr.json 2020-11-18 18:43:08.000000000 +0100 +++ new/oslo.config-8.5.0/oslo.config.egg-info/pbr.json 2021-03-03 14:42:06.000000000 +0100 @@ -1 +1 @@ -{"git_version": "d9129d8", "is_release": true} \ No newline at end of file +{"git_version": "cfa2564", "is_release": true} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/oslo.config.egg-info/requires.txt new/oslo.config-8.5.0/oslo.config.egg-info/requires.txt --- old/oslo.config-8.3.3/oslo.config.egg-info/requires.txt 2020-11-18 18:43:08.000000000 +0100 +++ new/oslo.config-8.5.0/oslo.config.egg-info/requires.txt 2021-03-03 14:42:06.000000000 +0100 @@ -1,4 +1,4 @@ -PyYAML>=3.12 +PyYAML>=5.1 debtcollector>=1.2.0 netaddr>=0.7.18 oslo.i18n>=3.15.3 @@ -8,3 +8,21 @@ [:(python_version<'3.8')] importlib_metadata>=1.7.0 + +[rst_generator] +rst2txt>=1.1.0 +sphinx!=2.1.0,>=1.8.0 + +[test] +bandit<1.7.0,>=1.6.0 +coverage!=4.4,>=4.0 +fixtures>=3.0.0 +hacking<3.1.0,>=3.0.1 +mypy>=0.720 +oslo.log>=3.36.0 +oslotest>=3.2.0 +pre-commit>=2.6.0 +requests_mock>=1.5.0 +stestr>=2.1.0 +testscenarios>=0.4 +testtools>=2.2.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/oslo_config/cfg.py new/oslo.config-8.5.0/oslo_config/cfg.py --- old/oslo.config-8.3.3/oslo_config/cfg.py 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/oslo_config/cfg.py 2021-03-03 14:41:15.000000000 +0100 @@ -424,7 +424,7 @@ @functools.total_ordering -class Opt(object): +class Opt: """Base class for all configuration options. @@ -809,7 +809,7 @@ return hash(self) < hash(another) -class DeprecatedOpt(object): +class DeprecatedOpt: """Represents a Deprecated option. @@ -1416,7 +1416,7 @@ return kwargs -class OptGroup(object): +class OptGroup: """Represents a group of opts. @@ -3155,7 +3155,7 @@ """Return the number of options and option groups.""" return len(self._group._opts) - class SubCommandAttr(object): + class SubCommandAttr: """Helper class. @@ -3189,7 +3189,7 @@ except AttributeError: raise NoSuchOptError(name) - class StrSubWrapper(object): + class StrSubWrapper: """Helper class. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/oslo_config/generator.py new/oslo.config-8.5.0/oslo_config/generator.py --- old/oslo.config-8.3.3/oslo_config/generator.py 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/oslo_config/generator.py 2021-03-03 14:41:15.000000000 +0100 @@ -29,7 +29,18 @@ import logging import operator import sys -import textwrap + +try: + # For oslo.config[rst-generator] + from docutils import core as docutils_core + from docutils.parsers.rst import nodes as docutils_nodes + from docutils.parsers.rst import roles as docutils_roles + import rst2txt + from sphinx import roles as sphinx_roles +except ImportError: + import textwrap + + rst2txt = None try: # For Python 3.8 and later @@ -53,6 +64,7 @@ cfg.IntOpt( 'wrap-width', default=70, + min=0, help='The maximum length of help lines.'), cfg.MultiStrOpt( 'namespace', @@ -162,7 +174,7 @@ return 'unknown value' -class _OptFormatter(object): +class _OptFormatter: """Format configuration option descriptions to a file.""" @@ -173,16 +185,43 @@ :param output_file: a writeable file object """ self.output_file = output_file or sys.stdout - self.wrap_width = conf.wrap_width + self.wrap_width = conf.wrap_width or 998 # arbitrary line length self.minimal = conf.minimal self.summarize = conf.summarize + if rst2txt: + # register the default Sphinx roles + for rolename, nodeclass in sphinx_roles.generic_docroles.items(): + generic = docutils_roles.GenericRole(rolename, nodeclass) + docutils_roles.register_local_role(rolename, generic) + + for rolename, func in sphinx_roles.specific_docroles.items(): + docutils_roles.register_local_role(rolename, func) + + # plus our custom roles + for rolename in ('oslo.config:option', 'oslo.config:group'): + generic = docutils_roles.GenericRole(rolename, + docutils_nodes.strong) + docutils_roles.register_local_role(rolename, generic) + def _format_help(self, help_text): """Format the help for a group or option to the output file. :param help_text: The text of the help string """ - if self.wrap_width is not None and self.wrap_width > 0: + if rst2txt: + help_text = docutils_core.publish_string( + source=help_text, + writer=rst2txt.Writer(), + settings_overrides={'wrap_width': self.wrap_width} + ).decode() + + lines = '' + for line in help_text.splitlines(): + lines += '# ' + line + '\n' if line else '#\n' + + lines = [lines] + elif self.wrap_width > 0: wrapped = "" for line in help_text.splitlines(): text = "\n".join(textwrap.wrap(line, self.wrap_width, @@ -195,6 +234,7 @@ lines = [wrapped] else: lines = ['# ' + help_text + '\n'] + return lines def _get_choice_text(self, choice): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/oslo_config/iniparser.py new/oslo.config-8.5.0/oslo_config/iniparser.py --- old/oslo.config-8.3.3/oslo_config/iniparser.py 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/oslo_config/iniparser.py 2021-03-03 14:41:15.000000000 +0100 @@ -23,7 +23,7 @@ return 'at line %d, %s: %r' % (self.lineno, self.msg, self.line) -class BaseParser(object): +class BaseParser: lineno = 0 parse_exc = ParseError diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/oslo_config/sources/__init__.py new/oslo.config-8.5.0/oslo_config/sources/__init__.py --- old/oslo.config-8.3.3/oslo_config/sources/__init__.py 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/oslo_config/sources/__init__.py 2021-03-03 14:41:15.000000000 +0100 @@ -33,10 +33,10 @@ _NoValue = object() -class ConfigurationSourceDriver(object, metaclass=abc.ABCMeta): +class ConfigurationSourceDriver(metaclass=abc.ABCMeta): """A backend driver option for oslo.config. - For each group name listed in **config_source** on the **DEFAULT** group, + For each group name listed in **config_source** in the **DEFAULT** group, a :class:`ConfigurationSourceDriver` is responsible for creating one new instance of a :class:`ConfigurationSource`. The proper driver class to be used is selected based on the **driver** option inside each one of the @@ -96,7 +96,7 @@ """ -class ConfigurationSource(object, metaclass=abc.ABCMeta): +class ConfigurationSource(metaclass=abc.ABCMeta): """A configuration source option for oslo.config. A configuration source is able to fetch configuration values based on diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/oslo_config/tests/test_cfg.py new/oslo.config-8.5.0/oslo_config/tests/test_cfg.py --- old/oslo.config-8.3.3/oslo_config/tests/test_cfg.py 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/oslo_config/tests/test_cfg.py 2021-03-03 14:41:15.000000000 +0100 @@ -3958,7 +3958,7 @@ class OptDumpingTestCase(BaseTestCase): - class FakeLogger(object): + class FakeLogger: def __init__(self, test_case, expected_lvl): self.test_case = test_case diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/oslo_config/tests/test_generator.py new/oslo.config-8.5.0/oslo_config/tests/test_generator.py --- old/oslo.config-8.3.3/oslo_config/tests/test_generator.py 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/oslo_config/tests/test_generator.py 2021-03-03 14:41:15.000000000 +0100 @@ -405,16 +405,16 @@ # ''' # noqa -'# Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod ' -'tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, ' -'quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo ' -'consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse ' -'cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat ' -'non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ' -'(string value)' +'# Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod ' # noqa +'tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, ' # noqa +'quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo ' # noqa +'consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse ' # noqa +'cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat ' # noqa +'non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ' # noqa +'(string value)' # noqa ''' #long_help = <None> -''')), +''')), # noqa ('long_help_with_preformatting', dict(opts=[('test', [(None, [opts['long_help_pre']])])], wrap_width=70, @@ -1638,7 +1638,7 @@ class FakeException(Exception): pass - class FakeEP(object): + class FakeEP: def __init__(self): self.name = 'callback_is_expected' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/oslo_config/tests/test_types.py new/oslo.config-8.5.0/oslo_config/tests/test_types.py --- old/oslo.config-8.3.3/oslo_config/tests/test_types.py 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/oslo_config/tests/test_types.py 2021-03-03 14:41:15.000000000 +0100 @@ -37,7 +37,7 @@ MyString() -class TypeTestHelper(object): +class TypeTestHelper: def setUp(self): super(TypeTestHelper, self).setUp() self.type_instance = self.type diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/oslo_config/tests/test_validator.py new/oslo.config-8.5.0/oslo_config/tests/test_validator.py --- old/oslo.config-8.3.3/oslo_config/tests/test_validator.py 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/oslo_config/tests/test_validator.py 2021-03-03 14:41:15.000000000 +0100 @@ -21,13 +21,51 @@ from oslo_config import validator -OPT_DATA = {'options': {'foo': {'opts': [{'name': 'opt'}]}, - 'bar': {'opts': [{'name': 'opt'}]}, - }, - 'deprecated_options': {'bar': [{'name': 'opt'}]}} +OPT_DATA = { + "options": { + "foo": { + "opts": [ + { + "name": "opt", + "default": 1 + } + ] + }, + "bar": { + "opts": [ + { + "name": "opt", + "default": 2 + }, + { + "name": "foo-bar", + "dest": "foo_bar", + "default": 2 + }, + { + "name": "bar-foo", + "dest": "bar_foo", + "default": 2 + } + ] + } + }, + "deprecated_options": { + "bar": [ + { + "name": "opt", + "default": 3 + } + ] + } +} VALID_CONF = """ [foo] -opt = value +opt = 1 +[bar] +opt = 3 +foo-bar = 3 +bar_foo = 3 """ DEPRECATED_CONF = """ [bar] @@ -106,5 +144,15 @@ with mock.patch('builtins.open', m): self.assertEqual(0, validator._validate(self.conf)) + @mock.patch('oslo_config.validator.load_opt_data') + def test_check_defaults(self, mock_lod): + mock_lod.return_value = OPT_DATA + self.conf_fixture.config(opt_data='mocked.yaml', + input_file='mocked.conf', + check_defaults=True) + m = mock.mock_open(read_data=VALID_CONF) + with mock.patch('builtins.open', m): + self.assertEqual(0, validator._validate(self.conf)) + def test_invalid_options(self): self.assertRaises(RuntimeError, validator._validate, self.conf) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/oslo_config/types.py new/oslo.config-8.5.0/oslo_config/types.py --- old/oslo.config-8.3.3/oslo_config/types.py 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/oslo_config/types.py 2021-03-03 14:41:15.000000000 +0100 @@ -30,7 +30,7 @@ import rfc3986 -class ConfigType(object, metaclass=abc.ABCMeta): +class ConfigType(metaclass=abc.ABCMeta): def __init__(self, type_name='unknown type'): self.type_name = type_name diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/oslo_config/validator.py new/oslo.config-8.5.0/oslo_config/validator.py --- old/oslo.config-8.3.3/oslo_config/validator.py 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/oslo_config/validator.py 2021-03-03 14:41:15.000000000 +0100 @@ -22,6 +22,7 @@ """ import logging +import re import sys try: @@ -36,6 +37,11 @@ from oslo_config import cfg from oslo_config import generator +VALIDATE_DEFAULTS_EXCLUSIONS = [ + '.*_ur(i|l)', '.*connection', 'password', 'username', 'my_ip', + 'host(name)?', 'glance_api_servers', 'osapi_volume_listen', + 'osapi_compute_listen', +] _validator_opts = [ cfg.MultiStrOpt( @@ -51,6 +57,16 @@ help='Path to a YAML file containing definitions of options, as ' 'output by the config generator.'), cfg.BoolOpt( + 'check-defaults', + default=False, + help='Report differences between the sample values and current ' + 'values.'), + cfg.ListOpt( + 'exclude-options', + default=VALIDATE_DEFAULTS_EXCLUSIONS, + help='Exclude options matching these patterns when comparing ' + 'the current and sample configurations.'), + cfg.BoolOpt( 'fatal-warnings', default=False, help='Report failure if any warnings are found.'), @@ -86,6 +102,73 @@ return option in name_data +def _validate_defaults(sections, opt_data, conf): + """Compares the current and sample configuration and reports differences + + :param section: ConfigParser instance + :param opt_data: machine readable data from the generator instance + :param conf: ConfigOpts instance + :returns: boolean wether or not warnings were reported + """ + warnings = False + # Generating regex objects from ListOpt + exclusion_regexes = [] + for pattern in conf.exclude_options: + exclusion_regexes.append(re.compile(pattern)) + for group, opts in opt_data['options'].items(): + if group in conf.exclude_group: + continue + if group not in sections: + logging.warning( + 'Group %s from the sample config is not defined in ' + 'input-file', group) + continue + for opt in opts['opts']: + # We need to convert the defaults into a list to find + # intersections. defaults are only a list if they can + # be defined multiple times, but configparser only + # returns list + if not isinstance(opt['default'], list): + defaults = [str(opt['default'])] + else: + defaults = opt['default'] + + # Apparently, there's multiple naming conventions for + # options, 'name' is mostly with hyphens, and 'dest' + # is represented with underscores. + opt_names = set([opt['name'], opt.get('dest')]) + if not opt_names.intersection(sections[group]): + continue + try: + value = sections[group][opt['name']] + keyname = opt['name'] + except KeyError: + value = sections[group][opt.get('dest')] + keyname = opt.get('dest') + + if any(rex.fullmatch(keyname) for rex in exclusion_regexes): + logging.info( + '%s/%s Ignoring option because it is part of the excluded ' + 'patterns. This can be changed with the --exclude-options ' + 'argument', group, keyname) + continue + + if len(value) > 1: + logging.info( + '%s/%s defined %s times', group, keyname, len(value)) + if not opt['default']: + logging.warning( + '%s/%s sample value is empty but input-file has %s', + group, keyname, ", ".join(value)) + warnings = True + elif not frozenset(defaults).intersection(value): + logging.warning( + '%s/%s sample value %s is not in %s', + group, keyname, defaults, value) + warnings = True + return warnings + + def _validate_opt(group, option, opt_data): if group not in opt_data['options']: return False @@ -114,12 +197,14 @@ parser.parse() warnings = False errors = False + if conf.check_defaults: + warnings = _validate_defaults(sections, opt_data, conf) for section, options in sections.items(): if section in conf.exclude_group: continue for option in options: if _validate_deprecated_opt(section, option, opt_data): - logging.warn('Deprecated opt %s/%s found', section, option) + logging.warning('Deprecated opt %s/%s found', section, option) warnings = True elif not _validate_opt(section, option, opt_data): if section in KNOWN_BAD_GROUPS: @@ -129,7 +214,8 @@ 'cannot be validated properly.', option, section) continue - logging.error('%s/%s not found', section, option) + logging.error('%s/%s is not part of the sample config', + section, option) errors = True if errors or (warnings and conf.fatal_warnings): return 1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/releasenotes/notes/validator-check-defaults-e7b596a2fde781a8.yaml new/oslo.config-8.5.0/releasenotes/notes/validator-check-defaults-e7b596a2fde781a8.yaml --- old/oslo.config-8.3.3/releasenotes/notes/validator-check-defaults-e7b596a2fde781a8.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/oslo.config-8.5.0/releasenotes/notes/validator-check-defaults-e7b596a2fde781a8.yaml 2021-03-03 14:41:15.000000000 +0100 @@ -0,0 +1,7 @@ +--- +features: + - | + Add a ``--check-defaults`` flag to ``oslo-config-validator``. When set, + ``oslo-config-validator`` will compare the ``input-file`` with the sample + generated configuration and flag any discrepancies. It also obeys the + standard ``--exclude-group`` and ``--fatal-warning`` options. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/releasenotes/source/index.rst new/oslo.config-8.5.0/releasenotes/source/index.rst --- old/oslo.config-8.3.3/releasenotes/source/index.rst 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/releasenotes/source/index.rst 2021-03-03 14:41:15.000000000 +0100 @@ -6,6 +6,7 @@ :maxdepth: 1 unreleased + victoria ussuri train stein diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/releasenotes/source/victoria.rst new/oslo.config-8.5.0/releasenotes/source/victoria.rst --- old/oslo.config-8.3.3/releasenotes/source/victoria.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/oslo.config-8.5.0/releasenotes/source/victoria.rst 2021-03-03 14:41:15.000000000 +0100 @@ -0,0 +1,6 @@ +============================= +Victoria Series Release Notes +============================= + +.. release-notes:: + :branch: stable/victoria diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/requirements.txt new/oslo.config-8.5.0/requirements.txt --- old/oslo.config-8.3.3/requirements.txt 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/requirements.txt 2021-03-03 14:41:15.000000000 +0100 @@ -7,6 +7,6 @@ stevedore>=1.20.0 # Apache-2.0 oslo.i18n>=3.15.3 # Apache-2.0 rfc3986>=1.2.0 # Apache-2.0 -PyYAML>=3.12 # MIT +PyYAML>=5.1 # MIT requests>=2.18.0 # Apache-2.0 importlib_metadata>=1.7.0;python_version<'3.8' # Apache-2.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/setup.cfg new/oslo.config-8.5.0/setup.cfg --- old/oslo.config-8.3.3/setup.cfg 2020-11-18 18:43:08.247316800 +0100 +++ new/oslo.config-8.5.0/setup.cfg 2021-03-03 14:42:06.849606500 +0100 @@ -22,6 +22,11 @@ Programming Language :: Python :: 3 :: Only Programming Language :: Python :: Implementation :: CPython +[extras] +rst-generator = + rst2txt>=1.1.0 # BSD + sphinx>=1.8.0,!=2.1.0 # BSD + [files] packages = oslo_config diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/test-requirements.txt new/oslo.config-8.5.0/test-requirements.txt --- old/oslo.config-8.3.3/test-requirements.txt 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/test-requirements.txt 2021-03-03 14:41:15.000000000 +0100 @@ -25,3 +25,5 @@ # Bandit security code scanner bandit>=1.6.0,<1.7.0 # Apache-2.0 + +pre-commit>=2.6.0 # MIT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.config-8.3.3/tox.ini new/oslo.config-8.5.0/tox.ini --- old/oslo.config-8.3.3/tox.ini 2020-11-18 18:42:30.000000000 +0100 +++ new/oslo.config-8.5.0/tox.ini 2021-03-03 14:41:15.000000000 +0100 @@ -1,7 +1,7 @@ [tox] minversion = 3.2.0 distribute = False -envlist = py37,pep8 +envlist = py3,pep8 ignore_basepython_conflict = true [testenv] @@ -13,7 +13,7 @@ OS_STDERR_CAPTURE={env:OS_STDERR_CAPTURE:1} OS_TEST_TIMEOUT={env:OS_TEST_TIMEOUT:60} deps = - -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/victoria} + -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} -r{toxinidir}/test-requirements.txt -r{toxinidir}/requirements.txt -r{toxinidir}/doc/requirements.txt @@ -22,16 +22,9 @@ stestr run --suppress-attachments {posargs} stestr slowest -[testenv:lower-constraints] -deps = - -c{toxinidir}/lower-constraints.txt - -r{toxinidir}/test-requirements.txt - -r{toxinidir}/requirements.txt - -r{toxinidir}/doc/requirements.txt - [testenv:pep8] commands = - flake8 + pre-commit run -a # TODO(stephenfin): Add mypy here once it's passing {[testenv:bandit]commands} @@ -52,11 +45,11 @@ [testenv:docs] whitelist_externals = rm deps = - -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/victoria} + -c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt} -r{toxinidir}/doc/requirements.txt commands = rm -fr doc/build - sphinx-build -W --keep-going -b html doc/source doc/build/html {posargs} + sphinx-build -W --keep-going -b html -j auto doc/source doc/build/html {posargs} [testenv:mypy] commands = @@ -72,7 +65,7 @@ deps = {[testenv:docs]deps} commands = rm -rf releasenotes/build - sphinx-build -a -E -W -d releasenotes/build/doctrees --keep-going -b html releasenotes/source releasenotes/build/html + sphinx-build -W --keep-going -b html -j auto releasenotes/source releasenotes/build/html {posargs} [hacking] import_exceptions = oslo_config._i18n
