python-adjutant 0.5.0 (ussuri)
We are pumped to announce the release of: python-adjutant 0.5.0: An admin task workflow service for openstack. This release is part of the ussuri release series. The source is available from: https://opendev.org/openstack/python-adjutant Download the package from: https://tarballs.openstack.org/adjutant/ For more details, please see below. 0.5.0 ^^^^^ New Features ************ * Feature sets have been introduced, allowing Adjutant's plugins to be registered via entrypoints, so all that is required to include them is to install them in the same environment. Then which DelegateAPIs are enabled from the feature sets is still controlled by "adjutant.api.active_delegate_apis". * Adjutant's config system is now built on top of CONFspirator, which is a config definition library like oslo.config but tailored specifically for some use-cases that Adjutant has. * Adjutant now introduces two new concepts for handling the configurable APIs and workflow layer. DelegateAPIs are now the APIs which can be customised and enabled in Adjutant, and Tasks are now their own layer which can be called from the DelegateAPIs. Upgrade Notes ************* * Adjutant will now officially only support Python3.6 onwards, and will start introducing features only applicable to that version onwards. * Plugins that want to work with Adjutant will need to be upgraded to use the new feature set pattern for registrations of Actions, Tasks, DelegateAPIs, and NotificationHandlers. * An almost entirely different config format will need to be used, but there will be a better feedback from the service during startup regarding the validity of the config. An example is present in *etc/adjutant.yaml* but a new one can be generated by using *tox -e venv adjutant-api exampleconfig*. * * Major changes internal classes. Many plugins likely to need reworking before using this release to match new internal changes. * The Task database model has been renamed and moved, this will require downtime for the migration to run, but should be fairly quick. Deprecation Notes ***************** * Python2 support has been officially deprecated. The code may still be compatible for a bit longer, but we are also switching to Django 2.2, and python2 can no longer be tested. Support for Python less than 3.6 has also been deprecated, but may still work for older python3 versions for a little longer, although not officially. * Adjutant's plugin mechanism has entirely changed, making many plugins imcompatible until updated to match the new plugin mechanism. * * TaskViews are gone, and replaced with DelegateAPIs, with much of their old logic now in the TaskManager and BaseTask. * tasks config cannot override default_actions anymore * standardized task API response codes on 202 unless task is completed from 200 * Action stages renamed to 'prepare', 'approve', 'submit'. * TaskView logic and task defition moved to new task.v1 layer * UserSetPassword API has been removed because it was a duplicate of UserResetPassword. * Removed redundant ip_address value on Task model * multiple task_types have been renamed * signup to create_project_and_user * invite_user to invite_user_to_project * reset_password to reset_user_password * edit_user to edit_user_roles * update_email to update_user_email Bug Fixes ********* * Reissuing task token now deletes old task tokens properly. Changes in python-adjutant 0.3.0..0.5.0 --------------------------------------- 592e241 Use Django's SECURE_PROXY_SSL_HEADER and add config 994e844 Add extra notes to EditUserRolesAction ad81fdf Update to Django 2.2, drop py2 support e71a1c2 Switch to Ussuri jobs 0eaac89 Refactor the plugin layer to use entrypoints c750fd6 Rework Adjutant's config system to use CONFspirator c9038df Major refactor of the Adjutant task layer d62eada fix issue with iteritems still used in one place 6c0502d Fix issue with lack of libssl in bindep d00e3a0 Update api-ref f81cf9a Update docs building 085f058 Add Python 3 Train unit tests 470f253 Added support for reno release notes 090e0af Fix old py2 default value for action model 4709c37 Add bindep.txt file 7f3a7b6 Sync Sphinx requirement c5ba76c Fix lack of package include in pbr patch 286c530 Dropping the py35 testing 472f3c6 Convert setup to use pbr afcf377 Update requirements files 7fc4b95 OpenDev Migration Patch 326c799 Fix sample config quota_services definition e64b636 Fix yaml.load(input) deprecation 764399b better handle empty notification confs ba14a45 Fixed some unneeded domain_id handling 27ac3ae fix mysqlclient imcompatibility with current django LTS f5a76ce fix pep8 issues because of new pep8 version fef0651 Fix issues around LDAP backed Keystone 6a849ee Fix an issue with tasks being approved when not yet valid 06cb36e Fix conflicts with tox 3fe9d17 Temporary fix for user enumeration via password reset API c8cbbdb Fix mutiple world in history.rst fdc8be0 Spelling mistake, refered -> referred 7a0a8f2 Consistent about using True and False and not true and false d4ab292 Switch to ignoring pep W503 e058342 Use openstack-tox-cover template 93dfcb1 recieve spelling error 5e297a7 add python 3.6 unit test job 194ef27 import zuul job settings from project-config 99e52b0 fix tox python3 overrides 82af9e7 fix the project setting in .gitreview efb6c73 Split quota matching functions, and fix percentage 4ee2820 Add util for action validation to standardise use e393a7e fix typos in documentation fbe6067 Fix issues with missing service dab3938 Move task error handling to function c569816 Make datetime strings consistent for future parsing a6ecf47 Removed unnessacary code in wsgi.py file 59fc30c Properly use TLS in Django for email 45f9970 Token not cancelled if task is invalid f1cb430 fix typo in history document 9fefbfe Add documentation for the project history and guide lines 1a07c1e Add a param to control is we include usage in quota data e720a51 Add notification link in email template 405a4e9 update quota completed template with project name 6508cc3 Add Octavia (LBaaS) into quota management 7ccc5b2 Smaller Quota changes ignore change history 053ec93 Don't catch exceptions in quota manager 8d72c92 Fix more issues around config of quota_services 31a1d63 Add Quota Docs and API references 6790c51 Fix issues in quota manager editing settings module fa6256d Update the QUOTA_SERVICES config to be a region mapping 94c077b Move more quota logic into QuotaManager a6978f6 Fix non-generic email error msg feff951 Fix notifications not being auto acknowledged a0fb0b1 Add pagination for notifications 09448a3 Remove the redundant word 6635a30 Lower quota sizes always in preapproved list b25617a List IDs of parent projects 88cfb3c Ensure actions are setup before pre_approve 6ea0993 fix doc codeblock missing extra space 571c89f Add support for Credentials in Identity Manager f8b8e0c Fix internal error at preapprove now responds 500 96e6291 Bump keystonemiddleware version due to cache bug 028ca93 Add Project Admin Decorator 1d5635f add the option to disable auto approve for tasks c73b56f Zero sizes qoutas caused incorrect size matching b0496e6 Users can only edit users with full permission 41cc1b9 Selectively disable token caching 7a448a3 Link to tasks panel in notifications efdb2ae Change assert(Not)Equals to assert(Not)Equal 553c7f4 fix cover report tox job e5f55c6 rename identity cache for consistency bfef179 Add link to Read the Docs for project doc 6cbf3fa Documentation and Api Reference 1e891da Update IdentityManger and FakeManager e957f1e fix zuul cover issues 950ff0b Make reset password emails case insensitive ae5c194 Add Version Endpoints b0ce4a1 be able to disable a given API version 3973fcb Moving clients to common module 2f0dad2 Remove link to modindex 6f60b05 Added UpdateProjectQuota Diffstat (except docs and test files) ------------------------------------- .gitignore | 7 + .gitreview | 4 +- .zuul.yaml | 6 + DEVSTACK_GUIDE.md | 198 --- MANIFEST.in | 9 - README.md | 357 ------ README.rst | 40 + adjutant/__init__.py | 11 +- adjutant/actions/__init__.py | 17 + adjutant/actions/migrations/0001_initial.py | 2 +- .../actions/migrations/0003_auto_20190610_0205.py | 20 + .../actions/migrations/0004_auto_20190610_0209.py | 22 + adjutant/actions/models.py | 7 +- adjutant/actions/user_store.py | 219 ---- adjutant/actions/utils.py | 47 +- adjutant/actions/v1/__init__.py | 1 - adjutant/actions/v1/app.py | 7 - adjutant/actions/v1/base.py | 194 ++- adjutant/actions/v1/misc.py | 105 +- adjutant/actions/v1/models.py | 62 - adjutant/actions/v1/projects.py | 168 ++- adjutant/actions/v1/resources.py | 413 +++++-- adjutant/actions/v1/serializers.py | 75 +- adjutant/actions/v1/users.py | 233 ++-- adjutant/api/__init__.py | 17 + adjutant/api/exception_handler.py | 58 + adjutant/api/migrations/0001_initial.py | 4 +- adjutant/api/migrations/0005_auto_20190610_0209.py | 25 + adjutant/api/migrations/0006_auto_20190610_0209.py | 22 + adjutant/api/migrations/0007_auto_20190610_0209.py | 22 + adjutant/api/migrations/0008_auto_20190610_0209.py | 26 + adjutant/api/models.py | 97 +- adjutant/api/urls.py | 12 +- adjutant/api/utils.py | 31 + adjutant/api/v1/__init__.py | 1 - adjutant/api/v1/app.py | 6 - adjutant/api/v1/base.py | 35 + adjutant/api/v1/models.py | 51 - adjutant/api/v1/openstack.py | 352 ++++-- adjutant/api/v1/tasks.py | 566 ++------- .../api/v1/templates/initial_password_token.txt | 15 - adjutant/api/v1/urls.py | 9 +- adjutant/api/v1/utils.py | 191 +-- adjutant/api/v1/views.py | 532 ++------ adjutant/api/views.py | 68 + adjutant/commands/__init__.py | 0 adjutant/commands/management/__init__.py | 0 adjutant/commands/management/commands/__init__.py | 0 .../commands/management/commands/exampleconfig.py | 89 ++ adjutant/common/__init__.py | 0 adjutant/common/constants.py | 19 + adjutant/{actions => common}/openstack_clients.py | 28 +- adjutant/common/quota.py | 330 +++++ adjutant/common/user_store.py | 365 ++++++ adjutant/common/utils.py | 24 + adjutant/config/__init__.py | 105 ++ adjutant/config/api.py | 52 + adjutant/config/django.py | 130 ++ adjutant/config/feature_sets.py | 18 + adjutant/config/identity.py | 137 +++ adjutant/config/notification.py | 21 + adjutant/config/quota.py | 160 +++ adjutant/config/workflow.py | 170 +++ adjutant/core.py | 83 ++ adjutant/exceptions.py | 133 +- adjutant/feature_set.py | 176 +++ adjutant/middleware.py | 30 +- adjutant/notifications/__init__.py | 15 + adjutant/notifications/models.py | 130 -- adjutant/notifications/templates/notification.txt | 17 +- adjutant/notifications/utils.py | 42 + adjutant/notifications/v1/__init__.py | 0 adjutant/notifications/v1/base.py | 60 + adjutant/notifications/v1/email.py | 142 +++ adjutant/settings.py | 177 ++- adjutant/startup/__init__.py | 2 +- adjutant/startup/checks.py | 80 +- adjutant/startup/config.py | 40 + adjutant/startup/loading.py | 21 + adjutant/tasks/__init__.py | 15 + adjutant/tasks/migrations/0001_initial.py | 44 + .../tasks/migrations/0002_auto_20190619_0613.py | 79 ++ adjutant/tasks/migrations/__init__.py | 0 adjutant/tasks/models.py | 137 +++ adjutant/{api/v1 => tasks}/templates/completed.txt | 0 .../create_project_and_user_completed.txt} | 0 .../templates/create_project_and_user_initial.txt} | 0 .../templates/create_project_and_user_token.txt} | 0 adjutant/{api/v1 => tasks}/templates/initial.txt | 0 .../invite_user_to_project_completed.txt} | 0 .../templates/invite_user_to_project_token.txt} | 0 .../templates/reset_user_password_completed.txt} | 0 .../templates/reset_user_password_token.txt} | 0 adjutant/{api/v1 => tasks}/templates/token.txt | 0 .../templates/update_quota_completed.txt} | 2 +- .../templates/update_user_email_completed.txt} | 0 .../templates/update_user_email_started.txt} | 0 .../templates/update_user_email_token.txt} | 0 adjutant/tasks/v1/__init__.py | 0 adjutant/tasks/v1/base.py | 532 ++++++++ adjutant/tasks/v1/manager.py | 106 ++ adjutant/tasks/v1/projects.py | 39 + adjutant/tasks/v1/resources.py | 31 + adjutant/tasks/v1/users.py | 101 ++ adjutant/tasks/v1/utils.py | 160 +++ adjutant/test_settings.py | 333 ----- adjutant/utils.py | 48 - adjutant/version.py | 18 + adjutant/wsgi.py | 20 +- .../_static/fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes api-ref/source/admin-api.inc | 478 +++++++ api-ref/source/conf.py | 285 +++++ api-ref/source/delegate-apis.inc | 433 +++++++ api-ref/source/http-status.yaml | 38 + api-ref/source/index.rst | 11 + api-ref/source/parameters.yaml | 165 +++ api-ref/source/v1-api-reference.rst | 93 ++ bindep.txt | 23 + conf/conf.yaml | 349 ------ etc/adjutant.yaml | 796 ++++++++++++ package_readme.rst | 21 +- .../notes/django-2-2-465a8bb124f1f7fe.yaml | 12 + .../notes/feature-sets-f363d132c8c377cf.yaml | 17 + .../notes/story-2004488-5468c184cc3a4691.yaml | 13 + .../notes/story-2004489-857f37e4f6a0fe5c.yaml | 33 + releasenotes/source/conf.py | 264 ++++ releasenotes/source/index.rst | 21 + releasenotes/source/unreleased.rst | 5 + requirements.txt | 35 +- setup.cfg | 42 + setup.py | 62 +- test-requirements.txt | 15 +- tox.ini | 45 +- 161 files changed, 14424 insertions(+), 6970 deletions(-) Requirements updates -------------------- diff --git a/requirements.txt b/requirements.txt index f29e2ae..cfc10da 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1 @@ -# pinned versions to reassess: -Babel!=2.4.0,>=2.3.4 +pbr>=5.2.0 @@ -4,15 +3,17 @@ Babel!=2.4.0,>=2.3.4 -pbr>=3.0.0 -Django>=1.11,<1.12 -decorator>=4.0.11 -djangorestframework>=3.6.2 -keystoneauth1>=2.19.0 -keystonemiddleware>=4.15.0 -python-cinderclient>=2.0.1 -python-neutronclient>=6.2.0 -python-novaclient>=8.0.0 -python-keystoneclient>=3.10.0 -six>=1.10.0 -jsonfield>=2.0.1 -django-rest-swagger>=2.1.2 -pyyaml>=3.12 -mysqlclient>=1.3.10 +Django>=2.2,<2.3 +Babel>=2.6.0 +decorator>=4.4.0 +django-rest-swagger>=2.2.0 +djangorestframework>=3.9.4 +jsonfield>=2.0.2 +keystoneauth1>=3.14.0 +keystonemiddleware>=6.0.0 +python-cinderclient>=4.1.0 +python-keystoneclient>=3.19.0 +python-neutronclient>=6.12.0 +python-novaclient>=14.0.0 +python-octaviaclient>=1.8.0 +PyYAML>=5.1 +six>=1.12.0 +confspirator>=0.1.6 +mysqlclient>=1.4.6 \ No newline at end of file diff --git a/test-requirements.txt b/test-requirements.txt index 52bbd44..258f549 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,4 +1,11 @@ -mock==1.2.0 -flake8>=3.0.4 -coverage>=4.4.1 -sphinx!=1.6.1,>=1.5.1 +# 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. + +flake8>=3.7.7 # MIT + +coverage>=4.5.3 # Apache-2.0 +doc8>=0.8.0 # Apache-2.0 +mock>=3.0.0 # BSD +Pygments>=2.2.0 # BSD license +flake8-bugbear>=19.3.0;python_version>='3.4' # MIT
participants (1)
-
no-reply@openstack.org