{ "info": { "author": "Sergey Arkhipov", "author_email": "serge@aerialsounds.org", "bugtrack_url": null, "classifiers": [ "Environment :: OpenStack", "Intended Audience :: Information Technology", "Intended Audience :: System Administrators", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4" ], "description": "=========\nfuel-pdsh\n=========\n\n|PyPi Package|\n\nfuel-pdsh is a small utility which allows you to execute one command on\nthe multiple OpenStack nodes from master node (aka Fuel node) remotely\nusing SSH.\n\nBasically it is just a pure Python replacement for `PDSH\n`_ which uses Nailgun API to discover\nnodes. Also it supports ``pdcp`` utility for copying files to multiple\nhosts in parallel.\n\n``fuel-pdsh`` package contains 2 commandline utilities, ``fuel-pdsh``\nfor executing SSH command on the group of hosts and ``fuel-pdcp`` for\nfile copying.\n\n\nInstallation\n============\n\nBefore install fuel-pdsh on master node, do the following:\n\n::\n\n $ yum install python-devel python-pip gcc\n\nIf you want system installation, do:\n\n::\n\n $ pip install fuel-pdsh\n\nIf you want to use virtualenv:\n\n::\n\n $ pip install virtualenv\n $ virtualenv -p python2.6 --system-site-packages ~/.fuelpdsh-venv\n $ source ~/.fuelpdsh-venv/bin/activate\n $ pip install fuel-pdsh\n\n\nCommandline options\n===================\n\nThe both of ``fuel-pdsh`` and ``fuel-pdcp`` have the same options set but\ndifferent arguments.\n\n::\n\n usage: fuel-pdsh [-h] [--concurrency CONCURRENCY] [-c CLUSTER_ID]\n [-w NODE_IDS] [-i IPS] [-n NAME] [-s STATUS] [-g GROUP_ID]\n [-r ROLES] [-v | -d]\n command [command ...]\n\n positional arguments:\n command Command to execute\n\n optional arguments:\n -h, --help show this help message and exit\n --concurrency CONCURRENCY\n How many simultaneous connections should be\n established. By default (4), we are trying to connect\n to all nodes, no limits.\n -c CLUSTER_ID, --cluster-id CLUSTER_ID\n Select only nodes which belong to cluster with such\n ID.\n -w NODE_IDS, --node-ids NODE_IDS\n Plain comma-separated list of nodes.\n -i IPS, --ips IPS Plain comma-separated list of node IPs.\n -n NAME, --name NAME Regular expression for the node name.\n -s STATUS, --status STATUS\n Node status.\n -g GROUP_ID, --group-id GROUP_ID\n Group ID.\n -r ROLES, --roles ROLES\n Node roles.\n -v, --verbose Be verbose.\n -d, --debug Be event more verbose, for debugging.\n\n Please contact Sergey Arkhipov for issues.\n\n\n``--concurrency``\n-----------------\n\nThis flag defines how may hosts would be accessed in parallel. If you\nhave 40 nodes but ``--concurrency`` is set to 4, only 4 hosts will be\nmanaged in parallel. Set ``0`` if you want to connect *all* hosts in\nparallel.\n\nIn reality, please do not set this setting to high. ``fuel-pdsh``\nuses `Paramiko `_ for host access and it\nhas well-known issues on slowing down with multiple simultaneous\nconnections. You may have serious performance decrease if you connect to\nall hosts instead of some limit.\n\n\n``--verbose``\n-------------\n\nThis flag makes utilities more verbose. By default, if you execute\n``fuel-pdsh``, you will see such output:\n\n::\n\n $ fuel-pdsh -n contr -- echo hello world\n node-4 : hello world\n node-39: hello world\n node-3 : hello world\n\nIf you enable ``-v``, you will get something like this:\n\n::\n\n $ fuel-pdsh -n contr -v -- echo hello world\n *** 140489797273344 >>> Found 3 suitable nodes\n *** 140489797273344 >>> Execute with 4 threads\n node-4 : hello world\n node-39: hello world\n node-3 : hello world\n\nSo, more verbose, to understand what is going.\n\n\n``--debug``\n-----------\n\nEnables maximal verbosity. Basically, if you are not me, you do not need\nthis level of verbosity. But I need when I debug.\n\nSo, if you met with some problems and want to issue a bug, execute\nutilities with ``-d`` and send me an output.\n\n\n``-c``, ``--cluster-id``\n------------------------\n\nDefines optional cluster ID for additional node filtering. If no cluster ID\nis set, utilities will work over all accessible clusters.\n\n::\n\n $ fuel-pdsh -c 1 -- ls\n\nThis will do ``ls`` on all nodes in cluster with ID ``1``.\n\n\n``-w``, ``--node-ids``\n----------------------\n\nThe most simple selector, just select all nodes by given IDs. So if you\nwant t``-c``, o run a command on nodes with IDs ``2``, ``4`` and ``8``,\njust pass them as a comma-separated list.\n\n::\n\n $ fuel-pdsh -w 2,4,8 -- ls\n\nAlso, you may prefix them with ``node-`` prefix (as you SSH to them).\nThe following command is the same as previous:\n\n::\n\n $ fuel-pdsh -w node-2,4,node-8 -- ls\n\n\n``-i``, ``--ips``\n-----------------\n\nSelect only those nodes which have these IPs.\n\n::\n\n $ fuel-pdsh -i 10.0.0.1,10.0.0.2 -- ls\n\n\n``-n``, ``--name``\n------------------\n\nFilters on the node names. This parameter is just a regular expression\nfor the node name, so there is not point to enter the whole name, just\npass a part.\n\n::\n\n $ fuel-pdsh -n contro -- ls\n\n\n``-s``, ``--status``\n--------------------\n\nFilter nodes on their statuses.\n\n::\n\n $ fuel-pdsh -s ready -- ls\n\nThis will ``ls`` on all nodes which have status ``ready``.\n\n\n``-g``, ``--group-id``\n----------------------\n\nFilters nodes on their group ID.\n\n::\n\n $ fuel-pdsh -g 10 -- ls\n\n\n``-r``, ``-roles``\n------------------\n\nFilter nodes on their roles.\n\n::\n\n $ fuel-pdsh -r compute -- ls\n\n\nfuel-pdsh\n=========\n\n``fuel-pdsh`` is a tool to execute commands in parallel on different\nhosts. Let's assume you want to restart Apache on all controllers. Then\ndo following:\n\n::\n\n $ fuel-pdsh -r controller service apache2 restart\n\nSometimes you need to pass arguments to the command which may be\nrecognized as an arguments for ``fuel-pdsh`` itself. No worries, good\nold ``--`` is supported.\n\n::\n\n $ fuel-pdsh -r controller -- manage.py --noinput\n\nSometimes you have to invoke several commands. No worries again:\n\n::\n\n $ fuel-pdsh -r controller -- sh -c \"command1 && command2; command3\"\n\n\nfuel-pdcp\n=========\n\n``fuel-pdcp`` is a utility to copy files on multiple hosts simultaneously.\n\n::\n\n $ fuel-pdcp -r controller -- zabbix.deb /tmp\n\nThis will copy Zabbix package to ``/tmp`` on all controllers. Also, you\nmay copy several files:\n\n::\n\n $ fuel-pdcp -r controller -- zabbix.deb zabbix.conf /tmp\n\n**Important**: destination is considered directory. So if you do following\n\n::\n\n $ fuel-pdcp -r controller -- zabbix.deb /tmp/zabbix.deb\n\nThen new directory ``/tmp/zabbix.deb/`` will be created and you file\ngonna be copied in ``/tmp/zabbix.deb/zabbix.deb``. This is intentional\nbecause to avoid ambiguaty on copying several files into one place.\nPlease remember about that.\n\n\n.. |PyPi Package| image:: https://badge.fury.io/py/fuel-pdsh.svg\n :target: https://pypi.python.org/pypi/fuel-pdsh", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/9seconds/fuel-pdsh", "keywords": null, "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "fuel-pdsh", "package_url": "https://pypi.org/project/fuel-pdsh/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/fuel-pdsh/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/9seconds/fuel-pdsh" }, "release_url": "https://pypi.org/project/fuel-pdsh/1.0.0.dev21/", "requires_dist": null, "requires_python": null, "summary": "Simple pure Python alternative to PDSH for OpenStack Fuel node.", "version": "1.0.0.dev21" }, "last_serial": 1841085, "releases": { "1.0.0.dev19": [ { "comment_text": "", "digests": { "md5": "ad2aafd0e78871e7a39edbe429f3dd65", "sha256": "06c550213bfd88819a95b80cc5819a36d731111d8cbd4d5b9199b6a1ba1c9c6e" }, "downloads": -1, "filename": "fuel_pdsh-1.0.0.dev19-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ad2aafd0e78871e7a39edbe429f3dd65", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 15206, "upload_time": "2015-11-30T07:59:47", "url": "https://files.pythonhosted.org/packages/4d/41/bed5d7f400c41a6defeac6463a3a39044ee7340eedea51284938d73b8d0d/fuel_pdsh-1.0.0.dev19-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5b9a2c9ff2d127624740cfcb1a558409", "sha256": "7d098dde10dfb5f31df8e07215abfbcc0f0ab6f78897dc265c7df6ab7bfa0d99" }, "downloads": -1, "filename": "fuel-pdsh-1.0.0.dev19.tar.gz", "has_sig": false, "md5_digest": "5b9a2c9ff2d127624740cfcb1a558409", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10944, "upload_time": "2015-11-30T07:59:22", "url": "https://files.pythonhosted.org/packages/e9/39/81fb91a1a5083e5b6140a791dada8eabd2075025e5a7d85653fd8453d1e1/fuel-pdsh-1.0.0.dev19.tar.gz" } ], "1.0.0.dev21": [ { "comment_text": "", "digests": { "md5": "db96a0c88f3a79e2e9e3bb27b81d2860", "sha256": "20dbfaef2fad46fe09bd8d36f49d91e4a30b39ec410352f28aac79de0fe4a689" }, "downloads": -1, "filename": "fuel_pdsh-1.0.0.dev21-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "db96a0c88f3a79e2e9e3bb27b81d2860", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 15371, "upload_time": "2015-12-01T07:46:52", "url": "https://files.pythonhosted.org/packages/a4/39/7f9425c43593eb2c49076bc47305bc4a9037657ce01535687c3436e2038d/fuel_pdsh-1.0.0.dev21-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "56031ecc7767bd5e19bf37fb3b99807d", "sha256": "1af94aa72fd0ec345a16e497197f010d48ca27144892ce3315bce1a0dda59f12" }, "downloads": -1, "filename": "fuel-pdsh-1.0.0.dev21.tar.gz", "has_sig": false, "md5_digest": "56031ecc7767bd5e19bf37fb3b99807d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11128, "upload_time": "2015-12-01T07:46:47", "url": "https://files.pythonhosted.org/packages/a1/73/86d1460bb5b971d602051e57f334e67a4c8ca5d95b080836c72d3a628d0c/fuel-pdsh-1.0.0.dev21.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "db96a0c88f3a79e2e9e3bb27b81d2860", "sha256": "20dbfaef2fad46fe09bd8d36f49d91e4a30b39ec410352f28aac79de0fe4a689" }, "downloads": -1, "filename": "fuel_pdsh-1.0.0.dev21-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "db96a0c88f3a79e2e9e3bb27b81d2860", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 15371, "upload_time": "2015-12-01T07:46:52", "url": "https://files.pythonhosted.org/packages/a4/39/7f9425c43593eb2c49076bc47305bc4a9037657ce01535687c3436e2038d/fuel_pdsh-1.0.0.dev21-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "56031ecc7767bd5e19bf37fb3b99807d", "sha256": "1af94aa72fd0ec345a16e497197f010d48ca27144892ce3315bce1a0dda59f12" }, "downloads": -1, "filename": "fuel-pdsh-1.0.0.dev21.tar.gz", "has_sig": false, "md5_digest": "56031ecc7767bd5e19bf37fb3b99807d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11128, "upload_time": "2015-12-01T07:46:47", "url": "https://files.pythonhosted.org/packages/a1/73/86d1460bb5b971d602051e57f334e67a4c8ca5d95b080836c72d3a628d0c/fuel-pdsh-1.0.0.dev21.tar.gz" } ] }