From 74fd9813aed21589da79ce9e0fcea19345fca089 Mon Sep 17 00:00:00 2001 From: Yasufumi Ogawa Date: Fri, 17 Sep 2021 07:23:37 +0000 Subject: [PATCH] DevStack job with heat-translator/tosca-parser master Introduce changes from master to drop temporary fix for heat-translator/tosca-parser to replace installation with master branch which is more stable and easy to maintain [1][2]. [1] commit 35f93e9b67 "Remove tmp fix for heat-translator/tosca-parser" [2] commit 828a34d486 "DevStack job with heat-translator/tosca-parser master" Signed-off-by: Yasufumi Ogawa Change-Id: Idebf38e7bca32531ee0994b24fa3be345cc6f2a2 --- .zuul.yaml | 10 + devstack/lib/download_upper_consts | 18 - devstack/lib/tacker | 23 -- devstack/plugin.sh | 16 +- devstack/settings | 12 + lower-constraints.txt | 2 + requirements-extra.txt | 8 - requirements.txt | 5 - tox.ini | 10 - upper-constraints.txt | 575 ----------------------------- 10 files changed, 32 insertions(+), 647 deletions(-) delete mode 100644 devstack/lib/download_upper_consts delete mode 100644 requirements-extra.txt delete mode 100644 upper-constraints.txt diff --git a/.zuul.yaml b/.zuul.yaml index 311daf7fa..c6c1d8d54 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -456,6 +456,15 @@ - ^releasenotes/.*$ - ^contrib/.*$ +- job: + name: tacker-functional-devstack-multinode-libs-master + parent: tacker-functional-devstack-multinode-legacy + description: | + devstack-based functional tests with libs from the master branch + required-projects: + - openstack/heat-translator + - openstack/tosca-parser + - project: templates: - check-requirements @@ -470,3 +479,4 @@ - tacker-functional-devstack-multinode-sol - tacker-functional-devstack-multinode-sol-separated-nfvo - tacker-functional-devstack-multinode-sol-kubernetes + - tacker-functional-devstack-multinode-libs-master diff --git a/devstack/lib/download_upper_consts b/devstack/lib/download_upper_consts deleted file mode 100644 index c34e1a73d..000000000 --- a/devstack/lib/download_upper_consts +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -# TODO(yasufum) Remove it after tosca-parser and heat-translator have its own -# devstack script. It's because for installing them from the latest git -# repo instead of stable pip packages. -# Get a customized `upper-constraints.txt` locally, tosca-parser and -# heat-translator are removed for passing tox jobs. In addition, remove nouse -# packages. -function download_upper_constraints_file { - curl --location https://releases.openstack.org/constraints/upper/master \ - | sed '/tosca-parser/d' | sed '/heat-translator/d' \ - | sed '/python-saharaclient/d' \ - > upper-constraints.txt -} - -# TODO(yasufum) Uncomment if install tosca-parser and heat-translator from git -# repo. -# download_upper_constraints_file diff --git a/devstack/lib/tacker b/devstack/lib/tacker index 38f4dc1ab..35e939b2f 100644 --- a/devstack/lib/tacker +++ b/devstack/lib/tacker @@ -499,26 +499,3 @@ function configure_maintenance_event_types { echo "Configure maintenance event types to $event_definitions_file" cat $maintenance_events_file >> $event_definitions_file } - -# Install pip package from local git repositry. -function install_package_local_repo { - # Name of package, such as `tosca-parser`. - local pkg_name=$1 - # (optional) URL of git repo, it's required if the package is not under - # `https://opendev.org/openstack/`. - local git_url=$2 - - local repo_dir=$DEST/$pkg_name - - if [[ $git_url == "" ]]; then - # Expect the repo is under opendev - local git_url=https://opendev.org/openstack/$pkg_name - fi - - if [ ! -d $repo_dir ]; then - git clone $git_url $repo_dir - fi - - # Install local package with `pip install -e local_dir`. - setup_develop $repo_dir -} diff --git a/devstack/plugin.sh b/devstack/plugin.sh index f0b1c95d8..89a84eeda 100644 --- a/devstack/plugin.sh +++ b/devstack/plugin.sh @@ -15,14 +15,14 @@ if is_service_enabled tacker; then echo_summary "Installing Tacker" install_tacker - # NOTE(yasufum) We don't use pip packages of tosca-parser and - # heat-translator but cloned git repo for usnig the latest revision - # for development. - # If you install pip packages instead, comment out here, and activate - # entries in `requirements.txt` and `lower-constraints.txt`. - #install_package_local_repo tosca-parser - #install_package_local_repo heat-translator - #. $DEST/tacker/devstack/lib/download_upper_consts + if use_library_from_git heat-translator; then + git_clone_by_name heat-translator + setup_dev_lib heat-translator + fi + if use_library_from_git tosca-parser; then + git_clone_by_name tosca-parser + setup_dev_lib tosca-parser + fi elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then # Configure after the other layer 1 and 2 services have been configured diff --git a/devstack/settings b/devstack/settings index f0e51d501..307e13a90 100644 --- a/devstack/settings +++ b/devstack/settings @@ -3,6 +3,18 @@ USE_BARBICAN=True KUBERNETES_VIM=${KUBERNETES_VIM:-False} IS_ZUUL_FT=${IS_ZUUL_FT:-False} +# Install the latest heat-translator and tosca-parser from git repos. +GITREPO["heat-translator"]=${HEAT_TRANSLATOR_REPO:-${GIT_BASE}/openstack/heat-translator.git} +GITBRANCH["heat-translator"]=${HEAT_TRANSLATOR_BRANCH:-$TARGET_BRANCH} +GITDIR["heat-translator"]=$DEST/heat-translator + +GITREPO["tosca-parser"]=${TOSCA_PARSER_REPO:-${GIT_BASE}/openstack/tosca-parser.git} +GITBRANCH["tosca-parser"]=${TOSCA_PARSER_BRANCH:-$TARGET_BRANCH} +GITDIR["tosca-parser"]=$DEST/tosca-parser + +LIBS_FROM_GIT+=heat-translator +LIBS_FROM_GIT+=tosca-parser + if [ "${TACKER_MODE}" == "all" -o "${IS_ZUUL_FT}" == "True" ]; then MGMT_PHYS_NET=${MGMT_PHYS_NET:-mgmtphysnet0} # br-infra is created by devstack multi node job diff --git a/lower-constraints.txt b/lower-constraints.txt index dfedd5f83..ddeb4caa9 100644 --- a/lower-constraints.txt +++ b/lower-constraints.txt @@ -34,6 +34,7 @@ futurist==2.1.0 glance-store==2.4.0 google-auth==1.4.1 greenlet==0.4.15 +heat-translator==2.3.0 # Apache-2.0 idna==2.6 imagesize==1.0.0 ipaddress==1.0.19 @@ -143,6 +144,7 @@ testresources==2.0.1 testscenarios==0.5.0 testtools==2.2.0 tooz==1.58.0 +tosca-parser==2.3.0 # Apache-2.0 traceback2==1.4.0 unittest2==1.1.0 urllib3==1.24.2 diff --git a/requirements-extra.txt b/requirements-extra.txt deleted file mode 100644 index 7375425d8..000000000 --- a/requirements-extra.txt +++ /dev/null @@ -1,8 +0,0 @@ -# This file is used as an input for pip while runnign tox jobs in addition to -# `requirements.txt`. The reason why separated from `requirements.txt' is -# because the syntax of `-e git+https://...` cannot be understood in job -# `tox -e lower-constraints` and it's failed if it's defined in -# `requirements.txt`. - -#-e git+https://opendev.org/openstack/tosca-parser.git#egg=tosca-parser # Apache-2.0 -#-e git+https://opendev.org/openstack/heat-translator.git#egg=heat-translator # Apache-2.0 diff --git a/requirements.txt b/requirements.txt index b72a45715..0aec2dc3a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -55,10 +55,5 @@ PyMySQL>=0.10.1 # MIT # Glance Store glance-store>=2.4.0 # Apache-2.0 -# TODO(yasufum) Remove following comments after those two packages have devstack script. -# NOTE(yasufum) We don't install tosca-parser and heat-translator of stable, -# but the latest revision from git repo for development. -# If you install packages, comment out two lines of `install_package_gitrepo` in -# `devstack/plugin.sh` in addition to activate following lines. heat-translator>=2.3.0 # Apache-2.0 tosca-parser>=2.3.0 # Apache-2.0 diff --git a/tox.ini b/tox.ini index b0b501254..cb50f2065 100644 --- a/tox.ini +++ b/tox.ini @@ -6,16 +6,10 @@ ignore_basepython_conflict = True [testenv] basepython = python3 -# TODO(yasufum) Remove following definitions after tosca-parser and -# heat-translator have its own devstack scripts. -# * `TOX_CONSTRAINTS_FILE` in setenv -# * `-r{toxinidir}/requirements-extra.txt` in [testenv], [testenv:docs] and -# [testenv:lower-constraints] sections. setenv = VIRTUAL_ENV={envdir} OS_LOG_CAPTURE={env:OS_LOG_CAPTURE:true} OS_STDOUT_CAPTURE={env:OS_STDOUT_CAPTURE:true} OS_STDERR_CAPTURE={env:OS_STDERR_CAPTURE:true} -# TOX_CONSTRAINTS_FILE={toxinidir}/upper-constraints.txt passenv = TOX_CONSTRAINTS_FILE usedevelop = True allowlist_externals = rm @@ -23,7 +17,6 @@ deps = -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/wallaby} -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt -# -r{toxinidir}/requirements-extra.txt commands = stestr run --slowest --concurrency 1 {posargs} @@ -87,7 +80,6 @@ commands = python ./tools/check_i18n.py ./tacker [testenv:docs] deps = -r{toxinidir}/doc/requirements.txt -# -r{toxinidir}/requirements-extra.txt commands = sphinx-build -W -b html doc/source doc/build/html oslopolicy-sample-generator --config-file=etc/tacker-policy-generator.conf @@ -107,7 +99,6 @@ commands = [testenv:cover] setenv = PYTHON=coverage run --source tacker --parallel-mode -# TOX_CONSTRAINTS_FILE={toxinidir}/upper-constraints.txt commands = stestr run {posargs} coverage combine @@ -148,7 +139,6 @@ deps = -c{toxinidir}/lower-constraints.txt -r{toxinidir}/test-requirements.txt -r{toxinidir}/requirements.txt -# -r{toxinidir}/requirements-extra.txt [testenv:bindep] # Do not install any requirements. We want this to be fast and work even if diff --git a/upper-constraints.txt b/upper-constraints.txt deleted file mode 100644 index 660198536..000000000 --- a/upper-constraints.txt +++ /dev/null @@ -1,575 +0,0 @@ -ntlm-auth===1.5.0 -voluptuous===0.12.1 -chardet===4.0.0 -enum-compat===0.0.3 -rsa===4.7.2 -restructuredtext-lint===1.3.2 -netmiko===3.3.3 -sshtunnel===0.4.0 -PasteDeploy===2.1.1 -typing===3.7.4.3 -Routes===2.5.1 -rtslib-fb===2.1.74 -oslo.limit===1.2.1 -smmap===3.0.5 -confget===2.3.4 -XStatic-Angular-Bootstrap===2.5.0.0 -WebOb===1.8.7 -sphinxcontrib-actdiag===2.0.0 -pecan===1.3.3 -ryu===4.34 -os-api-ref===2.1.0 -python-ldap===3.3.1 -oslo.concurrency===4.4.0 -websocket-client===0.58.0 -osprofiler===3.4.0 -os-resource-classes===1.0.0 -tabulate===0.8.9 -python-ironic-inspector-client===4.4.0 -lxml===4.6.2 -vintage===0.4.1 -ntc-templates===1.6.0 -rst2txt===1.1.0 -setproctitle===1.2.2 -pytest===6.2.2 -python-slugify===4.0.1 -cursive===0.2.2 -oslo.service===2.5.0 -django-appconf===1.0.4 -pykerberos===1.2.1 -certifi===2020.12.5 -sphinxcontrib-nwdiag===2.0.0 -rbd-iscsi-client===0.1.8 -requests-aws===0.1.8 -alabaster===0.7.12 -pbr===5.5.1 -munch===2.5.0 -waiting===1.4.1 -attrs===20.3.0 -microversion-parse===1.0.1 -Pint===0.16.1 -oslo.i18n===5.0.1 -jsonpath-rw-ext===1.2.2 -python-mistralclient===4.2.0 -oslo.context===3.2.0 -python-senlinclient===2.2.0 -rcssmin===1.0.6 -pycadf===3.1.1 -grpcio===1.36.1 -pysendfile===2.0.1 -sniffio===1.2.0 -fixtures===3.0.0 -neutron-lib===2.9.1 -XStatic-FileSaver===1.3.2.0 -oslo.metrics===0.2.1 -storage-interfaces===1.0.4 -persist-queue===0.5.1 -pystache===0.5.4 -XStatic-Font-Awesome===4.7.0.0 -nose===1.3.7 -nosehtmloutput===0.0.7 -waitress===1.4.4 -os-refresh-config===13.0.0 -pysnmp===4.4.12 -Mako===1.1.4 -pyScss===1.3.7 -sphinxcontrib-htmlhelp===1.0.3 -XStatic-jQuery===1.12.4.1 -ddt===1.4.1 -XStatic-Graphlib===2.1.7.0 -pyserial===3.5 -moto===2.0.1 -infi.dtypes.wwn===0.1.1 -python-freezerclient===4.2.0 -os-xenapi===0.3.4 -python-vitrageclient===4.2.0 -nosexcover===1.0.11 -krest===1.3.2 -psycopg2===2.8.6 -networkx===2.5 -bashate===2.0.0 -XStatic-Angular===1.5.8.0 -pyngus===2.3.1 -Pillow===8.1.2 -zuul-sphinx===0.5.0 -python-mimeparse===1.6.0 -tripleo-common===14.0.0 -Tempita===0.5.2 -ply===3.11 -google-api-core===1.26.1 -requests-toolbelt===0.9.1 -simplejson===3.17.2 -suds-jurko===0.6 -immutables===0.15;python_version=='3.6' -python-swiftclient===3.11.0 -pyOpenSSL===20.0.1 -monasca-common===3.3.0 -zeroconf===0.28.8 -scipy===1.5.4;python_version=='3.6' -scipy===1.6.1;python_version=='3.8' -mypy-extensions===0.4.3 -rsd-lib===1.2.0 -XStatic-Jasmine===2.4.1.2 -googleapis-common-protos===1.53.0 -python-glanceclient===3.2.2 -pyinotify===0.9.6 -debtcollector===2.2.0 -requests-unixsocket===0.2.0 -responses===0.12.1 -croniter===1.0.8 -horizon===19.0.0 -octavia-lib===2.3.1 -python-watcherclient===3.1.1 -MarkupSafe===1.1.1 -pypowervm===1.1.24 -doc8===0.8.1 -pymongo===3.11.3 -python-cloudkittyclient===4.2.0 -soupsieve===2.2 -sqlparse===0.4.1 -oslotest===4.4.1 -jsonpointer===2.0 -defusedxml===0.7.0 -netaddr===0.8.0 -pyghmi===1.5.23 -sphinxcontrib-blockdiag===2.0.0 -thrift===0.13.0 -gnocchiclient===7.0.6 -wcwidth===0.2.5 -sphinxcontrib.datatemplates===0.7.2 -jsonpath-rw===1.4.0 -prettytable===0.7.2 -vine===5.0.0 -taskflow===4.6.0 -traceback2===1.4.0 -arrow===1.0.3 -semantic-version===2.8.5 -virtualbmc===2.2.0 -deprecation===2.1.0 -SQLAlchemy===1.3.23 -pyroute2===0.5.14 -google-auth===1.27.1 -kazoo===2.8.0 -XStatic-roboto-fontface===0.5.0.0 -pyudev===0.22.0 -eventlet===0.30.2 -openstack-doc-tools===3.3.0 -oslo.messaging===12.7.1 -jira===2.0.0 -extras===1.0.0 -PyJWT===2.0.1 -XStatic-lodash===4.16.4.2 -zVMCloudConnector===1.4.1 -paramiko===2.7.2 -ifaddr===0.1.7 -reno===3.2.0 -imagesize===1.2.0 -pydot===1.4.2 -urllib3===1.26.3 -graphviz===0.16 -PyKMIP===0.10.0 -whereto===0.4.0 -pywbem===1.1.3 -python-subunit===1.4.0 -tornado===6.1 -pycparser===2.20 -mock===4.0.3 -PyYAML===5.4.1 -beautifulsoup4===4.9.3 -os-net-config===14.0.0 -ovs===2.13.0 -cryptography===3.4.6 -httpcore===0.12.3 -URLObject===2.4.3 -nocasedict===1.0.2 -psycopg2-binary===2.8.6 -openstack-release-test===3.3.1 -validations-libs===1.0.4 -pylxd===2.3.0 -pycryptodomex===3.10.1 -anyjson===0.3.3 -requests-mock===1.8.0 -os-apply-config===13.0.0 -prometheus-client===0.9.0 -oslosphinx===4.18.0 -gunicorn===20.0.4 -storpool===5.5.0 -textfsm===1.1.0 -python-3parclient===4.2.11 -unittest2===1.1.0 -django-compressor===2.4 -libvirt-python===7.1.0 -python-zunclient===4.1.1 -tzlocal===2.1 -sphinxcontrib-jsmath===1.0.1 -python-novaclient===17.3.0 -pact===1.12.0 -bcrypt===3.2.0 -os-client-config===2.1.0 -XStatic-Angular-Gettext===2.4.1.0 -h11===0.12.0 -Pygments===2.8.1 -XStatic-Hogan===2.0.0.3 -XStatic-objectpath===1.2.1.0 -python-manilaclient===2.4.0 -sphinxcontrib-serializinghtml===1.1.4 -requests===2.25.1 -snowballstemmer===2.1.0 -Jinja2===2.11.3 -XStatic-Bootstrap-SCSS===3.4.1.0 -pyzabbix===0.8.2 -ptyprocess===0.7.0 -threadloop===1.0.2 -amqp===5.0.5 -websockify===0.9.0 -XStatic-JQuery.quicksearch===2.0.3.2 -mpmath===1.2.1 -python-binary-memcached===0.30.1 -django-debreach===2.0.1 -sphinx-feature-classification===1.1.0 -django-pymemcache===1.0.0 -XStatic-JQuery-Migrate===1.2.1.2 -pytest-html===3.1.1 -appdirs===1.4.4 -tinyrpc===1.0.4 -google-auth-httplib2===0.1.0 -daiquiri===3.0.0 -influxdb===5.3.1 -funcparserlib===0.3.6 -passlib===1.7.4 -dib-utils===0.0.11 -cliff===3.7.0 -os-brick===4.2.0 -ansible-runner===1.4.7 -scp===0.13.3 -python-zaqarclient===2.0.1 -lockfile===0.12.2 -ldappool===3.0.0 -termcolor===1.1.0 -joblib===1.0.1 -google-api-python-client===2.0.2 -castellan===3.7.1 -oslo.versionedobjects===2.4.0 -enmerkar===0.7.1 -webcolors===1.11.1 -aodhclient===2.1.1 -autobahn===21.2.1;python_version=='3.6' -autobahn===21.3.1;python_version=='3.8' -SQLAlchemy-Utils===0.36.8 -retryz===0.1.9 -pluggy===0.13.1 -coverage===5.5 -freezegun===1.1.0 -toml===0.10.0 -pyperclip===1.8.2 -cassandra-driver===3.24.0 -XStatic-Angular-Schema-Form===0.8.13.0 -gabbi===2.2.0 -nwdiag===2.0.0 -XStatic-bootswatch===3.3.7.0 -pytest-xdist===2.2.1 -XStatic-JS-Yaml===3.8.1.0 -XStatic-term.js===0.0.7.0 -oslo.log===4.4.0 -nodeenv===1.5.0 -gossip===2.4.0 -importlib-metadata===3.7.2 -oslo.middleware===4.1.1 -apipkg===1.5 -XStatic-mdi===1.6.50.2 -django-pyscss===2.0.2 -uritemplate===3.0.1 -docutils===0.16 -threadpoolctl===2.1.0 -os-ken===1.4.0 -ujson===4.0.2 -selenium===3.141.0 -python-glareclient===0.5.3 -mypy===0.812 -mistral-lib===2.4.0 -dogtag-pki===10.7.4.1 -XStatic-Angular-UUID===0.0.4.0 -purestorage===1.19.0 -sphinxcontrib-seqdiag===2.0.0 -os-win===5.4.0 -capacity===1.3.14 -retrying===1.3.3 -XStatic-Dagre===0.6.4.1 -pydotplus===2.0.2 -boto3===1.17.22 -jeepney===0.6.0 -stestr===3.1.0 -oslo.serialization===4.1.0 -warlock===1.3.3 -exabgp===4.2.11 -sphinxcontrib-httpdomain===1.7.0 -metalsmith===1.4.2 -s3transfer===0.3.4 -text-unidecode===1.3 -sphinxcontrib-svg2pdfconverter===1.1.1 -murano-pkg-check===0.3.0 -oslo.vmware===3.8.0 -XStatic-moment===2.8.4.3 -sqlalchemy-migrate===0.13.0 -gitdb===4.0.5 -python-monascaclient===2.2.1 -ldap3===2.9 -natsort===7.1.1 -requests-ntlm===1.1.0 -automaton===2.3.0 -os-service-types===1.7.0 -keyring===23.0.0 -elementpath===2.2.0 -testscenarios===0.5.0 -sphinxcontrib-pecanwsme===0.10.0 -sadisplay===0.4.9 -infinisdk===161.1.3 -packaging===20.9 -XStatic-Dagre-D3===0.4.17.0 -nose-exclude===0.5.0 -psutil===5.8.0 -py===1.10.0 -txaio===21.2.1 -elasticsearch===2.4.1 -django-nose===1.4.7 -XStatic-JQuery.TableSorter===2.14.5.2 -pifpaf===3.1.5 -pysmi===0.3.4 -blockdiag===2.0.1 -testtools===2.4.0 -infi.dtypes.iqn===0.4.0 -XStatic-tv4===1.2.7.0 -XStatic-JSEncrypt===2.3.1.1 -python-cinderclient===7.3.0 -keystonemiddleware===9.2.0 -django-formtools===2.2 -python-ceilometerclient===2.9.0 -XStatic-Spin===1.2.5.3 -tap-as-a-service===7.0.0 -os-traits===2.5.0 -SecretStorage===3.3.1 -opentracing===2.4.0 -XStatic-Rickshaw===1.5.1.0 -iso8601===0.1.14 -tooz===2.8.0 -linecache2===1.0.0 -oauth2client===4.1.3 -idna===2.10 -yamlloader===1.0.0 -protobuf===3.15.5 -sushy===3.7.0 -python-neutronclient===7.3.0 -pika===1.2.0 -oslo.cache===2.7.0 -WebTest===2.0.35 -openstack.nose-plugin===0.11 -os-collect-config===13.0.0 -edgegrid-python===1.1.1 -python-qpid-proton===0.33.0 -python-octaviaclient===2.2.0 -pysaml2===6.5.1 -requests-oauthlib===1.3.0 -oslo.reports===2.2.0 -bitmath===1.3.3.1 -ceilometermiddleware===2.1.0 -python-nss===1.0.1 -testrepository===0.0.20 -sympy===1.7.1 -Logbook===1.5.3 -PyNaCl===1.4.0 -osc-lib===2.3.1 -python-consul===1.1.0 -more-itertools===8.7.0 -seqdiag===2.0.0 -numpy===1.19.5;python_version=='3.6' -numpy===1.20.1;python_version=='3.8' -msgpack===1.0.2 -Sphinx===3.5.2 -oslo.config===8.5.0 -tempest===26.0.0 -openstackdocstheme===2.2.7 -osc-placement===2.2.0 -zake===0.2.2 -python-rsdclient===1.0.2 -flux===1.3.5 -python-solumclient===3.2.0 -PyMySQL===1.0.2 -uhashring===2.0 -kubernetes===12.0.1 -httplib2===0.19.0 -betamax===0.8.1 -construct===2.10.61 -pytest-metadata===1.11.0 -pyparsing===2.4.7 -geomet===0.2.1.post1 -distlib===0.3.1 -XStatic-Moment-Timezone===0.5.22.0 -dogpile.cache===1.1.2 -python-barbicanclient===5.0.1 -salt===3002.5 -api-object-schema===2.0.0 -WSME===0.10.0 -proboscis===1.2.6.0 -oslo.upgradecheck===1.3.0 -stevedore===3.3.0 -pywinrm===0.4.1 -botocore===1.20.22 -xmltodict===0.12.0 -pyasn1===0.4.8 -oslo.rootwrap===6.2.0 -Django===2.2.19 -pexpect===4.8.0 -contextvars===2.4;python_version=='3.6' -cmd2===1.5.0 -python-json-logger===2.0.1 -redis===3.5.3 -jmespath===0.10.0 -click===7.1.2 -XStatic-smart-table===1.4.13.2 -kuryr-lib===2.3.0 -scrypt===0.8.17 -jsonpatch===1.31 -python-daemon===2.3.0 -typed-ast===1.4.2 -os-testr===2.0.0 -cotyledon===1.7.3 -xattr===0.9.7 -systemd-python===234 -python-memcached===1.59 -openstacksdk===0.54.0 -six===1.15.0 -dulwich===0.20.20 -dfs-sdk===1.2.27 -sentinels===1.0.0 -kombu===5.0.2 -distro===1.5.0 -zstd===1.4.8.1 -yaql===1.1.3 -requestsexceptions===1.4.0 -testresources===2.0.1 -falcon===2.0.0 -etcd3gw===0.2.5 -Flask-RESTful===0.3.8 -GitPython===3.1.14 -python-ironicclient===4.6.0 -XStatic===1.0.2 -XStatic-Angular-FileUpload===12.0.4.0 -python-openstackclient===5.4.0 -pyzmq===22.0.3 -nocaselist===1.0.4 -oslo.db===8.5.0 -simplegeneric===0.8.1 -python-pcre===0.7 -yappi===1.3.2 -dataclasses===0.8;python_version=='3.6' -abclient===0.2.3 -pymemcache===3.4.1 -wrapt===1.12.1 -oslo.privsep===2.4.0 -sphinxcontrib-apidoc===0.3.0 -oslo.policy===3.7.0 -python-muranoclient===2.2.0 -hvac===0.10.8 -pyeclib===1.6.0 -wsgi-intercept===1.9.2 -ndg-httpsclient===0.5.1 -pyrsistent===0.17.3 -repoze.lru===0.7 -rfc3986===1.4.0 -tenacity===6.3.1 -python-designateclient===4.2.0 -future===0.18.2 -Paste===3.5.0 -pytest-django===4.1.0 -jaeger-client===4.4.0 -XStatic-Json2yaml===0.1.1.0 -boto===2.49.0 -os-vif===2.4.0 -hyperlink===21.0.0 -mitba===1.1.1 -python-masakariclient===6.2.1 -Werkzeug===1.0.1 -pyasn1-modules===0.2.8 -APScheduler===3.7.0 -monotonic===1.5 -xmlschema===1.5.2 -python-troveclient===7.0.0 -etcd3===0.12.0 -cachez===0.1.2 -XStatic-Bootstrap-Datepicker===1.4.0.0 -CouchDB===1.2 -netifaces===0.10.9 -cachetools===4.2.1 -ws4py===0.5.1 -sphinxcontrib-qthelp===1.0.3 -keystoneauth1===4.3.1 -statsd===3.3.0 -XenAPI===2.14 -importlib-resources===5.1.2 -python-keystoneclient===4.2.0 -ceilometer===15.0.0 -diskimage-builder===3.7.0 -python-magnumclient===3.3.0 -docker===4.4.4 -storops===1.2.8 -XStatic-Angular-lrdragndrop===1.0.2.4 -ovsdbapp===1.9.0 -aniso8601===9.0.1 -rjsmin===1.1.0 -icalendar===4.0.7 -decorator===4.4.2 -cffi===1.14.5 -python-cyborgclient===1.3.0 -futurist===2.3.0 -jsonschema===3.2.0 -sphinxcontrib-devhelp===1.0.2 -python-blazarclient===3.1.1 -alembic===1.5.6 -execnet===1.8.0 -glance-store===2.5.0 -sphinxcontrib-programoutput===0.16 -storpool.spopenstack===3.0.0 -sphinx-testing===1.0.1 -dnspython===1.16.0 -oauthlib===3.1.0 -Babel===2.9.0 -logutils===0.3.5 -zipp===3.4.1 -greenlet===1.0.0 -XStatic-Angular-Vis===4.16.0.0 -iniconfig===1.1.1 -confluent-kafka===1.6.0 -xvfbwrapper===0.2.9 -Flask===1.1.2 -httpx===0.17.0 -sqlalchemy-filters===0.12.0 -marathon===0.13.0 -sphinxcontrib-runcmd===0.2.0 -confspirator===0.2.2 -fasteners===0.14.1 -sortedcontainers===2.3.0 -filelock===3.0.12 -python-tackerclient===1.5.0 -python-heatclient===2.3.0 -kafka-python===2.0.2 -oslo.utils===4.8.0 -python-editor===1.0.4 -gitdb2===4.0.2 -requests-kerberos===0.12.0 -itsdangerous===1.1.0 -XStatic-jquery-ui===1.12.1.1 -monasca-statsd===2.1.0 -python-dateutil===2.8.1 -typing-extensions===3.7.4.3 -virtualenv===20.4.2 -colorama===0.4.4 -confetti===2.5.3 -ironic-lib===4.5.0 -pytz===2021.1 -pytest-forked===1.3.0 -XStatic-D3===3.5.17.0 -actdiag===2.0.0 -sysv-ipc===1.1.0 -sphinxcontrib-applehelp===1.0.2 -scikit-learn===0.24.1 -setuptools===54.1.1