[release-announce] python-adjutant 0.5.0 (ussuri)

no-reply at openstack.org no-reply at openstack.org
Fri Feb 21 11:22:40 UTC 2020


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






More information about the Release-announce mailing list