summaryrefslogtreecommitdiff
path: root/tools
Commit message (Collapse)AuthorAgeFilesLines
* Merge "Fix invalid escape sequence warnings"Zuul2018-07-032-2/+3
|\
| * Fix invalid escape sequence warningsKrzysztof Opasiak2018-07-022-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Starting with Python 3.6, invalid escape sequences in string literals are now deprecated[1]. This influence also automatic style checkers like pycodestyle which starting with 2.4.0 complains about invalid escape sequences (W605)[2]. Let's fix all those warnings at once by using raw strings where possible and adding additional \ where not. Footnotes: 1 - https://docs.python.org/3/whatsnew/3.6.html#deprecated-python-behavior 2 - https://github.com/PyCQA/pycodestyle/pull/676 Change-Id: I009a366fd8342edfd30890df6fe8e1fca88bf3cc Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
* | change pylint wrapper to let messages be prefixesDoug Hellmann2018-06-131-6/+7
|/ | | | | | | | | | | The messages for many of the errors reported by pylint have been extended to include "suggestions" (especially in the case of undefined variables or members). Rather than update all of the individual messages in the configuration file, just treat the messages as prefixes. Change-Id: I1f11c50e39dbd43c4a9b54ccaaccf03f5ff07aca Signed-off-by: Doug Hellmann <doug@doughellmann.com>
* Use RootHistory to check if root is ever enabledZhao Chao2018-02-281-12/+0
| | | | | | | | | | | | | | | | | | | | | | | When disabling root, there is no need to call guestagent to check whether the root user is ever enabled. Root hisotry table should be used for this purpose. As datastore specific root controller of MySQL/Cassandra/PostgreSQL were created only for the '_find_root_user' which were calling guestagent to find root user, these controllers are removed and 'DefaultRootController' is used instead. RedisRootController is also updated as it didn't do this check previously. Unittests directory structure is also slightly changed. It's more clear to use similar directory hierarchies for testing and source code, e.g. trove/extensions/common/service.py trove/tests/unitests/extensions/common/test_service.py Change-Id: I9faac61d9650347b51f23e8fcaf5a92aed5fbf93 Signed-off-by: Zhao Chao <zhaochao1984@gmail.com>
* Generate policy sample file automatically.Zhao Chao2018-02-121-0/+3
| | | | | | | | | | | | | | A new entrypoint in setup.cfg and a config file are added for using olso.policy helper script to generate the sample file. A new tox target also is added to simplify the environment setting up. Now policy sample file can be generated automatically, so the in-repo sample file is no longer needed. Co-Authored-By: Andrew Laski <andrew@lascii.com> Partial-Implements: blueprint policy-in-code Change-Id: Ic336fa154ccc05b5e9db3a8e751a484b1cc5aa9c Signed-off-by: Zhao Chao <zhaochao1984@gmail.com>
* Merge "Fix to use "." to source script files"Zuul2017-11-031-1/+1
|\
| * Fix to use "." to source script filesmelissaml2017-08-291-1/+1
| | | | | | | | | | | | | | Adhering to coding conventions. Refer to ``Code conventions`` at https://docs.openstack.org/contributor-guide/ for details. Change-Id: If19a4335c23a98a5bb94db9595a277de6ea7f516
* | Move Pylint ignoreSamuel Matzek2017-10-131-0/+6
|/ | | | | | Moev Pylint ignore from code to config. Change-Id: I95ef8d7a320b633fbfd04f407a6143c8fa9c3f92
* Handle readfp deprecationjiansong2017-03-021-1/+7
| | | | | | | | | | | | | | | | In py3.4 notice method readfp will removed in the future,so use method readfile to replace it.This warning is only in py3 and above.Py2,configparse do not have.Actually in py3,This function is finally pointed to the readfile function warnings.warn( "This method will be removed in future versions. " "Use 'parser.read_file()' instead.", DeprecationWarning, stacklevel=2 ) self.read_file(fp, source=filename) Change-Id: I22a2dca71008469a8c8b7afcc0934f3b4adcdae4
* Fix module-instances commandPeter Stachowski2017-02-271-0/+144
| | | | | | | | | | | | | | | | Fixed the module-instances command to return a paginated list of instances. Also added a --count_only flag to the command to return a summary of the applied instances based on the MD5 of the module (this is most useful for live_update modules, to see which ones haven't been updated). Also cleaned up the code a bit, putting some methods into files where they made more sense (and would cause less potential collisions during import). Change-Id: I963e0f03875a1b93e2e1214bcb6580c507fa45fe Closes-Bug: #1554900
* Merge "Prepare for using standard python tests"7.0.0.0rc1Jenkins2017-02-051-0/+57
|\
| * Prepare for using standard python testsAndreas Jaeger2017-02-021-0/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add simple script to setup mysql and postgresql databases, this script can be run by users during testing and will be run by CI systems for specific setup before running unit tests. This allows to change in project-config the python-db jobs to python-jobs since python-jobs will call this script initially. Update CONTRIBUTING for this. See also http://lists.openstack.org/pipermail/openstack-dev/2016-November/107784.html Change-Id: I3463e75057d0d4544f6a0212da888759ab5e171b Needed-By: I92e6e6502c2c516babf2bf66f3514875f77c460e
* | Merge "Add configuration support for clusters"Jenkins2017-02-051-26/+14
|\ \
| * | Add configuration support for clustersPetr Malik2017-01-191-26/+14
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Implement configuration attach and detach API for clusters. Implement rolling strategy for applying configuration changes (both attach and detach follow the same pattern). 1. Persist the changes on all nodes (leaving nodes in RESTART_REQUIRED state). 2. Update Trove records. 3. Apply changes dynamically via one or all node(s) if possible (and remove RESTART_REQUIRED flag from all nodes). Notes: The single instance implementation has been restructured (similar to above) such that it always leaves the instance in one of the three states: a) Unchanged b) Changes persisted but not applied (Instance has configuration attached but requires restart. It is safe restart manually or detach the group to avoid any changes) c) Changes persisted and applied (if possible) This implemenation should always leave the cluster (and each instance) in a consistent state. Runtime configuration will not be changed until it is first persisted on all nodes. If there is a failure during step 1) the cluster is still running the old configuration. Some instances may have new configuration persisted, but not applied. The cluster will not have configuration attached unless it can be applied to all nodes. The individual nodes will have configuration attached as soon as it is persisted on the guest. It is safe to retry, reapplying the same configuration on a node is noop. It is safe to detach. Removing configuration from nodes without one is a noop. It is safe to detach the configuration from individual nodes via single-instance API. It is safe to attach the configuration to remaining nodes via single-instance API and rerun cluster attach to update Trove records. If 3) fails for whatewer reason the instances are left in RESTART_REQUIRED state. It is safe to retry or detach configuration or restart the instances manually. Also fixed various minor cluster issues. Implements: blueprint cluster-configuration-groups Change-Id: I7c0a22c6a0287128d0c37e100589c78173fd9c1a
* | insulate TroveContext from possible changes in oslo.contextAmrith Kumar2017-02-041-0/+12
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Earlier code introduced in[1] aimed to handle the situation where a context object serialized and sent over a message queue as a dictionary is received by a version of code that doesn't necessarily understand that context object. That code relied on the fact that vars(TroveContext).keys() was a dictionary that matched the full set of parameters that you can send to the initializers for TroveContext() and RequestContext(). Recent changes in oslo.context [2] and [3] broke that assumption. vars() on TroveContext provided a dictionary with the internal representation(s) that are not the same as the kwargs in RequestContext() and the params that TroveContext used to pop. To get around this, new code introduced here uses oslo_utils.reflection to determine all the possible kwargs that can be sent to TroveContext, some of which are consumed by TroveContext and the rest of which are sent along to RequestContext(). The construct in the earlier _remove_incompatible_context_args() also modified kwargs.keys() by pop'ing values from it while iterating over this. Python 3 takes a dim view of this and therefore some changes have been made to accomodate this. A unittest has been added to ensure that the from_dict() method properly dumps stuff it doesn't know about. The test explicitly verifies the warning generated when a bogus argument is eliminated. [1] 24c5e8e244380e3e7e309f0b4aaffde32dbf0789 [2] 2394cff0631944a9259bfe04925e444d9f817758 [3] f25543fcc792ebf155728a91fde06e8dc4e96cea Change-Id: I477dd29e034295e770925091c4ac6268c22ae59b Related-Bug:#1661790
* secure oslo_messaging.rpcAmrith Kumar2017-01-111-0/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is an interim commit of the changes for secure oslo-messaging.rpc. In this commit we introduce the code for serializers that will encrypt all traffic being sent on oslo_messaging.rpc. Each guest communicates with the control plane with traffic encrypted using a per-instance key. This includes both traffic from the taskmanager to the guest as well as the guest and the conductor. Per-instance keys are stored in the infrastructure database. These keys are further encrypted in the database. Tests that got annoyed have been placated. Upgrade related changes have been proposed. If an instance has no key, no encryption is performed. If the guest gets no key, it won't encrypt, just pass through. When an instance is upgraded, keys are added. The output of the trove show command (and the show API) have been augmented to show which instances are using secure RPC communication ** if the requestor is an administrator **. A simple caching mechanism for encryption keys has been proposed; this will avoid the frequent database access to get the encryption keys. For Ocata, to handle the upgrade case, None as an encryption_key is a valid one, and is therefore not cached. This is why we can't use something like lrucache. A brief writeup has been included in dev docs (dev/secure_oslo_messaging.rst) which shows how the feature can be used and would help the documentation team write up the documentation for this capability. Change-Id: Iad03f190c99039fd34cbfb0e6aade23de8654b28 DocImpact: see dev/secure_oslo_messaging.rst Blueprint: secure-oslo-messaging-messages Related: If0146f08b3c5ad49a277963fcc685f5192d92edb Related: I04cb76793cbb8b7e404841e9bb864fda93d06504
* Merge "Add support for module ordering on apply"Jenkins2017-01-061-1/+13
|\
| * Add support for module ordering on applyPeter Stachowski2016-12-261-1/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A method for specifying 'priority' modules plus a way to rank the order in which modules are applied has been added. Two new attributes 'priority_apply' and 'apply_order' are available in the payload on create and update. In addition, an is_admin flag was added as an automatic attribute, to be set when someone with admin credentials creates a module or updates an existing module with 'admin-only' options. This allows better control on the driver plugin side with regards to security concerns, etc. The attribute is now passed in to the guest 'apply' interface for use by the driver. All three of these attributes are stored in the Trove database. An admin can create a 'non-admin' module by passing in --full_access on the command line (or python interface). This will cause an error if any admin-only options are selected. Scenario tests have been added to verify that the modules are applied in the correct order. The timestamp for the 'updated' field on the guest was also enhanced to allow for fractional seconds, since most applies take less than a second. The issue where modules were allowed to be applied even if they belonged to a different datastore has been fixed and scenario tests added to check for this case. Change-Id: I7fcd0cf12790564ba62e7d6451fff96f763e539d Implements: blueprint module-management-ordering
* | trove pylint cleanup(s)Amrith Kumar2016-12-181-3/+10
|/ | | | | | | | | | | | | | | | | | | | | This commit includes two cleanups in trove-pylint. First, the deprecation warning is because the text.ParseableOutputFormat is being deprecated[1] and produces a deprecation warning as shown in the bug. Second, while looking into 1650816, I stumbled upon 1650888 which is also fixed. A block of code was wrongly indented and when I disabled "-E" to generate warnings, produced a crash in pylint. If the line generated doesn't match the regular expression, the various parameters to the next call (to ignore()) are not set and you get unbound variable errors. [1] https://github.com/PyCQA/pylint/blob/master/pylint/reporters/text.py#L163 Change-Id: I43bd6569a98eeb1b326e4a0ca1addaf97c0830a5 Closes-Bug: #1650530 Closes-But: #1650888
* Merge "when pylint has an error loading the config, it should fail"Jenkins2016-11-301-10/+2
|\
| * when pylint has an error loading the config, it should failAmrith Kumar2016-11-141-10/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | When someone has a pylint config file that has an error such as when a merge goes bad, loading the file fails, and pylint motors along happily with the default file (i.e. nothing ignored) and this is confusing. Unless you happen to catch the little error that it prints out. Instead, just bomb out with an error. Change-Id: Ie94dda35652f2a8f06502af72b68be73d61fc94a Closes-Bug: 1639040
* | Multi-Region SupportMorgan Jones2016-11-041-0/+24
|/ | | | | | | | | | This is an initial attempt at supporting multiple regions. It should handle the mechanics of deploying an instance/volume to a remote region. Additional changes may be required to allow the guest agent on the instance to connect back to the originating region. Co-Authored-By: Petr Malik <pmalik@tesora.com> Change-Id: I780de59dae5f90955139ab8393cf7d59ff3a21f6
* Merge "Remove downgrade"Jenkins2016-11-011-181/+1
|\
| * Remove downgradeTrevor McCasland2016-10-061-181/+1
| | | | | | | | | | | | | | | | | | | | | | | | Removed downgrade from all existing migrations. Modified a test that verifies that no migrations have a downgrade. Modified test _walk_versions to only do upgrades. Removed exceptions from pylint.config Related cross-project spec: https://review.openstack.org/152337 Closes-Bug: #1434103 Change-Id: I9a7c87ae3f4e2eff3a4a6df881d086d52062dbba
* | Merge Postgresql service modulesPetr Malik2016-09-281-120/+0
|/ | | | | | | | | | | | | | | | Postgresql has been implemented differently from all other guest agents. This has been causing difficulties with maintenance and future development of Trove design. It has been decided (Newton midcycle) to bring the guest agent in line with others. This patch set merges all Postgres service modules into App/Admin classes. This also resolves 20 pylint issues related to mixin usage. Change-Id: I1b12a5296c59e9d3b08bcf34ac196d16189d525e
* improve pylint; generate errors and config in sorted orderAmrith Kumar2016-09-193-1687/+969
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since the config is not in a deterministic order makes it hard to compare two config's and see what changed. Personally, I'm not positive I understand this use-case; i.e. you have an existing config file, you save it, and then rebuild and then diff the two files. I'd have thought you'd just run check and the output of the tool was the diff. I however do see the value in sorting the file so that when someone submits a change that includes a change to the config, reviewers can see more easily what the change is doing. Similarly, the output from pylint (errors) are generated one file at a time and os.walk makes no guarantee of deterministic order. So we should collect all errors (across all files) and then print an ordered list for human consumption. The intent is also to make pylint voting soon (in master). the changes to contributing.rst and tox.ini are to make that easier. The config file has also been sorted in place. This change was motivated by an email exchange with Peter so I am marking him as a co-conspirator. The line numbers were removed from the tools/trove-pylint.config file as these would change whenever the line numbers in the file changed (since they are currently not being used in the comparison; they can be re-added if deemed necessary at the cost of having every 'rebuild' run create a different file). The tools/trove-pylint.config was regenerated as well, since the remaining two errors seem to be innocuous: ERROR: trove/taskmanager/manager.py 392: E1101 no-member, Manager.upgrade: Instance of 'BuiltInstance' has no 'upgrade' member (new method introduced by instance upgrade; other BuiltInstance member errors are already ignored.) and ERROR: trove/guestagent/datastore/experimental/postgresql/service/ access.py 80: E1101 no-member, PgSqlAccess.list_access: Instance ofi 'PgSqlAccess' has no '_find_user' member (this is due to the fact that PostgreSQL is spread over multiple files and pylint should cease to complain once https://review.openstack.org/#/c/346082/ lands.) Change-Id: I910c738d3845b7749e57910f76523150ec5a5bff Closes-Bug: #1625158 Closes-Bug: #1625245 Co-Authored-By: Peter Stachowski <peter@tesora.com>
* initial chkin of pylintAmrith Kumar2016-09-143-0/+3010
| | | | | | | | | | | | | | | | | this is a pylint wrapper for Trove's tox tests. This commit includes a basic infrastructure for running pylint through tox. It also fixes some very obvious import errors that are flagged by the tool. One is to handle missing imports for _ and _LE. There is one instance where an exception is being raised but trove.common.exception isn't imported, and another where an exception is being incorrectly thrown. A short readme is also provided. Change-Id: I0a38f5efde3cb491f1f6c27f6c6500ab29987968 Partial-Bug: #1621636
* Replace OpenStack LLC with OpenStack Foundationdineshbhor2016-07-221-1/+1
| | | | | Change-Id: I7b738715873eff90a49357dec5be4e179c04713c Closes-Bug: #1214176
* Replace print statment with print functionbhagyashris2016-06-221-11/+13
| | | | | | | | | | | | | | | | | | | | | In PY3, print should used as a function instead of a statement. This is PY27 compatible as well. For example, instances of the first case were replaced by the second case: >>> print 'help' File "<stdin>", line 1 print 'help' ^ SyntaxError: Missing parentheses in call to 'print' >>> print('help') help Partially implements: blueprint trove-python3 Change-Id: I21de65bc874d0fcfb51714857f8eaa97acb2f51d Closes-bug: #1594741
* Remove Python 2.6 classifierJulien Danjou2014-12-022-5/+5
| | | | | | | Trove does not support Python 2.6 anymore starting with Kilo and might not work correctly with it, so remove the classifier. Change-Id: Ida17ce3ce76258442222b591846e1e1717119eed
* rename and fix the db_wipe commandIonuț Arțăriși2014-03-101-1/+1
| | | | | | | | | | * rename db_wipe to db_recreate * make --repo-path an optional argument for db_wipe and use it * add command line help strings for db_wipe Closes-Bug: #1279734 Change-Id: I1a1d3ad56989026fb10f6c57bb479814dc51328e
* Remove extraneous vim configuration commentsHe Yongli2014-02-271-2/+0
| | | | | | | | | | | Remove vim setting, Remove line containing: comment - # vim: tabstop=4 shiftwidth=4 softtabstop=4 at the top of source code files, except for files in openstack/common. Change-Id: I5e2aad6dca8407890fc3c2afbda541bd4f124ea8 Closes-Bug: #1229324
* Migrating trove to entry pointsMichael Basnight2014-02-012-0/+34
| | | | | | | | | | PBR/Distribute generates binscripts for us. By moving the binscript code into the source tree, we can unit test it as well. Run setup.py develop to generate the binscripts for development use. implements blueprint entrypoints-for-binscripts Change-Id: I9ad4bb4ddc55f64bcd806c588a795cd6e0847aa9
* Enclose command args in with_venv.shZhenguo Niu2013-09-091-1/+1
| | | | | | | It will support argument with blanks. Change-Id: I83313290a964bf10fe46570f43cf213ceab8a326 Fixes: bug #1220937
* Rename from reddwarf to trove.Michael Basnight2013-06-241-7/+7
| | | | | | Implements Blueprint reddwarf-trove-rename Change-Id: Ia9ee609bbc06a1d8b9d6917642529f30347541fd
* Updated to use normal requirements names.Monty Taylor2013-06-033-46/+2
| | | | Change-Id: I20545a3250c7db826b5c9133b8a94e3a8b2a3dbf
* Migrate to pbr.Monty Taylor2013-06-032-1/+3
| | | | | | Fixes bug 1179007 Change-Id: If7c187f3b4833bdd7f2c0632c061afdcacb9832f
* Migrate to flake8.Monty Taylor2013-05-161-2/+6
| | | | | | Fixes bug 1172444 Change-Id: I09e1e2d03f41a175aa39760b5fc560ed0d9d30a5
* Controller and API changes for backups.justin-hopper2013-05-091-0/+1
| | | | | | | | | | | | | | | | | | | | | | -API controller for backups -adding swift url to the config -Fixing failing tests -Renaming 'instance' param. Checking for NotFound models so that the returned error is friendly -adding feature to list all backups from a specific instance -Adding checks for creating/deleting/restoring backups when it is not completed -Adding unit tests for backup controller -adding check to see if file is in swift -Adding skeleton code for delete backup in the task manager -Fixed backups API to pass in the backup_id during create_backup. -adding int tests for backup controller -Adding backup list and delete int tests -Adding list backups for instance test -Adding quota for create backup BP: https://blueprints.launchpad.net/reddwarf/+spec/consistent-snapshots Change-Id: I35c2fefcce4b3009e76ba7232c52dabf502a3ac0
* Refreshed Oslo Codejustin-hopper2013-05-081-0/+1
| | | | | | | | | Change to auth_tok to auth_token Added dependency on oslo.config package Remove reddwarf.openstack.common.cfg Change-Id: I61af7a54d09f3d1d6b6efe470ea6308be8ace2e7 Fixes: bug #1175757
* Pinning proboscis to a specific version.Tim Simpson2013-03-081-1/+1
| | | | | fixes bug #1152370 Change-Id: I9ef270a8c50fd9e3aedbfaf1545c31af2c051769
* Update test-requires to point to rd cli tarballdaniel-a-nguyen2013-03-081-1/+1
| | | | | | | Sync up the client code to server code for absolute/rate limits Implements: blueprint rate-limits Change-Id: I2d465216fa8432674e268eb3a18b5f4cbde2692c
* Add python-keystoneclient to deployment dependency for reddwarfruiyuan-shen2013-03-061-0/+1
| | | | | | Bug #1150904 Change-Id: Ife20228c771dcaad201dc871ed3e2079d7fd6de1
* Merge "Use tarball for python-reddwarfclient dependency"Jenkins2013-03-061-1/+1
|\
| * Use tarball for python-reddwarfclient dependencyVipul Sabhaya2013-03-041-1/+1
| | | | | | | | | | | | | | | | | | | | * Openstack-ci creates a tarball at tarballs.o.o when tag matches: ref: ^refs/tags/([0-9]+\.)+[0-9]* (alpha|beta|candidate|rc|a|b|c|r|g)[0-9]*$ Fixes bug#1131509 Change-Id: I5e3d00c57dfe977f6e9a01dea25b97c8fcdf0d1d
* | Rate limits implementationdaniel-a-nguyen2013-03-051-0/+1
|/ | | | | | | | | | | | | added unittest for limits reverted changes to openstack/common removed commented code cleaned up unittest added int-tests updated reference to XMLNS removed 1.1 XMLMS in wsgi Implements: blueprint rate-limits Change-Id: I842de3a6cae1859cc246264a5836abfd97fb8074
* Modify-user features.Ed Cranford2013-02-191-1/+1
| | | | | | | | | Grant, revoke, list user access. Change user password and get single user. Partially implements blueprint modify-users Change-Id: I0001a7a9d1c527b88a1ed965f0f077c864e602cf
* Checks guest status during migration.Ed Cranford2013-01-171-0/+1
| | | | | | | | | | During a migration, waits for the guest and service to start up following the status change to VERIFY_RESIZE. Confirms if everything is all right, or reverts if not. Implements blueprint migration-check-guest-status Change-Id: Ia7c7ed1fd0070429fed93323ca559d1c0742bd8f
* Adding guest agent pkg unit tests and running them with testrSteve Leon2013-01-111-3/+4
| | | | | | | | | | | | Added unit tests for reddwarf.guestagent.pkg module. Added tests for package install, remove and version Changing the test runner of unittests to be run by testr instead of probocis/nose Remove probocis reference from the dbaas test Moved dbaas.py to reddwarf/tests/unittests tracked by bug #1090139 Change-Id: Ia25fbe996d04d39e83edef0369de0e7fccce579e
* Update oslo codebase within reddwarf.Michael Basnight2012-12-181-0/+1
| | | | | | | | | | | | | | | | | | | * Updated logging,cfg,setup to new oslo * Split out the paste ini from the conf files * Modified reddwarf-api/server to use new modules * Modified reddwarf-manage to use new cfg * Added rpc helper for rpc services * Modified reddwarf-taskmanager to use rpc helper * Modified reddwarf-guestagent to use new rpc helper * Fixed guestagent api to use rpc proxy * Fixed taskmanager module to conform to new rpc * Updated guestagent manager/pkg to use new rpc * Updated api paste to use keystoneclient auth_token * Updated managers to use periodic tasks Implements: blueprint reddwarf/upgrade-oslo Change-Id: I9ad1b441eca855a4304454014ae746ec51bef8f3