[sahara] sahara 8.0.0 (queens)
We are amped to announce the release of:
sahara 8.0.0: Sahara project
This release is part of the queens release series.
The source is available from:
https://git.openstack.org/cgit/openstack/sahara
Download the package from:
https://tarballs.openstack.org/sahara/
For more details, please see below.
Changes in sahara 7.0.0.0rc1..8.0.0 -----------------------------------
f2e0d47 Small doc fixes found during doc day e2ea008 Fixes for the dashboard guide (title, formatting) 840ed9c Adding Storm doc ab1f327 Switch sahara swift to work with keystone v3 339e1ad Replace chinese quotes d4bb042 EDP doc: de-emphasize job binary internals (not in v2) a7a9fe2 Enable hacking-extensions H204, H205 976992a Adding sahara-policy-generator.conf f580f0e use . instead of source. 5e89e86 Add support to deploy Hadoop 2.8.2 b1503b3 Tweak Sahara to make version discovery easier ccb9167 Various server-side fixes to APIv2 87e176f Fix Flask error_handler_spec d02e61a Dynamically add python version into launch_command 64ed2fb Updated from global requirements ba6860d Remove use of unsupported TEMPEST_SERVICES variable b4f0bbb Replace assertFalse/assertTrue(a in b) 4ea2a8e Stop abusing [keystone_authtoken] e1f46bb Update url links in doc files of Sahara 58816b4 Updated from global requirements d46981b Changing expected value to job_template_id c5a0f47 Updated from global requirements 4492b1d Updated from global requirements 0e060fe add bugs link in README.rst 14f38d4 Image generation for MapR 6850bb8 Force deletion of clusters e68fe4a Rename 'SAHARA_AUTO_IP_ALLOCATION_ENABLED' config parameter 5535350 Use default log levels overriding Sahara-specific only b001ef2 Decommission of a specific node ac10e2b Updated from global requirements 9cc5a41 RHEL: fix distro detection and EPEL configuration d05bf66 S3 job binary and binary retriever 791c629 Updated from global requirements 1318412 Updated from global requirements a8d3c48 Updated from global requirements 991a399 [APIv2]Enable APIv2, experimentally e1b78b2 Fix scaling validation error 84b7795 [APIv2]Add ability to export templates to APIv2 7140495 Upgrading Spark to version 2.2 fb3fa4a Updated from global requirements 77d0bf8 Updated from global requirements 0329f52 Remove extra "$" in sahara-on-ironic.rst 3525108 [APIv2]Nix custom OpenStack-Project-ID header e262c2d Revise the installation guide bb1fcb3 [APIv2] Remove job-binary-internal endpoint 032110d Updated from global requirements e7de2b7 Update designate manual installation URL e6f9384 Update Anti-affinity Feature description eaaa239 Remove use_neutron from config e03eeee Add kolla installation guide ec3e10e Update hadoop's distcp command URL de3c7a9 Updated from global requirements 848a8e3 Remove setting of version/release from releasenotes f6c217d Updated from global requirements f2425a3 Update RDO URL 530743c Updated from global requirements b24bdcd Add ZooKeeper support in Vanilla cluster b94140e Incorrect indent Sahara Installation Guide in sahara 3401354 Updated from global requirements 2407203 Spark History Server in Vanilla auto sec group 03c6eba Image generation for CDH 5.11.0 3d8f23c Use non corrupted libext from image. 5d208ed Policy in code for Sahara 157ce33 Image generation for CDH 5.9.0 da5d191 TrivialFix: Redundant alias in import statement b4374d9 Add Cluster validation before scaling d214c22 Image generation for Ambari Plugin 36f7ed8 Add NGT resources validation before scaling cluster 96cb887 Fix typo in advanced-configuration-guide.rst and manager.py cf4cf40 Updated from global requirements af22433 devstack plugin: set two parameters required by Keystone v3 88b427e Allow cluster create with no security groups f5b4cbf Fix Storm 1.1.0 EDP configs 5568a03 Remove SCREEN_LOGDIR from devstack setting 0a4af3f Updated from global requirements 873c4fe Add default configuration files to data_files bfd288b Updated from global requirements c619e85 Document glance and manila options in the sample config file f6c3c6e Updated from global requirements a9a9fcd architecture: remove the references to Trove and Zaqar e836a94 Re-add .testr.conf, required by the cover test d5e5f9a Updated from global requirements be92ba3 [ut] replace .testr.conf with .stestr.conf a62ac99 Fix instances schema doesn't sync with nova instance a37b871 fix duplicated ntp configuration 541e02f Auth parameters: accept and set few default values cfecd60 grenade: do not use the removed glance v1 API 5f89b9b Updated from global requirements 8735c26 Add docs about template portability. b9c4deb Updated from global requirements 62a869a Add export of cluster templates e20d0be Optimize model relationships (avoid joins, prefer subquery) 2a7bb03 writing convention: do not use “-y” for package install a56143a Fix to use "." to source script files aa9cf05 Replace http with https for doc links in sahara 1f7c5db Updated from global requirements 9747c59 Updated from global requirements 2f78583 Fix CDH default templates 12d823e Fix invalid JSON for Vanilla default cluster template 5662d84 doc: point to the main git repository and update links 22034f9 Updated from global requirements e97e7b9 Updated from global requirements a126fb2 Add CDH validation for attached volume size 2dc8b4f doc: generate the list of configuration option 8b3843b Cleanup the last warning on doc building (html and man) 0153879 bindep: depends on gettext (release notes translations) d900282 Imported Translations from Zanata 5095b56 Update reno for stable/pike
Diffstat (except docs and test files) -------------------------------------
.gitignore | 1 + .stestr.conf | 3 + CONTRIBUTING.rst | 4 +- README.rst | 7 +- bindep.txt | 5 +- devstack/exercise.sh | 6 +- devstack/plugin.sh | 19 +- devstack/settings | 3 - devstack/upgrade/resources.sh | 8 +- devstack/upgrade/shutdown.sh | 12 +- devstack/upgrade/upgrade.sh | 12 +- .../dashboard-dev-environment-guide.rst | 112 +- etc/sahara/api-paste.ini | 25 +- etc/sahara/policy.json | 74 - etc/sahara/sahara.conf.sample-basic | 14 +- ...age_generation_validation-47eabb9fa90384c8.yaml | 4 + .../apiv2-preview-release-b1ee8cc9b2fb01da.yaml | 9 + ...age_generation_validation-6334ef6d04950935.yaml | 4 + ...age_generation_validation-19d10e6468e30b4f.yaml | 5 + .../notes/force-delete-apiv2-e372392bbc8639f8.yaml | 4 + .../mapr5.2.0-image-gen-c850e74977b00abe.yaml | 4 + ...optional-project-id-apiv1-2e89756f6f16bd5e.yaml | 3 + .../notes/policy_in_code-5847902775ff9861.yaml | 8 + .../notes/remove-use-neutron-2499b661dce041d4.yaml | 6 + ...ahara-cfg-location-change-7b61454311b16ce8.yaml | 6 + releasenotes/notes/spark-2.2-d7c3a84bd52f735a.yaml | 3 + .../support-s3-job-binary-6d91267ae11d09d3.yaml | 3 + .../trustee-conf-section-5994dcd48a9744d7.yaml | 8 + .../vanilla-2.8.2-support-84c89aad31105584.yaml | 4 + releasenotes/source/conf.py | 12 +- releasenotes/source/index.rst | 1 + .../source/locale/fr/LC_MESSAGES/releasenotes.po | 63 + releasenotes/source/pike.rst | 6 + requirements.txt | 49 +- sahara/api/acl.py | 2 + sahara/api/middleware/auth_valid.py | 58 +- sahara/api/middleware/sahara_middleware.py | 47 +- sahara/api/middleware/version_discovery.py | 73 + sahara/api/v10.py | 23 + sahara/api/v2/cluster_templates.py | 28 +- sahara/api/v2/clusters.py | 8 +- sahara/api/v2/images.py | 1 - sahara/api/v2/job_binaries.py | 51 - sahara/api/v2/jobs.py | 17 +- sahara/api/v2/node_group_templates.py | 30 +- sahara/common/policies/__init__.py | 45 + sahara/common/policies/base.py | 41 + sahara/common/policies/cluster_templates.py | 67 + sahara/common/policies/clusters.py | 72 + sahara/common/policies/data_sources.py | 67 + sahara/common/policies/images.py | 80 + sahara/common/policies/job_binaries.py | 74 + sahara/common/policies/job_binary_internals.py | 65 + sahara/common/policies/job_executions.py | 63 + sahara/common/policies/job_templates.py | 61 + sahara/common/policies/job_types.py | 32 + sahara/common/policies/jobs.py | 74 + sahara/common/policies/node_group_templates.py | 70 + sahara/common/policies/plugins.py | 65 + sahara/conductor/manager.py | 41 +- sahara/config.py | 53 +- sahara/db/sqlalchemy/models.py | 26 +- sahara/exceptions.py | 10 + sahara/main.py | 2 + sahara/plugins/ambari/plugin.py | 26 + .../ambari/resources/images/centos/disable_ambari | 8 + .../resources/images/centos/disable_firewall | 20 + .../ambari/resources/images/centos/disable_selinux | 12 + .../ambari/resources/images/centos/setup_java_home | 31 + .../images/centos/unlimited_security_artifacts | 11 + .../ambari/resources/images/centos/wget_repo | 9 + .../plugins/ambari/resources/images/common/add_jar | 31 + .../ambari/resources/images/common/oracle_java | 41 + sahara/plugins/ambari/resources/images/image.yaml | 105 +- .../ambari/resources/images/ubuntu/wget_repo | 10 + sahara/plugins/cdh/plugin_utils.py | 4 + sahara/plugins/cdh/v5_11_0/images.py | 43 + .../resources/images/centos/disable_firewall | 20 + .../resources/images/centos/selinux_permissive | 13 + .../resources/images/centos/turn_off_services | 33 + .../cdh/v5_11_0/resources/images/centos/wget_repo | 33 + .../cdh/v5_11_0/resources/images/common/add_jar | 25 + .../resources/images/common/install_cloudera | 17 + .../v5_11_0/resources/images/common/install_extjs | 22 + .../images/common/unlimited_security_artifacts | 11 + .../cdh/v5_11_0/resources/images/image.yaml | 131 + .../resources/images/ubuntu/turn_off_services | 33 + .../cdh/v5_11_0/resources/images/ubuntu/wget_repo | 34 + sahara/plugins/cdh/v5_11_0/versionhandler.py | 2 + sahara/plugins/cdh/v5_9_0/images.py | 43 + .../resources/images/centos/disable_firewall | 20 + .../resources/images/centos/selinux_permissive | 13 + .../resources/images/centos/turn_off_services | 33 + .../cdh/v5_9_0/resources/images/centos/wget_repo | 33 + .../cdh/v5_9_0/resources/images/common/add_jar | 25 + .../resources/images/common/install_cloudera | 17 + .../v5_9_0/resources/images/common/install_extjs | 22 + .../images/common/unlimited_security_artifacts | 11 + .../plugins/cdh/v5_9_0/resources/images/image.yaml | 132 + .../resources/images/ubuntu/turn_off_services | 33 + .../cdh/v5_9_0/resources/images/ubuntu/wget_repo | 36 + sahara/plugins/cdh/v5_9_0/versionhandler.py | 2 + sahara/plugins/cdh/validation.py | 8 + .../default_templates/cdh/v5_5_0/cluster.json | 2 +- .../default_templates/cdh/v5_5_0/master-core.json | 2 +- .../default_templates/cdh/v5_7_0/cluster.json | 2 +- .../default_templates/cdh/v5_7_0/master-core.json | 2 +- .../default_templates/cdh/v5_9_0/cluster.json | 2 +- .../default_templates/cdh/v5_9_0/master-core.json | 2 +- .../default_templates/vanilla/v2_7_1/cluster.json | 2 +- sahara/plugins/exceptions.py | 15 + sahara/plugins/images.py | 114 +- sahara/plugins/mapr/base/base_version_handler.py | 19 + sahara/plugins/mapr/domain/distro.py | 13 +- sahara/plugins/mapr/domain/service.py | 2 +- sahara/plugins/mapr/images.py | 43 + sahara/plugins/mapr/plugin.py | 13 + sahara/plugins/mapr/resources/add_mapr_repo.sh | 4 +- .../mapr/resources/images/centos/disable_firewall | 20 + .../images/centos/install_mapr_core_repository | 27 + .../images/centos/install_mapr_eco_repository | 27 + .../mapr/resources/images/centos/install_openjdk | 14 + .../mapr/resources/images/centos/install_scala | 34 + .../mapr/resources/images/centos/requiretty | 6 + .../resources/images/centos/selinux_permissive | 12 + .../mapr/resources/images/centos/update_repository | 5 + .../mapr/resources/images/common/configure_extjs | 23 + .../mapr/resources/images/common/oracle_java | 42 + .../images/common/resources/package_utils.sh | 226 + .../images/common/resources/packages.json | 140 + .../images/common/resources/spec_5.1.0.json | 46 + .../images/common/resources/spec_5.2.0.json | 50 + .../images/common/resources/spec_5.2.0_ubuntu.json | 47 + .../resources/images/common/resources/versions.py | 83 + sahara/plugins/mapr/resources/images/image.yaml | 195 + .../images/ubuntu/install_mapr_core_repository | 27 + .../images/ubuntu/install_mapr_dependencies | 22 + .../images/ubuntu/install_mapr_eco_repository | 32 + .../mapr/resources/images/ubuntu/install_openjdk | 16 + .../mapr/resources/images/ubuntu/install_scala | 35 + .../mapr/resources/images/ubuntu/update_repository | 5 + sahara/plugins/mapr/services/oozie/oozie.py | 3 +- sahara/plugins/spark/config_helper.py | 2 +- sahara/plugins/spark/plugin.py | 4 +- sahara/plugins/storm/config_helper.py | 4 +- sahara/plugins/vanilla/hadoop2/config.py | 48 +- sahara/plugins/vanilla/hadoop2/config_helper.py | 42 +- .../vanilla/hadoop2/resources/create_hive_db.sql | 9 - .../vanilla/hadoop2/resources/zoo_sample.cfg | 29 + sahara/plugins/vanilla/hadoop2/run_scripts.py | 46 +- sahara/plugins/vanilla/hadoop2/scaling.py | 5 + sahara/plugins/vanilla/hadoop2/starting_scripts.py | 6 + sahara/plugins/vanilla/hadoop2/validation.py | 27 +- sahara/plugins/vanilla/utils.py | 4 + sahara/plugins/vanilla/v2_7_1/config_helper.py | 15 + .../vanilla/v2_7_1/resources/create_hive_db.sql | 9 + sahara/plugins/vanilla/v2_7_1/versionhandler.py | 7 +- sahara/plugins/vanilla/v2_8_2/__init__.py | 0 sahara/plugins/vanilla/v2_8_2/config_helper.py | 126 + sahara/plugins/vanilla/v2_8_2/edp_engine.py | 81 + sahara/plugins/vanilla/v2_8_2/resources/README.rst | 27 + .../vanilla/v2_8_2/resources/core-default.xml | 2414 ++++++++ .../vanilla/v2_8_2/resources/create_hive_db.sql | 9 + .../vanilla/v2_8_2/resources/hdfs-default.xml | 3138 +++++++++++ .../vanilla/v2_8_2/resources/hive-default.xml | 5959 ++++++++++++++++++++ .../vanilla/v2_8_2/resources/mapred-default.xml | 1892 +++++++ .../vanilla/v2_8_2/resources/oozie-default.xml | 2843 ++++++++++ .../vanilla/v2_8_2/resources/yarn-default.xml | 2635 +++++++++ sahara/plugins/vanilla/v2_8_2/versionhandler.py | 170 + sahara/service/api/v2/cluster_templates.py | 4 + sahara/service/api/v2/clusters.py | 10 +- sahara/service/api/v2/job_binaries.py | 25 - sahara/service/api/v2/jobs.py | 4 +- sahara/service/api/v2/node_group_templates.py | 4 + sahara/service/edp/binary_retrievers/dispatch.py | 5 + sahara/service/edp/binary_retrievers/s3_storage.py | 19 + sahara/service/edp/job_binaries/opts.py | 2 +- sahara/service/edp/job_binaries/s3/__init__.py | 0 .../service/edp/job_binaries/s3/implementation.py | 51 + sahara/service/edp/resources/launch_command.py | 2 +- sahara/service/edp/s3_common.py | 86 + sahara/service/edp/spark/engine.py | 8 +- sahara/service/edp/storm/engine.py | 8 +- sahara/service/engine.py | 115 +- sahara/service/heat/heat_engine.py | 71 +- sahara/service/heat/templates.py | 75 +- sahara/service/ntp_service.py | 4 +- sahara/service/ops.py | 126 +- sahara/service/quotas.py | 23 +- sahara/service/trusts.py | 4 +- sahara/service/validations/base.py | 59 +- sahara/service/validations/clusters.py | 9 +- sahara/service/validations/clusters_scaling.py | 6 + sahara/service/validations/clusters_schema.py | 23 + sahara/service/validations/edp/job_execution.py | 4 +- .../validations/edp/job_execution_schema.py | 4 +- sahara/swift/swift_helper.py | 2 +- sahara/swift/utils.py | 8 +- .../plugins/vanilla/hadoop2/test_config_helper.py | 16 + .../plugins/vanilla/hadoop2/test_run_scripts.py | 5 +- .../unit/plugins/vanilla/hadoop2/test_scaling.py | 11 + .../plugins/vanilla/hadoop2/test_validation.py | 7 + .../plugins/vanilla/v2_7_1/test_config_helper.py | 6 +- .../plugins/vanilla/v2_7_1/test_versionhandler.py | 21 +- .../plugins/vanilla/v2_8_2/test_config_helper.py | 77 + .../unit/plugins/vanilla/v2_8_2/test_edp_engine.py | 96 + .../plugins/vanilla/v2_8_2/test_versionhandler.py | 253 + .../service/edp/binary_retrievers/test_dispatch.py | 8 +- .../edp/binary_retrievers/test_internal_swift.py | 2 +- .../unit/service/edp/job_binaries/s3/__init__.py | 0 .../service/edp/job_binaries/s3/test_s3_type.py | 69 + .../edp/job_binaries/swift/test_swift_type.py | 2 +- .../validation/test_cluster_create_validation.py | 24 - .../validation/test_cluster_delete_validation.py | 33 + .../validation/test_cluster_scaling_validation.py | 153 +- sahara/utils/api.py | 8 +- sahara/utils/network.py | 2 +- sahara/utils/notification/sender.py | 3 +- sahara/utils/openstack/base.py | 2 +- sahara/utils/openstack/heat.py | 9 + sahara/utils/openstack/keystone.py | 76 +- sahara/utils/openstack/swift.py | 4 +- sahara/utils/ssh_remote.py | 19 +- sahara/utils/types.py | 4 +- setup.cfg | 9 +- test-requirements.txt | 28 +- tools/config/sahara-policy-generator.conf | 3 + tools/gate/build-images | 8 + tox.ini | 11 +- 293 files changed, 27417 insertions(+), 1636 deletions(-)
Requirements updates --------------------
diff --git a/requirements.txt b/requirements.txt index 079fdb1..ce5573f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9 +9,2 @@ Babel!=2.4.0,>=2.3.4 # BSD -castellan>=0.7.0 # Apache-2.0 +botocore>=1.5.1 # Apache-2.0 +castellan>=0.16.0 # Apache-2.0 @@ -14,17 +15,17 @@ Jinja2!=2.9.0,!=2.9.1,!=2.9.2,!=2.9.3,!=2.9.4,>=2.8 # BSD License (3 clause) -jsonschema!=2.5.0,<3.0.0,>=2.0.0 # MIT -keystoneauth1>=3.1.0 # Apache-2.0 -keystonemiddleware>=4.12.0 # Apache-2.0 -oslo.config!=4.3.0,!=4.4.0,>=4.0.0 # Apache-2.0 -oslo.concurrency>=3.8.0 # Apache-2.0 -oslo.context>=2.14.0 # Apache-2.0 -oslo.db>=4.24.0 # Apache-2.0 -oslo.i18n!=3.15.2,>=2.1.0 # Apache-2.0 -oslo.log>=3.22.0 # Apache-2.0 -oslo.messaging!=5.25.0,>=5.24.2 # Apache-2.0 -oslo.middleware>=3.27.0 # Apache-2.0 -oslo.policy>=1.23.0 # Apache-2.0 -oslo.rootwrap>=5.0.0 # Apache-2.0 -oslo.serialization!=2.19.1,>=1.10.0 # Apache-2.0 -oslo.service>=1.10.0 # Apache-2.0 -oslo.utils>=3.20.0 # Apache-2.0 -paramiko>=2.0 # LGPLv2.1+ +jsonschema<3.0.0,>=2.6.0 # MIT +keystoneauth1>=3.3.0 # Apache-2.0 +keystonemiddleware>=4.17.0 # Apache-2.0 +oslo.config>=5.1.0 # Apache-2.0 +oslo.concurrency>=3.25.0 # Apache-2.0 +oslo.context>=2.19.2 # Apache-2.0 +oslo.db>=4.27.0 # Apache-2.0 +oslo.i18n>=3.15.3 # Apache-2.0 +oslo.log>=3.36.0 # Apache-2.0 +oslo.messaging>=5.29.0 # Apache-2.0 +oslo.middleware>=3.31.0 # Apache-2.0 +oslo.policy>=1.30.0 # Apache-2.0 +oslo.rootwrap>=5.8.0 # Apache-2.0 +oslo.serialization!=2.19.1,>=2.18.0 # Apache-2.0 +oslo.service!=1.28.1,>=1.24.0 # Apache-2.0 +oslo.utils>=3.33.0 # Apache-2.0 +paramiko>=2.0.0 # LGPLv2.1+ @@ -32 +33 @@ requests>=2.14.2 # Apache-2.0 -python-cinderclient>=3.1.0 # Apache-2.0 +python-cinderclient>=3.3.0 # Apache-2.0 @@ -34,2 +35,2 @@ python-keystoneclient>=3.8.0 # Apache-2.0 -python-manilaclient>=1.12.0 # Apache-2.0 -python-novaclient>=9.0.0 # Apache-2.0 +python-manilaclient>=1.16.0 # Apache-2.0 +python-novaclient>=9.1.0 # Apache-2.0 @@ -38 +39 @@ python-neutronclient>=6.3.0 # Apache-2.0 -python-heatclient>=1.6.1 # Apache-2.0 +python-heatclient>=1.10.0 # Apache-2.0 @@ -40 +41 @@ python-glanceclient>=2.8.0 # Apache-2.0 -six>=1.9.0 # MIT +six>=1.10.0 # MIT @@ -43 +44 @@ SQLAlchemy!=1.1.5,!=1.1.6,!=1.1.7,!=1.1.8,>=1.0.10 # MIT -tooz>=1.47.0 # Apache-2.0 +tooz>=1.58.0 # Apache-2.0 diff --git a/test-requirements.txt b/test-requirements.txt index 7b0c152..a7b7a8f 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -9 +9 @@ bandit>=1.1.0 # Apache-2.0 -bashate>=0.2 # Apache-2.0 +bashate>=0.5.1 # Apache-2.0 @@ -11 +11 @@ coverage!=4.4,>=4.0 # Apache-2.0 -doc8 # Apache-2.0 +doc8>=0.6.0 # Apache-2.0 @@ -13,6 +13,6 @@ fixtures>=3.0.0 # Apache-2.0/BSD -mock>=2.0 # BSD -openstackdocstheme>=1.16.0 # Apache-2.0 -oslotest>=1.10.0 # Apache-2.0 -os-api-ref>=1.0.0 # Apache-2.0 -os-testr>=0.8.0 # Apache-2.0 -psycopg2>=2.5 # LGPL/ZPL +mock>=2.0.0 # BSD +openstackdocstheme>=1.18.1 # Apache-2.0 +oslotest>=3.2.0 # Apache-2.0 +os-api-ref>=1.4.0 # Apache-2.0 +os-testr>=1.0.0 # Apache-2.0 +psycopg2>=2.6.2 # LGPL/ZPL @@ -20,4 +20,4 @@ pylint==1.4.5 # GPLv2 -reno!=2.3.1,>=1.8.0 # Apache-2.0 -sphinx>=1.6.2 # BSD -sphinxcontrib-httpdomain # BSD -testresources>=0.2.4 # Apache-2.0/BSD +reno>=2.5.0 # Apache-2.0 +sphinx!=1.6.6,>=1.6.2 # BSD +sphinxcontrib-httpdomain>=1.3.0 # BSD +testresources>=2.0.0 # Apache-2.0/BSD @@ -25,2 +25,2 @@ testscenarios>=0.4 # Apache-2.0/BSD -testtools>=1.4.0 # MIT -python-saharaclient>=1.1.0 # Apache-2.0 +testtools>=2.2.0 # MIT +python-saharaclient>=1.4.0 # Apache-2.0
participants (1)
-
no-reply@openstack.org