{ "info": { "author": "David LaBissoniere", "author_email": "david@labisso.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "********\nEMBARGO\n********\n\nEmbargo is a fork of blockade. We have decided to fork blockade because\nthe original project has not been maintained for years. The main\ndifference between the original and this fork is that support for python\n2 is dropped and python 3.6 and 3.7 should be supported. More changes\nshould be on the way.\n\nEmbargo is a utility for testing network failures and partitions in\ndistributed applications. Embargo uses `Docker `_\ncontainers to run application processes and manages the network from\nthe host system to create various failure scenarios.\n\nA common use is to run a distributed application such as a database\nor cluster and create network partitions, then observe the behavior of\nthe nodes. For example in a leader election system, you could partition\nthe leader away from the other nodes and ensure that the leader steps\ndown and that another node emerges as leader.\n\nCheck out the `full documentation `_\nfor details.\n\nEmbargo features:\n\n* A flexible YAML format to describe the containers in your application\n* Support for dependencies between containers, using named links\n* A CLI tool for managing and querying the status of your embargo\n* Creation of arbitrary partitions between containers\n* Giving a container a flaky network connection to others (drop packets)\n* Giving a container a slow network connection to others (latency)\n* While under partition or network failure control, containers can\n freely communicate with the host system -- so you can still grab logs\n and monitor the application.\n\nBlockade was originally developed by the Dell Cloud Manager\n(formerly Enstratius) team. Blockade was inspired by the excellent\n`Jepsen `_ series.\n\n\nRequirements\n============\n\n* docker (>= 1.4.0 due to docker-py)\n* iproute2 tools (``ip`` and ``tc`` specifically)\n\n\nConfiguration\n=============\n\nEmbargo expects a ``embargo.yaml`` file in the current directory which\ndescribes the containers to launch, how they are linked, and various\nparameters for the embargo modes. Example:\n\n.. code-block:: yaml\n\n containers:\n c1:\n image: my_docker_image\n command: /bin/myapp\n volumes:\n \"/opt/myapp\": \"/opt/myapp_host\"\n expose: [80]\n environment:\n \"IS_MASTER\": 1\n ports:\n 81: 80\n\n c2:\n image: my_docker_image\n command: /bin/myapp\n volumes: [\"/data\"]\n expose: [80]\n links:\n c1: master\n\n c3:\n image: my_docker_image\n command: /bin/myapp\n expose: [80]\n links:\n c1: master\n\n network:\n flaky: 30%\n slow: 75ms 100ms distribution normal\n\n\nEmbargo stores transient information in a local ``.embargo/`` directory.\nThis directory will be cleaned up automatically when you run the\n``embargo destroy`` command.\n\n\nUsage\n=====\n\nEmbargo may be used from the command line manually. The commands are also\nintended to be easy to wrap and automate within tests, etc.\n\n\nCommands\n========\n\n``embargo up``\n\nStart the containers and link them together, if necessary.\n\n\n``embargo destroy``\n\nDestroys all containers and restore networks.\n\n\n``embargo status``\n\nPrint the status of the containers and embargo.\n\n\n``embargo flaky n1``\n\n``embargo flaky n1 n2``\n\nMake network flaky to one or more containers.\n\n\n``embargo slow n1``\n\nMake network slow to one or more containers.\n\n\n``embargo duplicate n1``\n\nToggle sporadic duplicate packets in the network of one or more containers.\n\n\n``embargo fast n1``\n\nRestore network speed and reliability to one or more containers.\n\n\n``embargo partition n1,n2``\n\n``embargo partition n1,n2 n3,n4``\n\nCreate one or more network partitions. Each partition is specified as a\ncomma-separated list. Containers may not exist in more than one partition.\nContainers not specified are grouped into an implicit partition. Each\npartition command replaces any previous partition or block rules.\n\n\n``embargo join``\n\nRemove all partitions between containers.\n\n``embargo random-partition``\n\nIntroduce one or many random partitions among the configured nodes.\n\n\nLicense\n=======\n\nEmbargo is offered under the Apache License 2.0.\n\n\nDevelopment\n===========\n\nInstall test dependencies with ``pip install embargo[test]``.\n\nYou can run integration tests in a Vagrant VM using the included Vagrantfile.\nRun ``vagrant up`` and Docker will be installed in your VM and tests run.\nYou can rerun them with ``vagrant provision``, or SSH into the VM and run\nthem yourself, from ``/vagrant``.\n\nEmbargo documentation is built with Sphinx and is found under ``docs/``.\nTo build:\n\n.. code-block:: bash\n\n $ pip install -r requirements_docs.txt\n $ cd docs/\n $ make html\n\nHTML output will be under ``docs/_build/html/``.\n\nThe documentation is also `hosted online `_.\n\n\nChangelog\n=========\n\n0.1.1 (2019-05-01)\n------------------\n\n- Added updated maintainers.\n- Refactored code (renamed blockade to embargo in code).\n- Updated README.md\n\n0.1.0 (2019-05-01)\n------------------\n\n- Initial release of Embargo!\n\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/dgraph-io/embargo", "keywords": "", "license": "", "maintainer": "Martin Martinez Rivera", "maintainer_email": "martinmr@dgraph.io", "name": "embargo", "package_url": "https://pypi.org/project/embargo/", "platform": "", "project_url": "https://pypi.org/project/embargo/", "project_urls": { "Homepage": "https://github.com/dgraph-io/embargo" }, "release_url": "https://pypi.org/project/embargo/0.1.1/", "requires_dist": [ "PyYAML (<6.0,>=5.1)", "clint (<0.6,>=0.5.1)", "docker (>=3.7<4.0)", "six (>=1.12.0)", "flask (<1.0,>=0.10.1)", "gevent (<1.5,>=1.4)", "PyYAML (<6.0,>=5.1) ; extra == 'test'", "clint (<0.6,>=0.5.1) ; extra == 'test'", "docker (>=3.7<4.0) ; extra == 'test'", "six (>=1.12.0) ; extra == 'test'", "flask (<1.0,>=0.10.1) ; extra == 'test'", "gevent (<1.5,>=1.4) ; extra == 'test'", "coverage ; extra == 'test'", "nose ; extra == 'test'", "mock ; extra == 'test'", "Flask-Testing (<0.6.0,>=0.5.0) ; extra == 'test'" ], "requires_python": "", "summary": "Embargo: network fault testing with Docker", "version": "0.1.1" }, "last_serial": 5214647, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "da5d6b70e40e15622497db2e771c6ca4", "sha256": "1d56b05769c6acbe29923d80d1ea79110a77432f7d027ed837b7eebcb9b9c127" }, "downloads": -1, "filename": "embargo-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "da5d6b70e40e15622497db2e771c6ca4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 67922, "upload_time": "2019-05-01T20:37:08", "url": "https://files.pythonhosted.org/packages/6c/3c/2a5bc3677544736555b50e55239e185a21f1a816ef32bf4f1285a8b40413/embargo-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "826cd92649c4c6b716bf8104092aef8f", "sha256": "1bcbd6592963337ded21828864d5e72ddf40d4af282b3795dceed3fe978df110" }, "downloads": -1, "filename": "embargo-0.1.0.tar.gz", "has_sig": false, "md5_digest": "826cd92649c4c6b716bf8104092aef8f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55030, "upload_time": "2019-05-01T20:37:10", "url": "https://files.pythonhosted.org/packages/7f/d7/adb7735426b3cb3e82e1ea726d6cd6f9d8e94b39e9927f5bf966510f916a/embargo-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "67ad069973e129974df2e104aad692c3", "sha256": "a7ec25b6f49aaddc9830cc7f66c74df43e23377c22e7a6a2b123288acfdca553" }, "downloads": -1, "filename": "embargo-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "67ad069973e129974df2e104aad692c3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 66154, "upload_time": "2019-05-01T22:47:40", "url": "https://files.pythonhosted.org/packages/d8/e3/442c67b8861f28c4fc368247055e3ff3dec958aa1e562a55456be4f7ffba/embargo-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "af8f5aa6b2af9e8f33b08d336afb10dc", "sha256": "f00f56da0cef34ec0923e14856ec31ee2534e7e0bd76f5eb5c64058569871201" }, "downloads": -1, "filename": "embargo-0.1.1.tar.gz", "has_sig": false, "md5_digest": "af8f5aa6b2af9e8f33b08d336afb10dc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51210, "upload_time": "2019-05-01T22:47:42", "url": "https://files.pythonhosted.org/packages/92/ac/db9b713561ad89968fe240454000ec57efce9c30592c742ac430be13bb53/embargo-0.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "67ad069973e129974df2e104aad692c3", "sha256": "a7ec25b6f49aaddc9830cc7f66c74df43e23377c22e7a6a2b123288acfdca553" }, "downloads": -1, "filename": "embargo-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "67ad069973e129974df2e104aad692c3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 66154, "upload_time": "2019-05-01T22:47:40", "url": "https://files.pythonhosted.org/packages/d8/e3/442c67b8861f28c4fc368247055e3ff3dec958aa1e562a55456be4f7ffba/embargo-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "af8f5aa6b2af9e8f33b08d336afb10dc", "sha256": "f00f56da0cef34ec0923e14856ec31ee2534e7e0bd76f5eb5c64058569871201" }, "downloads": -1, "filename": "embargo-0.1.1.tar.gz", "has_sig": false, "md5_digest": "af8f5aa6b2af9e8f33b08d336afb10dc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51210, "upload_time": "2019-05-01T22:47:42", "url": "https://files.pythonhosted.org/packages/92/ac/db9b713561ad89968fe240454000ec57efce9c30592c742ac430be13bb53/embargo-0.1.1.tar.gz" } ] }