'sphinxcontrib.plantuml',
'sphinxcontrib.seqdiag',
'sphinxcontrib.spelling' ,
- 'sphinxcontrib.swaggerdoc',
+ 'sphinxcontrib.openapi',
'sphinx_toolbox.collapse'
]
API Documentation
=================
+
+.. note::
+ **API Documentation Update**
+
+ The API documentation has been migrated from Swagger 2.0 to OpenAPI 3.x specification.
+
+ **What changed:**
+
+ - The ``sphinxcontrib-swaggerdoc`` extension has been replaced with ``sphinxcontrib-openapi``
+ - All ``.. swaggerv2doc::`` directives have been updated to ``.. openapi::``
+ - OpenAPI 3.x provides better support for modern API features and is actively maintained
+
+ **For readers:** The API documentation content and functionality remain the same. OpenAPI is
+ the successor to Swagger and offers the same capabilities with improved specification support.
+
+ **For contributors:** When adding new API documentation, use the ``.. openapi::`` directive
+ instead of the deprecated ``.. swaggerv2doc::`` directive.
+
+.. seealso::
+ - `OpenAPI Specification <https://spec.openapis.org/oas/latest.html>`_
+ - `Swagger vs OpenAPI <https://swagger.io/blog/api-strategy/difference-between-swagger-and-openapi/>`_
+
+
Swagger
-------
myAPI1
......
- .. swaggerv2doc:: myAPI1.json
+ .. openapi:: myAPI1.json
myAPI2
......
- .. swaggerv2doc:: myAPI2.json
+ .. openapi:: myAPI2.json
It will produce the following output:
myAPI1
......
-.. swaggerv2doc:: media/myAPI1.json
+.. openapi:: media/myAPI1.json
myAPI2
......
-.. swaggerv2doc:: media/myAPI2.json
+.. openapi:: media/myAPI2.json
:maxdepth: 1
introduction
- setting-up
setup-of-a-doc-dev-system
style-guide-content
creating-rst
+++ /dev/null
-.. This work is licensed under a Creative Commons Attribution 4.0
-.. International License. http://creativecommons.org/licenses/by/4.0
-.. Copyright 2017 AT&T Intellectual Property. All rights reserved.
-.. Copyright 2022 ONAP
-
-.. _setting-up:
-
-Setting Up
-==========
-
-.. warning:: This guide describes the concept of using 'submodules' for
- documentation. Submodules are no longer supported and have been removed.
- This guide is partly outdated and needs an update.
-
- The aggregation of individual project documentation to a coherent set of
- ONAP release documentation is now done in ReadTheDocs using the ONAP 'doc'
- project as its root.
-
-ONAP documentation is stored in git repositories, changes are managed
-with gerrit reviews, and published documents generated when there is a
-change in any source used to build the documentation.
-
-Authors create source for documents in reStructured Text (RST) that is
-rendered to HTML and published on Readthedocs.io.
-The developer Wiki or other web sites can reference these rendered
-documents directly allowing projects to easily maintain current release
-documentation.
-
-Some initial set up is required to connect a project with
-the master document structure and enable automated publishing of
-changes as summarized in the following diagram and description below
-below.
-
-.. seqdiag::
- :height: 700
- :width: 1000
-
- seqdiag {
- DA [label = "Doc Project\nAuthor/Committer", color=lightblue];
- DR [label = "Doc Gerrit Repo" , color=pink];
- PR [label = "Other Project\nGerrit Repo", color=pink ];
- PA [label = "Other Project\nAuthor/Committer", color=lightblue];
-
- PA -> DR [label = "Add project repo as\ngit submodule" ];
- DR -> DA [label = "Review & Plan to\nIntegrate Content with\nTocTree Structure" ];
- DR <-- DA [label = "Vote +2/Merge" ];
- PA <-- DR [label = "Merge Notification" ];
- PA -> PR [label = "Create in project repo\ntop level directory and index.rst" ];
- PR -> DA [label = "Add as Reviewer" ];
- PR <-- DA [label = "Approve and Integrate" ];
- PA <-- PR [label = "Merge" ];
- }
-
-Setup project repositories
---------------------------
-These steps are performed for each project repository that
-provides documentation.
-
-1. Set two variables that will be used in the subsequent steps.
-Set *reponame* to the project repository you are setting up
-just as it appears in the **Project Name** column of
-the Gerrit projects page.
-Set *lfid* to your Linux Foundation identity that you use to
-login to gerrit or for git clone requests over ssh.
-
-.. code-block:: bash
-
- reponame=
- lfid=
-
-2. Add a directory in the doc project where your
-project will be included as a submodule and at least one reference
-from the doc project to the documentation index in your repository.
-The following sequence will do this over ssh. Please note that the
-reference to your project in *repolist.rst* should be considered
-temporary and removed when you reference it from more appropriate
-place.
-
-.. caution::
-
- If your access network restricts ssh, you will need to use equivalent
- git commands and HTTP Passwords. See ONAP Wiki.
-
-.. caution::
-
- Don't replace ../ in *git submodule add* with any relative path on
- your local file system. It refers to the location of your repository
- on the server.
-
-.. code-block:: bash
-
- git clone ssh://$lfid@gerrit.onap.org:29418/doc
- cd doc
- mkdir -p `dirname docs/submodules/$reponame`
- git submodule add ../$reponame docs/submodules/$reponame.git
- git submodule init docs/submodules/$reponame.git
- git submodule update docs/submodules/$reponame.git
-
- echo " $reponame <../submodules/$reponame.git/docs/index>" >> docs/release/repolist.rst
-
- git add .
- git commit -s
- git review
-
-.. caution::
- Wait for the above change to be merged before any merge to the
- project repository that you have just added as a submodule.
- If the project repository added as submodule changes before the
- doc project merge, git may not automatically update the submodule
- reference on changes and/or the verify job will fail in the step below.
-
-
-1. Create a docs directory in your repository with
-an index.rst file. The following sequence will complete the minimum
-required over ssh. As you have time to convert or add new content you
-can update the index and add files under the docs folder.
-
-.. hint::
- If you have additional content, you can include it by editing the
- index.rst file and/or adding other files before the git commit.
- Check "Templates and Examples" section in :ref:`setting-up` and
- :ref:`converting-to-rst` for more information.
-
-
-.. code-block:: bash
-
- git clone ssh://$lfid@gerrit.onap.org:29418/$reponame
- cd $reponame
- mkdir docs
- echo ".. This work is licensed under a Creative Commons Attribution 4.0 International License.
-
- TODO Add files to toctree and delete this header
- ------------------------------------------------
- .. toctree::
- :maxdepth: 1
-
- " > docs/index.rst
-
- git add .
- git commit -s
- git review
-
-
-The diagram below illustrates what is accomplished in the setup steps
-above from the perspective of a file structure created for a local test,
-a jenkins verify job, and/or published release documentation including:
-
-- ONAP gerrit project repositories,
-
-- doc project repository master document index.rst, templates,
- configuration, and other documents
-
-- submodules directory where other project repositories and
- directories/files are referenced
-
-- file structure: directories (ellipses), files(boxes)
-
-- references: directory/files (solid edges), git submodule
- (dotted edges), sphinx toctree (dashed edges)
-
-.. graphviz::
-
-
- digraph docstructure {
- size="8,12";
- node [fontname = "helvetica"];
- // Align gerrit repos and docs directories
- {rank=same doc aaf aai reponame repoelipse vnfsdk vvp}
- {rank=same confpy release templates masterindex submodules otherdocdocumentelipse}
- {rank=same releasedocumentindex releaserepolist}
-
- //Illustrate Gerrit Repos and provide URL/Link for complete repo list
- gerrit [label="gerrit.onap.org/r", href="https://gerrit.onap.org/r/#/admin/projects/" ];
- doc [href="https://gerrit.onap.org/r/gitweb?p=doc.git;a=tree"];
- gerrit -> doc;
- gerrit -> aaf;
- gerrit -> aai;
- gerrit -> reponame;
- gerrit -> repoelipse;
- repoelipse [label=". . . ."];
- gerrit -> vnfsdk;
- gerrit -> vvp;
-
- //Show example of local reponame instance of component info
- reponame -> reponamedocsdir;
- reponamesm -> reponamedocsdir;
- reponamedocsdir [label="docs"];
- reponamedocsdir -> repnamedocsdirindex;
- repnamedocsdirindex [label="index.rst", shape=box];
-
- //Show detail structure of a portion of doc/docs
- doc -> docs;
- docs -> confpy;
- confpy [label="conf.py",shape=box];
- docs -> masterindex;
- masterindex [label="Master\nindex.rst", shape=box];
- docs -> release;
- docs -> templates;
- docs -> otherdocdocumentelipse;
- otherdocdocumentelipse [label="...other\ndocuments"];
- docs -> submodules
-
- masterindex -> releasedocumentindex [style=dashed, label="sphinx\ntoctree\nreference"];
-
- //Show submodule linkage to docs directory
- submodules -> reponamesm [style=dotted,label="git\nsubmodule\nreference"];
- reponamesm [label="reponame.git"];
-
- //Example Release document index that references component info provided in other project repo
- release -> releasedocumentindex;
- releasedocumentindex [label="index.rst", shape=box];
- releasedocumentindex -> releaserepolist [style=dashed, label="sphinx\ntoctree\nreference"];
- releaserepolist [label="repolist.rst", shape=box];
- release -> releaserepolist;
- releaserepolist -> repnamedocsdirindex [style=dashed, label="sphinx\ntoctree\nreference"];
-
- }
-
-Branches in the DOC Project
----------------------------
-
-The DOC project 'master' branch aggregates the 'latest' content
-from all ONAP project repositories contributing documentation into a
-single tree file structure as described in the previous section. This
-branch is continuously integrated and deployed at Read The
-Docs as the 'latest' ONAP Documentation by:
-
-* Jenkins doc-verify-rtd and doc-merge-rtd jobs triggered whenever patches on
- contributing repositories contain rst files at or below a top level
- 'docs' folder.
-
-* Subscription in the DOC project to changes in submodule repositories.
- These changes appear in the DOC project as commits with title
- 'Updated git submodules' when a change to a contributing project
- repository is merged. No DOC project code review occurs, only a
- submodule repository commit hash is updated to track the head of each
- contributing master branch.
-
-For each ONAP named release the DOC project creates a branch with the
-release name. The timing of the release branch is determined by
-work needed in the DOC project to prepare the release branch and the
-amount of change unrelated to the release in the master branch.
-For example contributing projects that create named release branches
-early to begin work on the next release and/or contributing projects
-to the master that are not yet part of the named release would result
-in an earlier named release branch to cleanly separate work to stabilize
-a release from other changes in the master branch.
-
-A named release branch is integrated and deployed at Read The Docs
-as the 'named release' by aggregating content from contributing
-project repositories. A contributing project repository can
-choose one of the following for the 'named release' branch:
-
-* Remove the contributing project repository submodule and RST
- references when not part of the named release.
-
-* Provide a commit hash or tag for the contributing project master
- branch to be used for the life of the release branch or until a
- request is submitted to change the commit hash or tag.
-
-* Provide the commit hash for the head of a named release branch
- created in the contributing project repository. This option
- may be appropriate if frequent changes are expected over the
- life of the named release and work the same way as the continuous
- integration and deployment described for the master branch.
-
-The decision on option for each contributing project repository
-can be made or changed before the final release is approved. The
-amount of change and expected differences between master and a
-named release branch for each repository should drive the choice of
-option and timing.
-
-About GIT branches
-------------------
-
-GIT is a powerful tool allowing many actions, but without respecting some rules
-the GIT structure can be quickly hard to maintain.
-
-Here are some conventions about GIT branches:
-
- - ALWAYS create a local branch to edit or create any file. This local branch
- will be considered as a topic in Gerrit and allow contributors to
- work at the same time on the same project.
-
- - 1 feature = 1 branch. In the case of documentation, a new chapter
- or page about a new code feature can be considered as a 'doc feature'
-
- - 1 bug = 1 branch. In the case of documentation, a correction on an
- existing sentence can be considered as a 'doc bug'
-
- - the master branch is considered as "unstable", containing new features that
- will converge to a stable situation for the release date.
-
-The day of the release, the repository owner will create a new branch to
-fix the code and documentation. This will represent the 'stable' code of the
-release. In this context:
-
- - NEVER push a new feature on a stable branch
-
- - Only bug correction are authorized on a stable branch using
- cherry pick method
-
-.. image:: media/git_branches.png
../sections/architecture.rst
../sections/offeredapis.rst
../sections/consumedapis.rst
- ../sections/delivery.rst
../sections/design.rst
../sections/logging.rst
../sections/installation.rst
../sections/architecture.rst
../sections/offeredapis.rst
- ../sections/delivery.rst
../sections/logging.rst
../sections/build.rst
../sections/release-notes.rst
+++ /dev/null
-.. This work is licensed under a Creative Commons Attribution 4.0 International License.
-.. http://creativecommons.org/licenses/by/4.0
-.. Copyright 2021 ONAP contributors, Nokia
-
-Delivery
-========
-
-..
- * This section is used to describe the delivery of a software component.
- For a run-time component, this might be executable images, containers, etc.
- For an SDK, this might be libraries.
-
- * This section is typically provided for a platform-component and sdk;
- and referenced in developer and user guides.
-
-Process
--------
-..
- If needed, describe the steps of the delivery pictured on the block diagram.
-
-.. blockdiag::
-
-
- blockdiag layers {
- orientation = portrait
- a -> m;
- b -> n;
- c -> x;
- m -> y;
- m -> z;
- group l1 {
- shape = line;
- color = "#07819B";
- x; y; z;
- }
- group l2 {
- shape = line;
- color = "#1a3d6f";
- m; n;
- }
- group l3 {
- shape = line;
- color = "#5dbeba";
- a; b; c;
- }
-
- }
-
-Deliverables
-------------
-
-..
- List the deliverables in the package here.
-sphinx>=4.2.0 # BSD
-sphinx-rtd-theme>=1.0.0 # MIT
-sphinxcontrib-blockdiag # BSD
-sphinxcontrib-seqdiag # BSD
-sphinxcontrib-swaggerdoc
-sphinxcontrib-spelling
-sphinxcontrib-plantuml
-sphinx_toolbox
-autopep8
-pylint
-six
+# Compatibility
+setuptools>=65.0.0
+Pillow>=10.1.0
+
+# Core Sphinx
+sphinx>=7.2.0
+sphinx-rtd-theme>=2.0.0
+
+# Diagram extensions
+sphinxcontrib-blockdiag>=3.0.0
+sphinxcontrib-seqdiag>=3.0.0
+sphinxcontrib-plantuml>=0.27
+
+# API documentation
+sphinxcontrib-openapi>=0.8.4
+
+# Quality & tooling
+sphinxcontrib-spelling>=8.0.0
+sphinx-toolbox>=3.5.0
+
+# Code quality tools
+autopep8>=2.0.0
+pylint>=3.0.0
skipsdist = true
[testenv:docs]
-basepython = python3.8
+basepython = python3.12
deps =
+ setuptools>=65.0.0
-r{toxinidir}/requirements-docs.txt
- -chttps://releases.openstack.org/constraints/upper/yoga
-c{toxinidir}/../etc/upper-constraints.onap.txt
commands =
sphinx-build -W -q -b html -n -d {envtmpdir}/doctrees {toxinidir} {toxinidir}/_build/html
sh
[testenv:docs-linkcheck]
-basepython = python3.8
+basepython = python3.12
deps =
+ setuptools>=65.0.0
-r{toxinidir}/requirements-docs.txt
- -chttps://releases.openstack.org/constraints/upper/yoga
-c{toxinidir}/../etc/upper-constraints.onap.txt
commands = sphinx-build -W -q -b linkcheck -d {envtmpdir}/doctrees {toxinidir} {toxinidir}/_build/linkcheck
[testenv:docs-spellcheck]
-basepython = python3.8
+basepython = python3.12
deps =
+ setuptools>=65.0.0
-r{toxinidir}/requirements-docs.txt
- -chttps://releases.openstack.org/constraints/upper/yoga
-c{toxinidir}/../etc/upper-constraints.onap.txt
commands =
sphinx-build -b spelling -d {envtmpdir}/doctrees {toxinidir} {toxinidir}/_build/spellcheck
-lfdocs-conf===0.8.0
-sphinxcontrib-needs===0.7.9
-sphinxcontrib.plantuml===0.24
-sphinx_toolbox==3.2.0
-sphinxcontrib.nwdiag===2.0.0
-sphinx-rtd-theme===1.0.0
-autopep8==1.7.0
-gitlint-core==0.17.0
-pyenchant==3.2.2
-pylint==2.15.0
+# Compatibility
+setuptools===69.0.3
+Pillow===10.4.0
+
+# Core Sphinx
+sphinx===7.2.6
+sphinx-rtd-theme===2.0.0
+
+# Diagram extensions
+sphinxcontrib-blockdiag===3.0.0
+sphinxcontrib-seqdiag===3.0.0
+sphinxcontrib-plantuml===0.29
+
+# API documentation
+sphinxcontrib-openapi===0.8.4
+
+# Quality & tooling
+sphinxcontrib-spelling===8.0.0
+sphinx-toolbox===3.5.0
+
+# Code quality tools
+autopep8===2.3.1
+pylint===3.0.3
+++ /dev/null
-ntlm-auth===1.5.0
-voluptuous===0.12.2
-chardet===4.0.0
-enum-compat===0.0.3
-rsa===4.8
-restructuredtext-lint===1.4.0
-netmiko===3.4.0
-sshtunnel===0.4.0
-PasteDeploy===2.1.1
-typing===3.7.4.3
-python-saharaclient===3.5.0
-Routes===2.5.1
-rtslib-fb===2.1.74
-oslo.limit===1.5.1
-tzdata===2021.5
-smmap===5.0.0
-confget===4.1.0
-XStatic-Angular-Bootstrap===2.5.0.0
-WebOb===1.8.7
-sphinxcontrib-actdiag===2.0.0;python_version=='3.6'
-sphinxcontrib-actdiag===3.0.0;python_version=='3.8'
-pecan===1.4.1
-ryu===4.34
-os-api-ref===2.3.0
-python-ldap===3.4.0
-oslo.concurrency===4.5.0
-websocket-client===1.2.3
-osprofiler===3.4.2
-os-resource-classes===1.1.0
-tabulate===0.8.9
-python-ironic-inspector-client===4.7.1
-lxml===4.8.0
-vintage===0.4.1
-ntc-templates===3.0.0
-rst2txt===1.1.0
-setproctitle===1.2.2
-pytest===7.0.1
-python-slugify===6.1.0
-cursive===0.2.2
-oslo.service===2.8.0
-django-appconf===1.0.5
-sphinxcontrib-nwdiag===2.0.0
-rbd-iscsi-client===0.1.8
-requests-aws===0.1.8
-alabaster===0.7.12
-pbr===5.8.1
-munch===2.5.0
-waiting===1.4.1
-attrs===21.4.0
-microversion-parse===1.0.1
-Pint===0.17;python_version=='3.6'
-Pint===0.18;python_version=='3.8'
-oslo.i18n===5.1.0
-jsonpath-rw-ext===1.2.2
-python-mistralclient===4.4.0
-oslo.context===4.1.0
-python-senlinclient===2.4.0
-rcssmin===1.0.6
-pycadf===3.1.1
-types-enum34===1.1.8
-grpcio===1.44.0
-pysendfile===2.0.1
-sniffio===1.2.0
-fixtures===3.0.0
-neutron===20.2.0
-neutron-lib===2.20.0
-XStatic-FileSaver===1.3.2.0
-oslo.metrics===0.4.0
-storage-interfaces===1.0.4
-persist-queue===0.7.0
-pystache===0.6.0
-XStatic-Font-Awesome===4.7.0.0
-nose===1.3.7
-nosehtmloutput===0.0.7
-waitress===2.0.0
-os-refresh-config===13.0.1
-pysnmp===4.4.12
-Mako===1.1.6
-pyScss===1.3.7
-sphinxcontrib-htmlhelp===2.0.0
-XStatic-jQuery===1.12.4.1
-ddt===1.4.4
-XStatic-Graphlib===2.1.7.0
-pyserial===3.5
-moto===3.0.4
-infi.dtypes.wwn===0.1.1
-python-freezerclient===4.4.0
-os-xenapi===0.3.4
-python-vitrageclient===4.5.0
-nosexcover===1.0.11
-krest===1.3.2
-psycopg2===2.9.3
-networkx===2.5.1;python_version=='3.6'
-networkx===2.6.3;python_version=='3.8'
-bashate===2.1.0
-XStatic-Angular===1.5.8.0
-pyngus===2.3.1
-Pillow===8.4.0;python_version=='3.6'
-Pillow===9.0.1;python_version=='3.8'
-zuul-sphinx===0.6.0
-tripleo-common===16.3.0
-Tempita===0.5.2
-ply===3.11
-google-api-core===2.5.0
-requests-toolbelt===0.9.1
-simplejson===3.17.6
-suds-jurko===0.6
-types-paramiko===2.8.13
-immutables===0.16
-python-swiftclient===3.13.1
-pyOpenSSL===22.0.0
-monasca-common===3.5.0
-zeroconf===0.37.0;python_version=='3.6'
-zeroconf===0.38.3;python_version=='3.8'
-scipy===1.5.4;python_version=='3.6'
-scipy===1.8.0;python_version=='3.8'
-python-gnupg===0.4.8
-mypy-extensions===0.4.3
-rsd-lib===1.2.0
-XStatic-Jasmine===2.4.1.2
-googleapis-common-protos===1.55.0
-python-glanceclient===3.6.0
-pyinotify===0.9.6
-debtcollector===2.5.0
-requests-unixsocket===0.3.0
-responses===0.17.0;python_version=='3.6'
-responses===0.18.0;python_version=='3.8'
-croniter===1.3.4
-horizon===22.1.0
-octavia-lib===2.5.0
-python-watcherclient===3.4.0
-MarkupSafe===2.0.1;python_version=='3.6'
-MarkupSafe===2.1.0;python_version=='3.8'
-pypowervm===1.1.24
-ruamel.yaml.clib===0.2.6
-doc8===0.10.1
-pymongo===4.0.1
-python-cloudkittyclient===4.5.0
-soupsieve===2.3.1
-sqlparse===0.4.2
-oslotest===4.5.0
-jsonpointer===2.2
-defusedxml===0.7.1
-netaddr===0.8.0
-pyghmi===1.5.34
-sphinxcontrib-blockdiag===2.0.0;python_version=='3.6'
-sphinxcontrib-blockdiag===3.0.0;python_version=='3.8'
-thrift===0.15.0
-gnocchiclient===7.0.7
-wcwidth===0.2.5
-sphinxcontrib.datatemplates===0.9.1
-jsonpath-rw===1.4.0
-prettytable===2.5.0;python_version=='3.6'
-prettytable===3.1.1;python_version=='3.8'
-vine===5.0.0
-pyroute2.nftables===0.6.6
-taskflow===4.6.4
-traceback2===1.4.0
-arrow===1.2.2
-semantic-version===2.9.0
-virtualbmc===2.2.1
-deprecation===2.1.0
-SQLAlchemy===1.4.31
-pyroute2===0.6.6
-google-auth===2.6.0
-kazoo===2.8.0
-pyspnego===0.5.0
-pyroute2.ethtool===0.6.6
-XStatic-roboto-fontface===0.5.0.0
-pyudev===0.23.2
-eventlet===0.33.0
-openstack-doc-tools===3.3.0
-oslo.messaging===12.13.0
-jira===3.1.1
-extras===1.0.0
-PyJWT===2.3.0
-typing_extensions===4.1.1
-XStatic-lodash===4.16.4.2
-zVMCloudConnector===1.4.1
-paramiko===2.8.1
-ifaddr===0.1.7
-reno===3.5.0
-imagesize===1.3.0
-pydot===1.4.2
-urllib3===1.26.8
-graphviz===0.19.1
-PyKMIP===0.10.0
-whereto===0.4.0
-pywbem===1.4.1
-python-subunit===1.4.0
-tornado===6.1
-pycparser===2.21
-mock===4.0.3
-PyYAML===6.0
-beautifulsoup4===4.10.0
-cached-property===1.5.2;python_version=='3.6'
-os-net-config===15.1.0
-ovs===2.16.0
-cryptography===36.0.1
-httpcore===0.14.7
-URLObject===2.4.3
-nocasedict===1.0.2
-task-core===0.2.1
-psycopg2-binary===2.9.3
-openstack-release-test===3.3.1
-validations-libs===1.6.0
-pylxd===2.3.1
-pycryptodomex===3.14.1
-anyjson===0.3.3
-requests-mock===1.9.3
-os-apply-config===13.1.0
-prometheus-client===0.13.1
-oslosphinx===4.18.0
-gunicorn===20.1.0
-storpool===7.0.0
-textfsm===1.1.2
-python-3parclient===4.2.12
-unittest2===1.1.0
-django-compressor===2.4.1
-libvirt-python===8.0.0
-python-zunclient===4.4.0
-tzlocal===4.1
-sphinxcontrib-jsmath===1.0.1
-python-novaclient===17.7.0
-pact===1.12.0
-bcrypt===3.2.0
-os-client-config===2.1.0
-XStatic-Angular-Gettext===2.4.1.0
-Deprecated===1.2.13
-h11===0.12.0
-Pygments===2.11.2
-XStatic-Hogan===2.0.0.3
-XStatic-objectpath===1.2.1.0
-python-manilaclient===3.3.1
-sphinxcontrib-serializinghtml===1.1.5
-requests===2.27.1
-snowballstemmer===2.2.0
-Jinja2===3.0.3
-XStatic-Bootstrap-SCSS===3.4.1.0
-pyzabbix===1.0.0
-ptyprocess===0.7.0
-threadloop===1.0.2
-amqp===5.0.9
-ruamel.yaml===0.17.21
-websockify===0.10.0
-gssapi===1.7.3
-XStatic-JQuery.quicksearch===2.0.3.2
-mpmath===1.2.1
-python-binary-memcached===0.31.1
-django-debreach===2.0.1;python_version=='3.6'
-django-debreach===2.1.0;python_version=='3.8'
-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.1.4
-google-auth-httplib2===0.1.0
-daiquiri===3.0.1
-influxdb===5.3.1
-# differs from https://github.com/openstack/requirements/blob/stable/yoga/upper-constraints.txt
-funcparserlib===1.0.0a0
-passlib===1.7.4
-dib-utils===0.0.11
-cliff===3.10.1
-os-brick===5.2.2
-ansible-runner===2.1.2
-pytz-deprecation-shim===0.1.0.post0
-scp===0.14.4
-python-zaqarclient===2.3.0
-lockfile===0.12.2
-ldappool===3.0.0
-termcolor===1.1.0
-joblib===1.1.0
-google-api-python-client===2.38.0
-castellan===3.10.2
-oslo.versionedobjects===2.6.0
-ssh-python===0.9.0
-enmerkar===0.7.1
-webcolors===1.11.1
-aodhclient===2.4.1
-autobahn===21.2.1;python_version=='3.6'
-autobahn===22.2.2;python_version=='3.8'
-SQLAlchemy-Utils===0.38.2
-retryz===0.1.9
-pluggy===1.0.0
-coverage===6.2;python_version=='3.6'
-coverage===6.3.2;python_version=='3.8'
-freezegun===1.1.0
-toml===0.10.2
-pycdlib===1.12.0
-pyperclip===1.8.2
-cassandra-driver===3.25.0
-XStatic-Angular-Schema-Form===0.8.13.0
-gabbi===2.4.0
-nwdiag===2.0.0;python_version=='3.6'
-nwdiag===3.0.0;python_version=='3.8'
-XStatic-bootswatch===3.3.7.0
-pytest-xdist===2.5.0
-XStatic-JS-Yaml===3.8.1.0
-XStatic-term.js===0.0.7.0
-oslo.log===4.7.0
-nodeenv===1.6.0
-gossip===2.4.0
-suds-community===1.0.0
-importlib-metadata===4.11.1;python_version=='3.8'
-importlib-metadata===4.8.3;python_version=='3.6'
-oslo.middleware===4.5.1
-XStatic-mdi===1.6.50.2
-django-pyscss===2.0.2
-uritemplate===4.1.1
-docutils===0.17.1
-threadpoolctl===3.1.0
-os-ken===2.3.1
-ujson===4.3.0;python_version=='3.6'
-ujson===5.1.0;python_version=='3.8'
-selenium===3.141.0
-mypy===0.931
-mistral-lib===2.6.0
-dogtag-pki===10.7.4.1
-types-ipaddress===1.0.8
-XStatic-Angular-UUID===0.0.4.0
-purestorage===1.19.0
-sphinxcontrib-seqdiag===2.0.0;python_version=='3.6'
-sphinxcontrib-seqdiag===3.0.0;python_version=='3.8'
-os-win===5.6.0
-capacity===1.3.14
-retrying===1.3.3
-XStatic-Dagre===0.6.4.1
-platformdirs===2.4.0;python_version=='3.6'
-platformdirs===2.5.1;python_version=='3.8'
-pydotplus===2.0.2
-boto3===1.21.7
-jeepney===0.7.1
-stestr===3.2.1
-oslo.serialization===4.3.0
-warlock===1.3.3
-exabgp===4.2.17
-sphinxcontrib-httpdomain===1.8.0
-metalsmith===1.6.2
-s3transfer===0.5.2
-text-unidecode===1.3
-sphinxcontrib-svg2pdfconverter===1.2.0
-murano-pkg-check===0.3.0
-oslo.vmware===3.10.0
-XStatic-moment===2.8.4.3
-autopage===0.5.0
-sqlalchemy-migrate===0.13.0
-gitdb===4.0.9
-python-monascaclient===2.5.0
-ldap3===2.9.1
-requests-ntlm===1.1.0
-sphinx-rtd-theme===1.0.0
-automaton===2.5.0
-os-service-types===1.7.0
-keyring===23.4.1;python_version=='3.6'
-keyring===23.5.0;python_version=='3.8'
-elementpath===2.4.0
-testscenarios===0.5.0
-sphinxcontrib-pecanwsme===0.10.0
-sadisplay===0.4.9
-infinisdk===185.1.1
-packaging===21.3
-XStatic-Dagre-D3===0.4.17.0
-nose-exclude===0.5.0
-psutil===5.9.0
-py===1.11.0
-txaio===22.2.1
-elasticsearch===2.4.1
-django-nose===1.4.7
-asgiref===3.4.1;python_version=='3.6'
-asgiref===3.5.0;python_version=='3.8'
-XStatic-JQuery.TableSorter===2.14.5.2
-pifpaf===3.1.5
-pysmi===0.3.4
-blockdiag===2.0.1;python_version=='3.6'
-blockdiag===3.0.0;python_version=='3.8'
-testtools===2.5.0
-infi.dtypes.iqn===0.4.0
-XStatic-tv4===1.2.7.0
-XStatic-JSEncrypt===2.3.1.1
-python-cinderclient===8.3.0
-keystonemiddleware===9.4.0
-django-formtools===2.3
-XStatic-Spin===1.2.5.3
-tap-as-a-service===9.0.0
-os-traits===2.7.0
-typepy===1.3.0
-SecretStorage===3.3.1
-opentracing===2.4.0
-XStatic-Rickshaw===1.5.1.0
-iso8601===1.0.2
-tooz===2.10.1
-linecache2===1.0.0
-oauth2client===4.1.3
-idna===3.3
-yamlloader===1.1.0
-protobuf===3.19.4
-sushy===4.1.1
-python-neutronclient===7.8.0
-pika===1.2.0
-oslo.cache===2.10.1
-WebTest===3.0.0
-openstack.nose-plugin===0.11
-os-collect-config===13.1.0
-edgegrid-python===1.2.1
-python-qpid-proton===0.36.0
-python-octaviaclient===2.5.0
-pysaml2===7.1.1
-requests-oauthlib===1.3.1
-oslo.reports===2.3.0
-bitmath===1.3.3.1
-ceilometermiddleware===2.4.1
-python-nss===1.0.1
-testrepository===0.0.20
-sympy===1.9
-Logbook===1.5.3
-PyNaCl===1.5.0
-osc-lib===2.5.0
-async-generator===1.10;python_version=='3.6'
-python-consul===1.1.0
-seqdiag===2.0.0;python_version=='3.6'
-seqdiag===3.0.0;python_version=='3.8'
-numpy===1.19.5;python_version=='3.6'
-numpy===1.22.2;python_version=='3.8'
-msgpack===1.0.3
-Sphinx===4.4.0
-oslo.config===8.8.0
-openstackdocstheme===2.4.0
-osc-placement===3.2.0
-zake===0.2.2
-python-rsdclient===1.0.2
-flux===1.3.5
-python-solumclient===3.5.0
-krb5===0.3.0
-PyMySQL===1.0.2
-uhashring===2.1
-kubernetes===22.6.0
-httplib2===0.20.4
-betamax===0.8.1
-construct===2.10.68
-pytest-metadata===1.11.0
-pyparsing===3.0.7
-geomet===0.2.1.post1
-distlib===0.3.4
-XStatic-Moment-Timezone===0.5.22.0
-dogpile.cache===1.1.5
-python-barbicanclient===5.3.0
-salt===3004
-api-object-schema===2.0.0
-WSME===0.11.0
-tomli===1.2.3;python_version=='3.6'
-tomli===2.0.1;python_version=='3.8'
-proboscis===1.2.6.0
-backports.zoneinfo===0.2.1
-oslo.upgradecheck===1.5.0
-stevedore===3.5.0
-pywinrm===0.4.2
-botocore===1.24.7
-xmltodict===0.12.0
-pyasn1===0.4.8
-directord===0.12.0
-oslo.rootwrap===6.3.1
-pyroute2.nslink===0.6.6
-Django===3.2.12
-pexpect===4.8.0
-contextvars===2.4
-cmd2===2.4.0
-python-json-logger===2.0.2
-redis===4.1.4
-jmespath===0.10.0
-click===8.0.4
-XStatic-smart-table===1.4.13.2
-kuryr-lib===2.5.0
-scrypt===0.8.20
-jsonpatch===1.32
-python-daemon===2.3.0
-types-cryptography===3.3.15
-typed-ast===1.5.2;python_version=='3.6'
-os-testr===2.0.1
-cotyledon===1.7.3
-xattr===0.9.9
-systemd-python===234
-python-memcached===1.59
-openstacksdk===0.61.0
-six===1.16.0
-dulwich===0.20.32
-dfs-sdk===1.2.27
-sentinels===1.0.0
-kombu===5.1.0;python_version=='3.6'
-kombu===5.2.3;python_version=='3.8'
-pyroute2.ndb===0.6.6
-distro===1.7.0
-zstd===1.5.1.0
-yaql===2.0.0
-requestsexceptions===1.4.0
-testresources===2.0.1
-falcon===3.0.1
-etcd3gw===1.0.1
-Flask-RESTful===0.3.9
-GitPython===3.1.18;python_version=='3.6'
-GitPython===3.1.27;python_version=='3.8'
-python-ironicclient===4.11.0
-XStatic===1.0.2
-XStatic-Angular-FileUpload===12.0.4.0
-python-openstackclient===5.8.0
-pyzmq===21.0.2
-nocaselist===1.0.4
-oslo.db===11.2.0
-simplegeneric===0.8.1
-python-pcre===0.7
-yappi===1.3.3
-mbstrdecoder===1.1.0
-dataclasses===0.8;python_version=='3.6'
-abclient===0.2.3
-pymemcache===3.5.1
-wrapt===1.13.3
-oslo.privsep===2.7.0
-sphinxcontrib-apidoc===0.3.0
-oslo.policy===3.11.0
-python-muranoclient===2.4.1
-hvac===0.11.2
-pyeclib===1.6.0
-wsgi-intercept===1.9.3
-ndg-httpsclient===0.5.1
-pyrsistent===0.18.0;python_version=='3.6'
-pyrsistent===0.18.1;python_version=='3.8'
-repoze.lru===0.7
-rfc3986===1.5.0
-tenacity===6.3.1
-pyroute2.core===0.6.6
-python-designateclient===4.5.1
-pyroute2.ipdb===0.6.6
-future===0.18.2
-Paste===3.5.0
-pytest-django===4.5.2
-jaeger-client===4.6.1;python_version=='3.6'
-jaeger-client===4.8.0;python_version=='3.8'
-XStatic-Json2yaml===0.1.1.0
-pyroute2.ipset===0.6.6
-boto===2.49.0
-os-vif===2.7.1
-hyperlink===21.0.0
-mitba===1.1.1
-python-masakariclient===7.2.0
-Werkzeug===2.0.3
-pyasn1-modules===0.2.8
-APScheduler===3.9.0.post1
-monotonic===1.6
-xmlschema===1.9.2
-python-troveclient===7.2.0
-etcd3===0.12.0
-cachez===0.1.2
-XStatic-Bootstrap-Datepicker===1.4.0.0
-CouchDB===1.2
-netifaces===0.11.0
-cachetools===4.2.4;python_version=='3.6'
-cachetools===5.0.0;python_version=='3.8'
-ws4py===0.5.1
-sphinxcontrib-qthelp===1.0.3
-keystoneauth1===4.5.0
-statsd===3.3.0
-XenAPI===2.14
-importlib-resources===5.4.0
-python-keystoneclient===4.4.0
-ceilometer===18.0.0
-diskimage-builder===3.20.3
-heat-translator===2.5.0
-python-magnumclient===3.6.0
-docker===5.0.3
-storops===1.2.10
-anyio===3.5.0
-XStatic-Angular-lrdragndrop===1.0.2.4
-ovsdbapp===1.15.2
-aniso8601===9.0.1
-rjsmin===1.1.0
-icalendar===4.0.9
-decorator===4.4.2;python_version=='3.6'
-decorator===5.1.1;python_version=='3.8'
-DateTimeRange===1.2.0
-cffi===1.15.0
-python-cyborgclient===1.7.0
-futurist===2.4.0
-jsonschema===3.2.0
-sphinxcontrib-devhelp===1.0.2
-python-blazarclient===3.4.1
-alembic===1.7.6
-execnet===1.9.0
-glance-store===3.0.0
-sphinxcontrib-programoutput===0.17
-storpool.spopenstack===3.1.0
-sphinx-testing===1.0.1
-dnspython===2.1.0
-oauthlib===3.2.0
-Babel===2.9.1
-logutils===0.3.5
-zipp===3.6.0;python_version=='3.6'
-zipp===3.7.0;python_version=='3.8'
-greenlet===1.1.2
-XStatic-Angular-Vis===4.16.0.0
-iniconfig===1.1.1
-confluent-kafka===1.8.2
-xvfbwrapper===0.2.9
-futures===3.0.5;python_version=='3.6'
-tosca-parser===2.5.1
-charset-normalizer===2.0.12
-Flask===2.0.3
-httpx===0.22.0
-sqlalchemy-filters===0.12.0
-marathon===0.13.0
-sphinxcontrib-runcmd===0.2.0
-confspirator===0.3.0
-fasteners===0.17.3
-sortedcontainers===2.4.0
-python-linstor===1.13.0
-filelock===3.4.1;python_version=='3.6'
-filelock===3.6.0;python_version=='3.8'
-python-tackerclient===1.10.0
-python-heatclient===2.5.1
-kafka-python===2.0.2
-oslo.utils===4.12.3
-gitdb2===4.0.2
-requests-kerberos===0.14.0
-itsdangerous===2.0.1;python_version=='3.6'
-itsdangerous===2.1.0;python_version=='3.8'
-XStatic-jquery-ui===1.13.0.1
-monasca-statsd===2.4.0
-python-dateutil===2.8.2
-virtualenv===20.13.2
-colorama===0.4.4
-confetti===2.5.3
-ironic-lib===5.2.0
-pytz===2021.3
-pytest-forked===1.4.0
-XStatic-D3===3.5.17.0
-actdiag===2.0.0;python_version=='3.6'
-actdiag===3.0.0;python_version=='3.8'
-sysv-ipc===1.1.0
-sphinxcontrib-applehelp===1.0.2
-scikit-learn===0.24.2;python_version=='3.6'
-scikit-learn===1.0.2;python_version=='3.8'
-setuptools===59.6.0;python_version=='3.6'
-setuptools===60.9.3;python_version=='3.8'