We are ecstatic to announce the release of: zun 2.0.0: OpenStack Containers service This release is part of the rocky release series. The source is available from: https://git.openstack.org/cgit/openstack/zun Download the package from: https://tarballs.openstack.org/zun/ Please report issues through launchpad: https://bugs.launchpad.net/zun For more details, please see below. 2.0.0 ^^^^^ New Features * Migrate all upstream gates to Zuulv3 native format. Changes in zun 1.0.0..2.0.0 --------------------------- f9decab Enable mutable config in zun 8954048 Handle the case that image has no tag ffcea6d Delete image residual data ba522ed Document filter parameters in API reference c0ad682 Verify docker API version if runtime is specified 542d6cb Add a note to uninstall pip packages on unstack b7bbf97 Clone Zun repository by TARGET_BRANCH a736f6e Cleanup the config file on ./clean.sh c2a3638 Remove help message about ZeroMQ driver da65b56 Fix an issue on deleteing container 227b47d Synchronize on network attach/detach d0dc1e4 Pin get-pip.py to 3.2 1526cfd Backward-compatible with old restart_policy aafdd20 capsule: convert 'command' from string to list 3fa2acb Format each container inside capsule e367cb1 Fix some incorrect unit test case cc0f662 Fall back to the legacy auth_uri option 58f7b93 Switch keystone session in glanceclient 0d36f68 Remove unused auth_url from RequestContext b03fbe6 Convert type of 'command' from string to list 725d4c1 Add native Zuulv3 jobs 64745c1 Remove the unused url for container exec fda6fa4 Introduce container resize API 864ec75 Add create_network method in etcd db. 9d05d7f Putting context as the first parameter 97e5647 Update the format of requested_networks c17a75d Fix some issues in API microversion doc 53c7f6b Introduce 'fixed_ips' to network_list acdd773 Simple docker driver image not found ed9e3ee Support websocket proxy for exec 4807590 Add exec_instances to data model 4db4adf Remove the 'id' attribute from capsule b5c5a66 Use HostAddressOpt for opts that accept IP and hostnames cfe968c Add back the attach_external_network policy c31ade7 Support detach neutron port from container a539e32 Collect docker log in gate_hook 907ad4a Fix mismatched of timezone info 93fd8aa Amend the spelling error of a word b3a02e3 fix tox python3 overrides 1e8503e Modify restart_policy to spec content 04e1a2b Add quota_destroy_all_by_project 2c79edd Add quota_usage_get_by_project 00c7a9b Add two missing fields to network api 3d2cffc Remove name duplication check in network e571122 Support network_attach with more parameters 188ecf5 Pass requested_network on network_attach 0e6bb19 Add 'host' parameter on image delete 06dacdb Add 'host' parameter on image create 5c94cea Document how to manage security groups f34bba6 Change create_network from async to sync 275d4a8 Raise the right exception if network exists be015e1 Use policy for control the 'runtime' field a78ce2f Allow to check pep8 along with D000 001f38e Improve validation of 'nets' parameter fe499a3 Move parameter types module to schemas 2d3c304 Filter disabled service for Chance Filter a518618 Show container failed if container host is none 5a43580 Add network-create to server side cddd39f Add Quota & Quota class policies e3e1a45 Require admin privilege for image APIs 89ccde5 Tune the default cpu/memory/disk ccfc7c2 Use policy for control the 'host' field b88addc Change neutron module use same call neutron client 9b91167 Fix list and show return status different b497901 Fix multinode-devstack document service list output error 318a788 Add Dockerfile 308587c Record container events on rebuild 028ae2c Add back the test_container_reboot test fd33416 Change the DB create procedure of capsule create b5b58cf Add container start_at in compute node e6eb304 Modify the rule of filtering glance tag a351981 Update install doc for ubuntu 216cf51 Follow the new PTI for document build b4c866b Remove APIs for managing security groups fcbb413 Move delete_image to container driver c1dd9b2 Remove the duplicated index in quota_classes c637a44 Add started_at attribute to container 9110c84 Introduce /availability-zone API endpoint 29b85e4 api-ref: add parameters for host APIs f19d328 api-ref: fix the wrong required/optional marker 3b84935 Use six.test_type instead str format 334b1fd Get driver from CONF when pull image caacd05 Use versioned object instead of db_api fabbaa9 Add host to return value for capsule bbe2f3d Add containers dict to capsule 5a506ee Add Quota DB etcd 0cd9cb4 Pre-load the list of image drivers b2553e0 Trivial: Update pypi url to new url 9e3b97f Handle exception when rebuild container without port ce66393 Validate filters when listing containers c18ccba Add doc for live restore to keep container alive b4897d0 Configure kuryr not creating SGs fae8abb Move config 'base_url' to controller node 142f49f Remove netaddr from requirements 099df4a Remove os-vif from requirements fb3af49 Remove unused nova related code 2eeb4ff Remove the unreal config file from setup.cfg fa8ccc7 Fix unit test failure with pecan 1.3 56b0b08 Change the format of memory field b803274 Remove the usage of WSME library 1634088 Remove unused jsonpatch code 4eef6cc Add the missing API version history c237396 Fix verify document service list output error 931b89c Add '-E' for grep 3505510 Fix doc capsule.rst title typo error aa3203b Improve the testing of 'kuryr_network' module 8d7c9fb uncap eventlet cae313d Add Quota objects a56a82e Update auth_uri option to www_authenticate_uri 8231c26 Optimize-code: optimize the method of checking version 697412b Add Quota SQL database models & api 646d254 Getting the workdir of docker by CONF 7b2b6ac Modify the comma to '%' in ZunException message f76ec29 Remove code that is not actually used 0644351 Delete sandbox on capsule delete d99fadd Unify the format of list response 89f422a Remove self in check_supported_disk_quota 7245988 Update the API reference for the update container a077736 Setting default value for etcd 98c1d4a Modify the message of LOG 501610a Customizing the availability zone of each compute node is Ineffective 7fbaece Skip validating the subnetpool if it is none feebb5d Remove a redundant call of 'save' e562246 zun do not support multipath e5a9190 Add a note about configuration of ws url 4d9f7b9 Move /rename endpoint into patch 77a9b57 install-guide: add note on etcd installation c1ac26a api-ref: add missing parameters on container create 3f2066e api-ref: update the sample request/ressponse 00b3f06 Disk quota checking missed 'prjquota' 22ce1db Check disk quota support on filter scheduler 6becbd9 Add disk_quota_supported to compute_node efe1e69 Print a warning if disk quota is not unsupported 6de85a9 Move create_image and upload_image_data d8e9b3d Add auto_heal to api-ref d3050f8 Fix typo on rest_api_version_history.rst ff90044 Modify the content of rebuild in the api-ref doc 9f9ea6e Heal non existent containers in docker 42059ad Make DiskFilter work with capsule d047616 Make capsule support availability zone 6b7f164 Catch a specific exception on scheduling b7cbaeb Add 'status_reason' to capsule view cb41f01 rebuild a container with a different image 3029a5b Optimize the loading of the volume driver 8717447 Skip state population on transitional states d969355 Add status_reason and logs on unknown state 94a7901 Move search_image to container driver 96dc2b3 Move pull_image to container driver f42267e The incoming parameters is not effective 8b73eee Modifying the parameters eed0071 Allow force delete a rebuilding container a22beb9 Introduce container status 'Restarting' 38f19a2 Introduce container status 'Dead' 3d15014 Migrate to stestr 9883455 Revert "Consolidate admin guide and configuration guide" 3b91699 Don't raise when delete non-existent image in docker 6e132ba Move openstackdocstheme to extensions in api-ref f7e2c2d install-guide: add steps to configure rootwrap dc5cfca Remove invalid comment about glance 2d0ffe9 Add policy check for image_delete ed3cf98 Make auto_heal field nullable 3c564d2 Document how to run specific tempest test bd4d489 Reorganize the documentation index page a869abf Consolidate admin guide and configuration guide 42a6951 install-guide: add the missing step for python-pip 9cc3e60 make glance driver support tag 'latest' 66741c5 add lower-constraints job 37ef053 Updated from global requirements 5d123ef Add rebuild container to api-ref doc 5be9ba0 admin cannot operate ordinary tenant's container d5853dd make glance driver support image:tag 4605f23 Check image ambiguity on validation 086c04b Add a step to configure state_path be92134 Adds image delete to server side 8118849 Add essential comments for API image search 79af7c5 Pull/Search image from default driver 6a2d628 Introduce a config for default image driver 69d9ba2 Move parse_image_name to compute manager 0700e9b Modify part of the code for the rebuilding process a3f78f4 Add disk filter b2ac221 update param docstring 63a9f46 Change default_disk value 532f658 correct the response code of listing networks 956461e Check if server support disk quota aad75c5 Add auto_heal to container cbb7b1a Delete container failed if container host is None 5eeea22 api-ref: fix the type of restart_policy eadfd65 zun rebuild on local node cb27a35 Updated from global requirements 390f99e Add disk info to 'Host' API 70cae3b Remove unused methods set_ctx and get_ctx 3097c51 Updated from global requirements d412de7 Introduce rootwrap and filter 7468a31 Add disk attribute to ComputeNode Etcd model 6d92b33 Updated from global requirements 5d3d223 Remove the empty 'service' folder ad4bae5 Modify the load order of manage.py db11839 Get disk info from compute_node 4ceef7f Enable mutable config in ZUN 36e57dd Update DEFAULT_DOCKER_API_VERSION to 1.21 76736f6 Modify the test of 'test_delete_success' fd9a163 Fix an issue of command population 127f305 Re-enable py35 tempest job 3d79e82 Deal with generator from Docker 31ef21f Updated from global requirements 369e5e2 Shorten the data of task_state field 162d78a restart_policy can not be None bada597 Add unit tests for rpcapi 75fbcdb The way to get neutron_port['security_groups'] is wrong 6124632 Can't delete error container that non-existent in docker 90fd617 Add parameters type of capsule_template 48d5f42 Modify the error message of capsule failed 86d2452 Remove unsupported parameter from api-ref 8949583 Fix Docker-py 3.1.0 return generator db52834 Fix the version attribute in network_list f762bc5 Add availability_zone to api-ref 592b7dd Add disk info to compute node 84ca4d8 Revert "remove repeated _set_container_host when container_claim" 07dd607 Add container action api fa1eed9 Improve the validation of 'nets' parameter 8d9dad6 Adds network-list api to server side. 8b527f1 Reraise exception on creating container 0304d1b Catch specific exception on claim 298b962 Avoid calling _fail_container in some cases 531aaf4 Updated from global requirements 14c426d Refactor check md5sum for image a8be788 Configurable default for container's cpu/memory/disk f19ebea RepoTag is null in manifest.json 979f1a3 Configurable min/max limit for container's cpu/memory/disk 7d29881 Remove types module 0abcb5e image_pull_policy does not work in glance driver 26fad63 Add the missing task states 0a06d7b Re-locate teh validation folders 07002be Define and assign capsule status 3fe4cf7 Set consts NAME_PREFIX & SANDBOX_NAME_PREFIX 3af731c Add debug message for each recovery operation f3889db Refactor container recovery logic dfdc8e1 Remove unnecessary check on container init 87a3370 Add status_reason on setting container to error c16afb3 Remove unnecessary try catch block cff9c4b Add additional task state to init 88261ed Get local containers list from driver 603236b Add unit test for filter with list 4315174 Failed to update memory for container 902c45a Fix the incorrect reference links 00916cf Expose container filters via API a81db2e add unit tests for zun/compute/api.py 0e741d0 Move the Capsule API from Experimental to V1 e603fe6 Modify the judgement condition 2ffb293 Create a generic add_filters method 403b4cd Pause container before doing commit 31076dc Support running containers in specified AZ df66e4c Add availability_zone to service 80bdbb1 Consolidate periodic tasks e855176 Remove unused method list_instances 3a94c26 Rename variable 'db_containers' 254c568 Remove unused method from compute manager 53f3e33 Consolidate container api test cases (part2) c4b75ac Consolidate container api test cases 315cf1c Updated from global requirements d6b0a00 security_groups can not be None 431aae2 Add the record container action to capsule_create 0db44ef Modify the template yaml for capsule bbe3c3d remove repeated _set_container_host when container_claim 95570f3 Fix osprofiler.rst format error 9fe6337 Add test case for attaching to attached network 57bc461 exception-handling-error-in-network-attach ee17976 some implementent should not written in abstractmethod select_destinations when schedule d196109 Fix wrong grammar 3643413 Add subnet to addresses field 2e4b3d3 Remove the redundant word f4f84de Correct the response code of attach f1c156d Remove redundant variable definition 0f49cb9 Fix typo a99bfe7 Claim resources when updating cpu/memory 9c095cc Handle exception on searching for images b62202e fix typo mistake 9cf4391 Rename deprecated context parameter f873fb1 api-ref: remove query parameters from URL 1654059 Fix an issue on populating the pause state 1d83c3a Add more assertions on event start/finish 4be9eb8 Consolidate handling of DockerError 4701cbf fix misspelling of 'openstack' eae27b4 Update reno for stable/queens 4939dc2 Replace chinese double quotes to English double quotes be13347 Consolidate exception handling in manager 2047186 Cleanup the reraise parameter in manager d13d1c1 Remove unused variable Diffstat (except docs and test files) ------------------------------------- .gitignore | 2 + .stestr.conf | 3 + .testr.conf | 7 - .zuul.yaml | 86 +- api-ref/source/conf.py | 11 +- api-ref/source/containers.inc | 282 +++++- api-ref/source/hosts.inc | 30 +- api-ref/source/parameters.yaml | 494 +++++++++- .../source/samples/container-action-get-resp.json | 18 + .../samples/container-actions-list-resp.json | 22 + api-ref/source/samples/container-create-req.json | 27 +- api-ref/source/samples/container-create-resp.json | 69 +- api-ref/source/samples/container-get-all-resp.json | 10 + .../samples/container-network-list-resp.json | 13 + api-ref/source/samples/container-show-resp.json | 67 +- api-ref/source/samples/container-update-req.json | 3 +- api-ref/source/samples/container-update-resp.json | 64 +- api-ref/source/samples/host-get-all-resp.json | 40 +- api-ref/source/samples/host-get-resp.json | 8 +- api-ref/source/samples/service-get-resp.json | 27 +- api-ref/source/services.inc | 1 + contrib/nova-docker/nova/virt/zun/client.py | 2 +- contrib/quick-start/Dockerfile | 30 + contrib/quick-start/README.md | 19 + devstack/lib/zun | 18 +- devstack/local.conf.sample | 1 + devstack/local.conf.subnode.sample | 1 + etc/zun/rootwrap.conf | 27 + etc/zun/rootwrap.d/zun.filters | 8 + lower-constraints.txt | 162 ++++ playbooks/zun-devstack-base-multinode/post.yaml | 15 - playbooks/zun-devstack-base-multinode/run.yaml | 81 -- playbooks/zun-devstack-base/post.yaml | 15 - playbooks/zun-devstack-base/run.yaml | 89 -- playbooks/zun-tempest-base/post.yaml | 13 + .../zuul-v3-native-gates-a46ef4c168f9362e.yaml | 5 + releasenotes/source/index.rst | 1 + releasenotes/source/queens.rst | 6 + requirements.txt | 16 +- setup.cfg | 11 +- specs/container-snapshot.rst | 4 +- specs/kuryr-integration.rst | 6 +- specs/local-volume-integration.rst | 30 +- specs/pci-device-model.rst | 2 +- specs/zun-api-validation.rst | 4 +- template/capsule/capsule-volume.yaml | 3 +- template/capsule/capsule.yaml | 3 +- test-requirements.txt | 7 +- tools/flake8wrap.sh | 4 +- tools/pretty_tox.sh | 16 - tox.ini | 43 +- zun/api/controllers/base.py | 2 +- zun/api/controllers/experimental/__init__.py | 153 ---- zun/api/controllers/experimental/capsules.py | 404 --------- zun/api/controllers/experimental/collection.py | 43 - .../controllers/experimental/schemas/__init__.py | 0 .../controllers/experimental/schemas/capsules.py | 26 - zun/api/controllers/experimental/views/__init__.py | 0 .../experimental/views/capsules_view.py | 56 -- zun/api/controllers/root.py | 4 +- zun/api/controllers/types.py | 328 ------- zun/api/controllers/v1/__init__.py | 32 +- zun/api/controllers/v1/availability_zone.py | 99 ++ zun/api/controllers/v1/capsules.py | 407 +++++++++ zun/api/controllers/v1/containers.py | 414 +++++++-- zun/api/controllers/v1/images.py | 30 +- zun/api/controllers/v1/networks.py | 71 ++ zun/api/controllers/v1/schemas/capsules.py | 26 + zun/api/controllers/v1/schemas/containers.py | 69 +- zun/api/controllers/v1/schemas/images.py | 16 +- zun/api/controllers/v1/schemas/network.py | 25 + zun/api/controllers/v1/schemas/parameter_types.py | 520 +++++++++++ zun/api/controllers/v1/schemas/services.py | 2 +- .../controllers/v1/views/availability_zone_view.py | 41 + zun/api/controllers/v1/views/capsules_view.py | 66 ++ zun/api/controllers/v1/views/containers_view.py | 23 +- zun/api/controllers/v1/views/hosts_view.py | 3 + zun/api/controllers/v1/views/network_view.py | 36 + zun/api/controllers/v1/zun_services.py | 14 +- zun/api/controllers/versions.py | 10 +- zun/api/hooks.py | 3 - zun/api/middleware/__init__.py | 4 +- zun/api/rest_api_version_history.rst | 65 ++ zun/api/servicegroup.py | 2 +- zun/api/utils.py | 59 +- zun/api/validation/__init__.py | 57 ++ zun/api/validation/validators.py | 80 ++ zun/cmd/compute.py | 8 +- zun/common/clients.py | 37 +- zun/common/consts.py | 32 +- zun/common/context.py | 43 +- zun/common/exception.py | 40 +- zun/common/keystone.py | 4 +- zun/common/mount.py | 1 - zun/common/nova.py | 255 ------ zun/common/policies/__init__.py | 10 +- zun/common/policies/availability_zone.py | 39 + zun/common/policies/container.py | 56 ++ zun/common/policies/container_action.py | 53 ++ zun/common/policies/image.py | 17 +- zun/common/policies/network.py | 11 + zun/common/policies/quota.py | 68 ++ zun/common/policies/quota_class.py | 46 + zun/common/policy.py | 16 +- zun/common/rpc_service.py | 5 +- zun/common/service.py | 2 +- zun/common/utils.py | 97 +- zun/common/validation/__init__.py | 57 -- zun/common/validation/parameter_types.py | 438 --------- zun/common/validation/validators.py | 77 -- zun/compute/api.py | 99 +- zun/compute/claims.py | 71 +- zun/compute/compute_node_tracker.py | 73 +- zun/compute/container_actions.py | 1 + zun/compute/manager.py | 672 ++++++++------ zun/compute/rpcapi.py | 31 +- zun/conf/__init__.py | 6 +- zun/conf/availability_zone.py | 50 ++ zun/conf/compute.py | 4 + zun/conf/container_driver.py | 49 +- zun/conf/docker.py | 3 + zun/conf/image_driver.py | 6 +- zun/conf/keystone.py | 2 - zun/conf/netconf.py | 11 +- zun/conf/nova_client.py | 51 -- zun/conf/scheduler.py | 4 +- zun/conf/utils.py | 31 + zun/container/docker/driver.py | 373 ++++++-- zun/container/docker/host.py | 45 + zun/container/docker/utils.py | 28 +- zun/container/driver.py | 40 +- zun/db/api.py | 223 ++++- zun/db/etcd/api.py | 210 +++++ zun/db/etcd/models.py | 97 ++ .../versions/012a730926e8_add_quota_usage.py | 44 + ...eab_add_disk_quota_supported_to_compute_node.py | 35 + .../26896d5f9053_create_exec_instance_table.py | 46 + .../271c7f45982d_add_started_at_to_container.py | 34 + ...2b045cb595db_create_quota_quota_class_tables.py | 59 ++ .../versions/3298c6a5c3d9_create_network_table.py | 49 + .../372433c0afd2_add_auto_heal_to_container.py | 38 + ...8da7_convert_type_of_command_from_string_to_.py | 55 ++ ...f49fa520409_add_availability_zone_to_service.py | 34 + .../cff60402dd86_add_capsule_id_to_containers.py | 34 + .../d0c606fdec3c_add_disk_info_to_compute_node.py | 36 + zun/db/sqlalchemy/api.py | 326 +++++-- zun/db/sqlalchemy/models.py | 112 ++- zun/hacking/checks.py | 2 +- zun/image/docker/driver.py | 18 +- zun/image/driver.py | 101 +-- zun/image/glance/driver.py | 84 +- zun/image/glance/utils.py | 9 +- zun/network/kuryr_network.py | 14 +- zun/network/neutron.py | 4 +- zun/objects/__init__.py | 44 +- zun/objects/base.py | 12 +- zun/objects/capsule.py | 55 +- zun/objects/compute_node.py | 7 +- zun/objects/container.py | 43 +- zun/objects/container_action.py | 8 +- zun/objects/exec_instance.py | 61 ++ zun/objects/fields.py | 12 + zun/objects/image.py | 8 +- zun/objects/network.py | 94 ++ zun/objects/quota.py | 126 +++ zun/objects/quota_class.py | 105 +++ zun/objects/zun_service.py | 7 +- zun/scheduler/driver.py | 5 +- zun/scheduler/filters/availability_zone_filter.py | 47 + zun/scheduler/filters/compute_filter.py | 4 +- zun/scheduler/filters/disk_filter.py | 49 + zun/scheduler/filters/ram_filter.py | 2 +- zun/scheduler/host_state.py | 14 + zun/service/__init__.py | 0 zun/service/periodic.py | 69 -- zun/servicegroup/zun_service_periodic.py | 6 +- .../api/controllers/auth-experimental-access.ini | 19 - .../unit/api/controllers/experimental/__init__.py | 0 .../api/controllers/experimental/test_capsules.py | 593 ------------ .../api/controllers/v1/test_availability_zones.py | 58 ++ .../unit/api/controllers/v1/test_containers.py | 997 ++++++++++++++------- .../unit/api/controllers/v1/test_zun_service.py | 22 +- .../unit/container/docker/test_docker_driver.py | 417 ++++++++- .../filters/test_availability_zone_filter.py | 72 ++ .../unit/scheduler/filters/test_disk_filter.py | 69 ++ .../unit/scheduler/filters/test_ram_filter.py | 4 +- zun/volume/cinder_workflow.py | 11 +- zun/volume/driver.py | 52 +- zun/websocket/websocketproxy.py | 87 +- 246 files changed, 12332 insertions(+), 5777 deletions(-) Requirements updates -------------------- diff --git a/requirements.txt b/requirements.txt index 280a4c3..d2b945d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,2 +5,2 @@ -PyYAML>=3.10 # MIT -eventlet!=0.18.3,!=0.20.1,<0.21.0,>=0.18.2 # MIT +PyYAML>=3.12 # MIT +eventlet!=0.18.3,!=0.20.1,>=0.18.2 # MIT @@ -8,2 +7,0 @@ keystonemiddleware>=4.17.0 # Apache-2.0 -jsonpatch!=1.20,>=1.16 # BSD -pbr!=2.1.0,>=2.0.0 # Apache-2.0 @@ -13,2 +11 @@ python-glanceclient>=2.8.0 # Apache-2.0 -python-neutronclient>=6.3.0 # Apache-2.0 -python-novaclient>=9.1.0 # Apache-2.0 +python-neutronclient>=6.7.0 # Apache-2.0 @@ -19 +16 @@ oslo.concurrency>=3.25.0 # Apache-2.0 -oslo.config>=5.1.0 # Apache-2.0 +oslo.config>=5.2.0 # Apache-2.0 @@ -30 +26,0 @@ oslo.db>=4.27.0 # Apache-2.0 -os-vif!=1.8.0,>=1.7.0 # Apache-2.0 @@ -33 +28,0 @@ six>=1.10.0 # MIT -WSME>=0.8.0 # MIT @@ -37 +31,0 @@ docker>=2.4.2 # Apache-2.0 -netaddr>=0.7.18 # BSD @@ -40 +34 @@ websockify>=0.8.0 # LGPLv3 -websocket-client<=0.40.0,>=0.33.0 # LGPLv2+ +websocket-client>=0.44.0 # LGPLv2+ diff --git a/test-requirements.txt b/test-requirements.txt index ce2834b..152b46d 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -12,2 +11,0 @@ hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0 -sphinx!=1.6.6,>=1.6.2 # BSD -openstackdocstheme>=1.18.1 # Apache-2.0 @@ -19 +16,0 @@ tempest>=17.1.0 # Apache-2.0 -testrepository>=0.0.18 # Apache-2.0/BSD @@ -23,2 +20,2 @@ testtools>=2.2.0 # MIT -reno>=2.5.0 # Apache-2.0 -os-api-ref>=1.4.0 # Apache-2.0 +stestr>=1.0.0 # Apache-2.0 +Pygments>=2.2.0 # BSD license
participants (1)
-
no-reply@openstack.org