We are grateful to announce the release of: congress 4.0.0: Congress: The open policy framework for the cloud. This release is part of the newton release series. For more details, please see below. 4.0.0 ^^^^^ Congress now supports high-availability and high-query-throughput deployments with load-balanced policy engines and warm-standby data- source drivers. New Features ************ * Added lazy_tables flag in OpenStack datasource drivers, which enables datasource drivers to postpone pulling data from real datasource services until policy rules refer to the specified tables. * Added support for replicated (load-balanced) policy engines for high-availability and high-query-throughput deployments. See HA- Overview and HA-Deployment documentation for more information. * Added support for warm-standby data-source drivers managed by Pacemaker. See HA-Overview and HA-Deployment documentation for more information. * Congress now supports multi-node deployment where different components (policy engine, API server, and datasource drivers) may be deployed in separate processes on separate hosts. See deployment documentation for more information. Known Issues ************ * Ceilometer driver experiences error when retrieving the list of alarms. The impact is that the some ceilometer data may not be updated in Congress. We are currently working with the ceilometer team to find a resolution. Expect a resolution in the next minor release. * The specialized policy engine for VM placement (previously released as experimental) is not available in this release. Expect it to be available again in a future release. Upgrade Notes ************* * Added a new database table dstabledata to persist pushed data from a datasource. Necessary migration scripts are included in congress/db/migration/ Changes in congress 3.0.0.0rc1..4.0.0 ------------------------------------- fcccfb2 Critical newton fix: Use new db session for table locking c411ca2 Update release notes for Newton release 6b8288d Update haht docs 98c522b Disable subtransactions in table locking transaction 5ed837b Specify text-length for MySQL only c1829a8 Fix rule sync for head-only rules 46ae7ec Disallow duplicated policy name in DB 50e3325 Mark distributed_architecture config as DEPRECATED d32cb5a control_bus service has only 1 heartbeat thread c9bfcdd Remove the traceback added by oslo-messaging RPC 5485d0b Fixes to synchronize_policies 102967a Default to single process in devstack 740ad70 Devstack to support CONGRESS_REPLICATED flag 960cf73 Remove outdated changes in docs 558c561 Use keystone session in keystone_driver 7ed1413 Make policy rule requests gives 404 (not 400) when policy not found 0559c4e Some updations in congress docs 5dd613f Modified to use Identity v2.0 15d3666 Update reno for stable/newton 59571ff Update .gitreview for stable/newton 7c6d7c5 Use only strings in paste.deploy.loadapp global_conf 1d4e784 haht release notes f8ca2a7 Editing pass over docs dc8e2db Updated from global requirements 1e4a353 Fix standalon install manual in README 38d3aa4 Replace retrying with tenacity ee441fe Raise BadRequest while pushing data to non-push ds f717711 give correct http error on getting non-existent policy 9327576 Adds a releasenote of lazy datasource 83fdc8f Fix issues raised while starting multiple PE's a64ce3b Keystone CLI is removed and so replaced with openstack CLI 36e7ab2 Add support to synchronize one policy 5e9319c Added Monasca and OPNFV Doctor to section 3 cdca8bd Fix objects_translator fails to pull data 9d0ead0 Fix alarms_translator fails to pull data 204a5c6 Use Reno for release note 4b0023b Clean imports in code 9c00962 remove new_arch in tox 5e9fbeb Remove distributed_architecture flag dfdfc6a Use assertIn(A, B) instead of assertTrue(A in B ) 9d09fb5 trivial typo fix 417ad2e Support lazy tables in openstack drivers d7a81b9 Instantiating datasource service by synchronizer ba39592 Remove old synchronizer code. 77e845b Resolve gate: reduce ds sync period in devstack 17c82c4 Restore the DSE opt group d7729f3 DSE2 - resubscribe if update missing for too long 05b0714 Remove deepsix reference in datasource drivers 7a1c65b Sync datasources only on datasource node 1f76d0a Add __ne__ built-in function 6b76b0b Merge Dse2Runtime and DseRuntime class 9338f3f Clean up old dse codes in Policy Engine c942d89 use - instead of _ in cli opts eb77bd1 Added Congress HA Overview guide 9cfa297 Updated from global requirements 71ac0a1 Replace raw_input with input to make PY3 compatible 0bd9de0 Modify existing HA tempest test c81cd05 Clean imports in code 6bc2bd7 TrivialFix: Remove logging import unused 4ecf62c Updated from global requirements b67a728 dist_arch flag removed from devstack d76e639 Fix tempest.conf generation 903cba8 Correct reraising of exception 603e14d Updated from global requirements 97a15ab Remove white space between print and () b76877d Improve logging in dse_node.py f8a3395 Introduce 'lazy_tables' flag to nova datasource driver 796d160 Remove an unnecessary assignment 409fd5e Updated from global requirements e9b9d61 Added oslo-messaging exchange 'congress' 6f06bdf Cleanup old dse code in API models (part-2) 9a10a90 HAHT - datasource synchronizer use UUID not name 2881245 Fix launching devstack failure in gate 8b299e4 HAHT - Mitigate missed action during DSD failover bcf4a48 HAHT - persist pushed data df3ce26 Add required api_version argument in ironic 551d59c Updated from global requirements cb58abf Updated from global requirements a9851e5 Race-free synchronize policies 6f60b0f Replaced e.message with str(e) fd6600c Disable old DSE code 63d9616 Updated from global requirements fb921a8 Fix string interpolation at logging call 07e925c Implement horizon plugin model a254051 Scrap testHA:test_datasource_db_sync_remove 82f06ed Correct reraising of exception 942c722 Fix an argument order of assertTrue 1808c12 Enable devstack to start congress services seperately 0549534 Fix misuse of assertTrue b4dd5f9 Updated from global requirements a5013cd Add Python 3.5 classifier and venv 4a3c01d Updated from global requirements bcb7683 Fix Gate HA test Failure 830825b Updated from global requirements 10475c5 Exit if datasource could not be loaded f072427 modify the home-page info with the developer documentation ea51bc9 Updated from global requirements 1b606a0 API routing to intranode PE eb7ab43 Deployment guide of Resource Agent 0c6aafe Migrate synchronizer to DSE2 87f6d5c Use auth_url from horizon settings d526bdc Removed extra dashes in title lines 2e9f698 remove unused log d85fbf3 Thread-safety review cfb7a62 Adds custom ocf for HA of DataSource Node 8d8bf28 Updated from global requirements 1086f36 Remove unused LOG to keep code clean 0e681e5 WIP:Update description field for datasources 1b40706 Update to fix minor grammar 5775492 ExecutionDriver handles exec requests from replicated PEs 5c0d66b Move dse_opts to default group 0c2f1f9 Remove policy_engine dependency while starting API f4ecb98 Updated from global requirements 126e124 Stop import datasource manager in plexxi driver and harness cee1006 Removed duplicate oslo-concurrency requirement c58d1d8 Fix test_webservice.py for py35 f3170e8 Adds execute(self, action, action_args) to PlexxiDriver c451d0e TestPolicyExecute no longer inherits from TestCongress 4cea8ba Add keystone v3 datasource 77b3d0e Enable different deployment configurations for HA 863679f Updated from global requirements bb23203 Prevent a new datasource from deleted in creation 95e5776 Updated from global requirements dfff845 Start and Stop DatasourceDriver in new architecture 1737e33 Updated from global requirements 57411fe Fix wrong usage of novaclient dd58927 Fix gate failure db1af67 Add congress to service_available group d7e5461 Add support to both v2 and v3 auth_urls 88f4a87 Remove use of deprecated network_resources module 00f8968 Updated from global requirements 38d4b75 Updated from global requirements 3bee42d Add configuration options description to docs c6c8035 Updated from global requirements 6d49963 List 'node_id' as part of [dse] section in conf d8a00b6 dse2 sequenced, differential pub-sub e62e70f Updated from global requirements 8af9331 Add reference to configuration options in Upgrade instructions 3f14dd5 Make the messaging driver configurable 0fd23cb Working Hot Stanby HA on any driver of oslo.messaging 78ac4d1 Use right method to get admin credential cd29dc0 Updated from global requirements c6f35f3 Tempest for Push Type Driver 1f9e982 Load rules after service start 3fe1aca Add Upgrade instructions to README c0c6fcc Fix logging in dse2 a9fc5b5 Migrate test-congress to dse2 cef95a2 Remove unnecessary executable permissions c8f6465 Updated from global requirements 5c648aa Updated from global requirements e0e8527 Loads persited policy rules during launcing PolicyEngine 2541bb0 Changed assertTrue(isinstance()) to assertIsInstance() fb95a9a Updated from global requirements ceafc4d Updated from global requirements 6c80f45 Support datasource names in API e2f786e Updated from global requirements d457160 remove verbose option in devstack plugin 8adcb0a Launch Congress with distributed_architecture flag is true e75bbf1 Fix row-order-sensitivity in test_congress 069b38e Adds Doctor Driver a72d4d0 Loads configured datasource driver b295150 Updated from global requirements fbd1f06 [Trivial] Remove unnecessary executable privilege 955642a Fix gate failure 9fc3b5b Add dse_opts to the conf file 320b081 (un)subhandler for DSE2 77c8801 Node id for devstack install fd18c63 Use test_data_service in tests2 2354bf4 Migrate harness to DSE2 d027009 Add keystoneauth1 to requirements.txt 5c92ba5 Clarify and correct tests/helper.retry_check_no_subscribers 7b0cae5 Fix subscriber_list has no return value 855ef7c Updated from global requirements 1e78c54 Resolve Gate failure 211a4e3 Switch to Ceilometer tempest plugin b20ce47 Avoid re-starting service rpc_server 592bdea Updated from global requirements 8c65d2b Fixes Tempest error caused by tempest's changes 200ff82 Remove version from setup.cfg fc664f2 Define context.roles with base class b9b1ba7 Updated from global requirements b933c51 keystone session touch-up 33bbacc Use keystone session in murano_driver 9248b6f Use keystone sessions to authenticate 9068acc Fix typo in congress 4d48915 Use keystone sessions to authenticate b692284 Use keystone session in murano_driver d554770 Update standalone setup instructions e20bcc4 Also package congress_tempest_tests 68cefa3 Add Push driver b4d05f3 Also package congress_tempest_tests cf8c8b5 Fix for broken antlr3 in stand-alone install 8ed5b84 Build docs using tox 464bd66 Enable Murano tempest tests fc9143a Update standalone setup instructions cf09349 Minor updates to standalone install c895084 Build docs using tox c12fcbf Minor updates to standalone install b799d37 Remove cloudfoundry from congress.conf instructions f2350cc Update .gitreview for stable/mitaka 88b0ef4 Remove cloudfoundry from congress.conf instructions c90410f Fix for broken antlr3 in stand-alone install d44b0b5 Cleanup unused Oslo Incubator code and references Diffstat (except docs and test files) ------------------------------------- .gitreview | 1 + .testr.conf | 7 + .testr.conf.new | 7 - .testr.conf.old | 7 - README.rst | 259 +++++-- antlr3runtime/Python/antlr3 | 1 + antlr3runtime/Python3/antlr3 | 1 + congress/api/action_model.py | 16 +- congress/api/api_utils.py | 15 +- congress/api/application.py | 5 +- congress/api/base.py | 36 +- congress/api/datasource_model.py | 84 ++- congress/api/error_codes.py | 2 +- congress/api/policy_model.py | 37 +- congress/api/row_model.py | 63 +- congress/api/rule_model.py | 31 +- congress/api/schema_model.py | 24 +- congress/api/status_model.py | 21 +- congress/api/system/driver_model.py | 30 +- congress/api/table_model.py | 36 +- congress/api/webservice.py | 25 +- congress/common/config.py | 53 +- congress/common/eventlet_server.py | 57 +- congress/context.py | 5 +- congress/datalog/base.py | 10 + congress/datalog/compile.py | 6 +- congress/datalog/factset.py | 4 +- congress/datalog/nonrecursive.py | 4 +- congress/datalog/unify.py | 9 + congress/datasources/ceilometer_driver.py | 89 +-- congress/datasources/cinder_driver.py | 52 +- congress/datasources/cloudfoundryv2_driver.py | 11 +- congress/datasources/datasource_driver.py | 264 +++++-- congress/datasources/datasource_utils.py | 35 +- congress/datasources/doctor_driver.py | 105 +++ congress/datasources/glancev2_driver.py | 105 +-- congress/datasources/heatv1_driver.py | 58 +- congress/datasources/ironic_driver.py | 103 ++- congress/datasources/keystone_driver.py | 35 +- congress/datasources/keystonev3_driver.py | 171 +++++ congress/datasources/monasca_driver.py | 80 +-- congress/datasources/murano_driver.py | 33 +- congress/datasources/neutron_driver.py | 109 +-- congress/datasources/neutronv2_driver.py | 53 +- congress/datasources/nova_driver.py | 60 +- congress/datasources/plexxi_driver.py | 28 +- congress/datasources/push_driver.py | 79 +++ congress/datasources/swift_driver.py | 40 +- congress/datasources/vCenter_driver.py | 13 +- congress/db/api.py | 7 +- congress/db/datasources.py | 21 +- congress/db/db_ds_table_data.py | 90 +++ congress/db/db_policy_rules.py | 51 +- congress/db/migration/README | 4 +- ...01e78af70b91_add_datasource_data_persistence.py | 50 ++ congress/dse/d6cage.py | 2 +- congress/dse/deepsix.py | 11 +- congress/dse2/README.rst | 2 +- congress/dse2/control_bus.py | 36 +- congress/dse2/data_service.py | 311 +++++++- congress/dse2/deepsix2.py | 7 +- congress/dse2/dse_node.py | 542 ++++++++++---- congress/dse2/test_control_bus.py | 8 +- congress/dse2/test_data_service.py | 94 --- congress/exception.py | 8 +- congress/harness.py | 343 ++++----- congress/managers/__init__.py | 0 congress/managers/datasource.py | 403 ----------- congress/openstack/__init__.py | 0 congress/openstack/common/__init__.py | 0 congress/opts.py | 2 + congress/policy_engines/agnostic.py | 707 +++++++++++++------ congress/server/congress_server.py | 103 ++- congress/service.py | 34 +- congress/synchronizer.py | 296 -------- .../datasources/performance_datasource_driver.py | 35 +- .../policy_engines/disabled_test_vmplacement.py | 779 +++++++++++++++++++++ .../policy_engines/test_agnostic_performance.py | 53 +- congress/utils.py | 22 +- congress_dashboard/README.md | 25 + congress_dashboard/__init__.py | 0 congress_dashboard/api/__init__.py | 0 congress_dashboard/api/congress.py | 299 ++++++++ congress_dashboard/datasources/__init__.py | 0 congress_dashboard/datasources/panel.py | 26 + congress_dashboard/datasources/tables.py | 89 +++ .../templates/datasources/_detail_overview.html | 14 + .../datasources/templates/datasources/detail.html | 14 + .../datasources/templates/datasources/index.html | 19 + congress_dashboard/datasources/urls.py | 34 + congress_dashboard/datasources/utils.py | 187 +++++ congress_dashboard/datasources/views.py | 272 +++++++ congress_dashboard/enabled/_50_policy.py | 3 + congress_dashboard/enabled/_60_policies.py | 9 + congress_dashboard/enabled/_70_datasources.py | 5 + congress_dashboard/policies/__init__.py | 0 congress_dashboard/policies/forms.py | 69 ++ congress_dashboard/policies/panel.py | 26 + congress_dashboard/policies/rules/__init__.py | 0 congress_dashboard/policies/rules/tables.py | 111 +++ congress_dashboard/policies/rules/views.py | 36 + congress_dashboard/policies/rules/workflows.py | 441 ++++++++++++ congress_dashboard/policies/tables.py | 94 +++ .../policies/templates/policies/_create.html | 22 + .../templates/policies/_detail_overview.html | 18 + .../policies/templates/policies/create.html | 11 + .../policies/templates/policies/detail.html | 17 + .../policies/templates/policies/index.html | 13 + .../policies/rules/_create_conditions.html | 174 +++++ .../templates/policies/rules/_create_output.html | 65 ++ .../templates/policies/rules/_mapping_row.html | 21 + .../policies/templates/policies/rules/create.html | 24 + congress_dashboard/policies/urls.py | 32 + congress_dashboard/policies/views.py | 133 ++++ congress_dashboard/static/admin/css/policies.css | 134 ++++ congress_dashboard/static/admin/js/policies.js | 288 ++++++++ congress_dashboard/templates/admin/_scripts.html | 5 + congress_dashboard/templates/admin/base.html | 14 + .../services/policy/policy_client.py | 16 +- .../congress_datasources/test_ceilometer.py | 6 +- .../scenario/congress_datasources/test_cinder.py | 4 +- .../scenario/congress_datasources/test_doctor.py | 88 +++ .../scenario/congress_datasources/test_glancev2.py | 4 +- .../congress_datasources/test_keystonev2.py | 4 +- .../scenario/congress_datasources/test_murano.py | 27 +- .../congress_datasources/test_neutronv2.py | 4 +- .../scenario/congress_datasources/test_nova.py | 4 +- contrib/horizon/_50_policy.py | 3 - contrib/horizon/_60_policies.py | 4 - contrib/horizon/_70_datasources.py | 5 - contrib/horizon/congress.py | 296 -------- contrib/horizon/datasources/__init__.py | 0 contrib/horizon/datasources/panel.py | 26 - contrib/horizon/datasources/tables.py | 89 --- .../templates/datasources/_detail_overview.html | 14 - .../datasources/templates/datasources/detail.html | 14 - .../datasources/templates/datasources/index.html | 19 - contrib/horizon/datasources/urls.py | 33 - contrib/horizon/datasources/utils.py | 187 ----- contrib/horizon/datasources/views.py | 272 ------- contrib/horizon/policies/__init__.py | 0 contrib/horizon/policies/forms.py | 67 -- contrib/horizon/policies/panel.py | 26 - contrib/horizon/policies/rules/__init__.py | 0 contrib/horizon/policies/rules/tables.py | 110 --- contrib/horizon/policies/rules/views.py | 36 - contrib/horizon/policies/rules/workflows.py | 441 ------------ contrib/horizon/policies/tables.py | 93 --- .../policies/templates/policies/_create.html | 22 - .../templates/policies/_detail_overview.html | 18 - .../policies/templates/policies/create.html | 11 - .../policies/templates/policies/detail.html | 17 - .../horizon/policies/templates/policies/index.html | 13 - .../policies/rules/_create_conditions.html | 174 ----- .../templates/policies/rules/_create_output.html | 65 -- .../templates/policies/rules/_mapping_row.html | 21 - .../policies/templates/policies/rules/create.html | 24 - contrib/horizon/policies/urls.py | 32 - contrib/horizon/policies/views.py | 135 ---- contrib/horizon/static/admin/css/policies.css | 134 ---- contrib/horizon/static/admin/js/policies.js | 288 -------- contrib/horizon/templates/admin/_scripts.html | 5 - contrib/horizon/templates/admin/base.html | 15 - contrib/nova/congress.py | 4 +- devstack/plugin.sh | 42 +- devstack/settings | 13 +- etc/congress-config-generator.conf | 1 + openstack-common.conf | 6 - releasenotes/notes/.placeholder | 0 .../notes/bp-lazy-datasource-6cc39bee817548de.yaml | 5 + .../notes/haht-replicated-pe-affb7dcf83effd68.yaml | 15 + .../notes/newton-other-notes-c885979502f3f540.yaml | 14 + releasenotes/source/_static/.placeholder | 0 releasenotes/source/_templates/.placeholder | 0 releasenotes/source/conf.py | 270 +++++++ releasenotes/source/index.rst | 18 + releasenotes/source/newton.rst | 6 + releasenotes/source/unreleased.rst | 5 + requirements.txt | 42 +- scripts/ocf/congress-datasource | 313 +++++++++ setup.cfg | 9 +- test-requirements.txt | 14 +- .../antlr3-antlr-3.5/runtime/Python/antlr3/main.py | 2 +- tools/check_dot_testr_conf.sh | 8 - tox.ini | 31 +- 269 files changed, 11578 insertions(+), 10302 deletions(-) Requirements updates -------------------- diff --git a/requirements.txt b/requirements.txt index 8040feb..2121a79 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5 +5 @@ -Babel>=1.3 # BSD +Babel>=2.3.4 # BSD @@ -8 +8,2 @@ PuLP>=1.0.4 # MIT -keystonemiddleware!=4.1.0,>=4.0.0 # Apache-2.0 +keystoneauth1>=2.10.0 # Apache-2.0 +keystonemiddleware!=4.1.0,!=4.5.0,>=4.0.0 # Apache-2.0 @@ -12,2 +13,2 @@ pbr>=1.6 # Apache-2.0 -python-keystoneclient!=1.8.0,!=2.1.0,>=1.6.0 # Apache-2.0 -python-heatclient>=0.6.0 # Apache-2.0 +python-keystoneclient!=2.1.0,>=2.0.0 # Apache-2.0 +python-heatclient>=1.4.0 # Apache-2.0 @@ -16,3 +17,3 @@ python-novaclient!=2.33.0,>=2.29.0 # Apache-2.0 -python-neutronclient!=4.1.0,>=2.6.0 # Apache-2.0 -python-ceilometerclient>=2.2.1 # Apache-2.0 -python-cinderclient>=1.3.1 # Apache-2.0 +python-neutronclient>=5.1.0 # Apache-2.0 +python-ceilometerclient>=2.5.0 # Apache-2.0 +python-cinderclient!=1.7.0,!=1.7.1,>=1.6.0 # Apache-2.0 @@ -20,2 +21,2 @@ python-swiftclient>=2.2.0 # Apache-2.0 -python-ironicclient>=1.1.0 # Apache-2.0 -alembic>=0.8.0 # MIT +python-ironicclient>=1.6.0 # Apache-2.0 +alembic>=0.8.4 # MIT @@ -23,3 +24,3 @@ python-dateutil>=2.4.2 # BSD -python-glanceclient>=2.0.0 # Apache-2.0 -Routes!=2.0,!=2.1,>=1.12.3;python_version=='2.7' # MIT -Routes!=2.0,>=1.12.3;python_version!='2.7' # MIT +python-glanceclient!=2.4.0,>=2.3.0 # Apache-2.0 +Routes!=2.0,!=2.1,!=2.3.0,>=1.12.3;python_version=='2.7' # MIT +Routes!=2.0,!=2.3.0,>=1.12.3;python_version!='2.7' # MIT @@ -27,5 +28,6 @@ six>=1.9.0 # MIT -oslo.config>=3.7.0 # Apache-2.0 -oslo.context>=0.2.0 # Apache-2.0 -oslo.db>=4.1.0 # Apache-2.0 -oslo.messaging>=4.0.0 # Apache-2.0 -oslo.policy>=0.5.0 # Apache-2.0 +oslo.concurrency>=3.8.0 # Apache-2.0 +oslo.config>=3.14.0 # Apache-2.0 +oslo.context>=2.9.0 # Apache-2.0 +oslo.db!=4.13.1,!=4.13.2,>=4.10.0 # Apache-2.0 +oslo.messaging>=5.2.0 # Apache-2.0 +oslo.policy>=1.9.0 # Apache-2.0 @@ -33,2 +35,2 @@ oslo.serialization>=1.10.0 # Apache-2.0 -oslo.service>=1.0.0 # Apache-2.0 -oslo.utils>=3.5.0 # Apache-2.0 +oslo.service>=1.10.0 # Apache-2.0 +oslo.utils>=3.16.0 # Apache-2.0 @@ -36 +38 @@ oslo.middleware>=3.0.0 # Apache-2.0 -oslo.vmware>=1.16.0 # Apache-2.0 +oslo.vmware>=2.11.0 # Apache-2.0 diff --git a/test-requirements.txt b/test-requirements.txt index 58237e5..fae3138 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -7,2 +7,2 @@ coverage>=3.6 # Apache-2.0 -fixtures>=1.3.1 # Apache-2.0/BSD -mock>=1.2 # BSD +fixtures>=3.0.0 # Apache-2.0/BSD +mock>=2.0 # BSD @@ -10,2 +10 @@ mox3>=0.7.0 # Apache-2.0 -requests-mock>=0.7.0 # Apache-2.0 -oslo.concurrency>=3.5.0 # Apache-2.0 +requests-mock>=1.0 # Apache-2.0 @@ -16 +15 @@ testtools>=1.4.0 # MIT -retrying!=1.3.0,>=1.2.3 # Apache-2.0 +tenacity>=3.0.0 # Apache-2.0 @@ -19 +18 @@ retrying!=1.3.0,>=1.2.3 # Apache-2.0 -sphinx!=1.2.0,!=1.3b1,<1.3,>=1.1.2 # BSD +sphinx!=1.3b1,<1.3,>=1.2.1 # BSD @@ -20,0 +20,3 @@ oslosphinx!=3.4.0,>=2.5.0 # Apache-2.0 + +# release note requirements +reno>=1.8.0 # Apache2