Metadata-Version: 2.2
Name: cumin
Version: 5.1.1
Summary: Automation and orchestration framework and CLI written in Python
Home-page: https://github.com/wikimedia/cumin
Author: Riccardo Coccioli
Author-email: rcoccioli@wikimedia.org
License: GPLv3+
Keywords: cumin,automation,orchestration
Platform: GNU/Linux
Platform: BSD
Platform: MacOSX
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Operating System :: POSIX :: BSD
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Clustering
Classifier: Topic :: System :: Distributed Computing
Classifier: Topic :: System :: Systems Administration
Requires-Python: >=3.9
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: clustershell<=1.9.99,>=1.8.3
Requires-Dist: pyparsing<=3.99.0,>=2.4.7
Requires-Dist: pyyaml>=5.3.1
Requires-Dist: requests>=2.25.1
Requires-Dist: tqdm>=4.57.0
Provides-Extra: with-openstack
Requires-Dist: keystoneauth1>=4.2.1; extra == "with-openstack"
Requires-Dist: python-keystoneclient>=4.1.1; extra == "with-openstack"
Requires-Dist: python-novaclient>=17.2.1; extra == "with-openstack"
Provides-Extra: tests
Requires-Dist: Sphinx>=3.4.3; extra == "tests"
Requires-Dist: bandit>=1.6.1; extra == "tests"
Requires-Dist: flake8-import-order>=0.18.2; extra == "tests"
Requires-Dist: flake8>=3.8.4; extra == "tests"
Requires-Dist: keystoneauth1>=4.2.1; extra == "tests"
Requires-Dist: mypy; extra == "tests"
Requires-Dist: pytest-cov>=2.10.1; extra == "tests"
Requires-Dist: pytest-xdist>=2.2.0; extra == "tests"
Requires-Dist: pytest>=6.0.2; extra == "tests"
Requires-Dist: python-keystoneclient>=4.1.1; extra == "tests"
Requires-Dist: python-novaclient>=17.2.1; extra == "tests"
Requires-Dist: requests-mock>=1.7.0; extra == "tests"
Requires-Dist: sphinx-argparse>=0.2.5; extra == "tests"
Requires-Dist: sphinx_rtd_theme>=1.0; extra == "tests"
Requires-Dist: sphinxcontrib-applehelp<=1.0.4; extra == "tests"
Requires-Dist: sphinxcontrib-devhelp<=1.0.2; extra == "tests"
Requires-Dist: sphinxcontrib-htmlhelp<=2.0.1; extra == "tests"
Requires-Dist: sphinxcontrib-qthelp<=1.0.3; extra == "tests"
Requires-Dist: sphinxcontrib-serializinghtml<=1.1.6; extra == "tests"
Requires-Dist: types-PyYAML; extra == "tests"
Requires-Dist: types-requests; extra == "tests"
Provides-Extra: prospector
Requires-Dist: keystoneauth1>=4.2.1; extra == "prospector"
Requires-Dist: prospector[with_everything]>=1.3.1; extra == "prospector"
Requires-Dist: pytest>=6.0.2; extra == "prospector"
Requires-Dist: python-keystoneclient>=4.1.1; extra == "prospector"
Requires-Dist: python-novaclient>=17.2.1; extra == "prospector"
Requires-Dist: requests-mock>=1.7.0; extra == "prospector"
Provides-Extra: tests-base
Requires-Dist: Sphinx>=3.4.3; extra == "tests-base"
Requires-Dist: bandit>=1.6.1; extra == "tests-base"
Requires-Dist: flake8-import-order>=0.18.2; extra == "tests-base"
Requires-Dist: flake8>=3.8.4; extra == "tests-base"
Requires-Dist: mypy; extra == "tests-base"
Requires-Dist: pytest-cov>=2.10.1; extra == "tests-base"
Requires-Dist: pytest-xdist>=2.2.0; extra == "tests-base"
Requires-Dist: pytest>=6.0.2; extra == "tests-base"
Requires-Dist: requests-mock>=1.7.0; extra == "tests-base"
Requires-Dist: sphinx-argparse>=0.2.5; extra == "tests-base"
Requires-Dist: sphinx_rtd_theme>=1.0; extra == "tests-base"
Requires-Dist: sphinxcontrib-applehelp<=1.0.4; extra == "tests-base"
Requires-Dist: sphinxcontrib-devhelp<=1.0.2; extra == "tests-base"
Requires-Dist: sphinxcontrib-htmlhelp<=2.0.1; extra == "tests-base"
Requires-Dist: sphinxcontrib-qthelp<=1.0.3; extra == "tests-base"
Requires-Dist: sphinxcontrib-serializinghtml<=1.1.6; extra == "tests-base"
Requires-Dist: types-PyYAML; extra == "tests-base"
Requires-Dist: types-requests; extra == "tests-base"
Provides-Extra: tests-min
Requires-Dist: Sphinx==3.4.3; extra == "tests-min"
Requires-Dist: bandit>=1.6.1; extra == "tests-min"
Requires-Dist: flake8-import-order>=0.18.2; extra == "tests-min"
Requires-Dist: flake8>=3.8.4; extra == "tests-min"
Requires-Dist: jinja2<3.1.0; extra == "tests-min"
Requires-Dist: keystoneauth1==4.2.1; extra == "tests-min"
Requires-Dist: mypy; extra == "tests-min"
Requires-Dist: pytest-cov>=2.10.1; extra == "tests-min"
Requires-Dist: pytest-xdist>=2.2.0; extra == "tests-min"
Requires-Dist: pytest>=6.0.2; extra == "tests-min"
Requires-Dist: python-keystoneclient==4.1.1; extra == "tests-min"
Requires-Dist: python-novaclient==17.2.1; extra == "tests-min"
Requires-Dist: requests-mock>=1.7.0; extra == "tests-min"
Requires-Dist: sphinx-argparse==0.2.5; extra == "tests-min"
Requires-Dist: sphinx_rtd_theme==1.0; extra == "tests-min"
Requires-Dist: sphinxcontrib-applehelp<1.0.6; extra == "tests-min"
Requires-Dist: sphinxcontrib-applehelp<=1.0.4; extra == "tests-min"
Requires-Dist: sphinxcontrib-devhelp<1.0.4; extra == "tests-min"
Requires-Dist: sphinxcontrib-devhelp<=1.0.2; extra == "tests-min"
Requires-Dist: sphinxcontrib-htmlhelp<2.0.3; extra == "tests-min"
Requires-Dist: sphinxcontrib-htmlhelp<=2.0.1; extra == "tests-min"
Requires-Dist: sphinxcontrib-qthelp<1.0.4; extra == "tests-min"
Requires-Dist: sphinxcontrib-qthelp<=1.0.3; extra == "tests-min"
Requires-Dist: sphinxcontrib-serializinghtml<1.1.7; extra == "tests-min"
Requires-Dist: sphinxcontrib-serializinghtml<=1.1.6; extra == "tests-min"
Requires-Dist: types-PyYAML; extra == "tests-min"
Requires-Dist: types-requests; extra == "tests-min"
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: platform
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

Cumin - An automation and orchestration framework
-------------------------------------------------

|GitHub Release| |PyPI Release| |License|

Cumin provides a flexible and scalable automation framework to execute multiple commands on multiple hosts in parallel.

It allows to easily perform complex selections of hosts through a user-friendly query language which can interface
with different backend modules and combine their results for a fine grained selection. The transport layer can also be
selected, and can provide multiple execution strategies. The executed commands outputs are automatically grouped for an
easy-to-read result.

It can be used both via its command line interface (CLI) `cumin` and as a Python 3 only library.
Cumin was Python 2 only before the 3.0.0 release, due to ClusterShell not yet being Python 3 compatible.


|Cumin GIF|

The documentation is available on `Wikimedia Documentation`_ and `Read the Docs`_. The details on how Cumin it's used
at the Wikimedia Foundation are available on `Wikitech`_.


.. |GitHub Release| image:: https://img.shields.io/github/release/wikimedia/cumin.svg
   :target: https://github.com/wikimedia/cumin/releases
.. |PyPI Release| image:: https://img.shields.io/pypi/v/cumin.svg
   :target: https://pypi.org/project/cumin/
.. |License| image:: https://img.shields.io/badge/license-GPLv3%2B-blue.svg
   :target: https://github.com/wikimedia/cumin/blob/master/LICENSE
.. |Cumin GIF| image:: https://people.wikimedia.org/~volans/cumin.gif

.. _`Read the Docs`: https://cumin.readthedocs.io
.. _`Wikimedia Documentation`: https://doc.wikimedia.org/cumin
.. _`Wikitech`: https://wikitech.wikimedia.org/wiki/Cumin
