{ "info": { "author": "Grayson Head", "author_email": "grayson@graysonhead.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Telecommunications Industry", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# Runcible\n\n[![Documentation Status](https://readthedocs.org/projects/runcible/badge/?version=latest)](https://runcible.readthedocs.io/en/latest/?badge=latest)\n[![Gitter](https://badges.gitter.im/runcible_project/community.svg)](https://gitter.im/runcible_project/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)\n\n##What is Runcible?\nRuncible is a framework and CLI application to allow for declarative switch management. It intakes a declared state for \na device in YAML or JSON and turns it into a list of idempotent commands to configure that device, it then runs them \nover the desired protocol.\n\nRuncible provides a high-level API for Python developers to leverage to manage devices programmatically, and also \nprovides a YAML interface with configuration layering and inheritance for network engineers with any amount of \nprogramming experience.\n\n##How is This Different from Ansible and Others?\nRuncible was created to solve three major problems in regards to Network Automation:\n\n###Interface Commonality\nOne of the core components of Runcible is a datatype known as Modules. Modules are plugin-independent interfaces that \nallow data with a common schema to be passed into multiple types of plugins. This allows for a large amount of \nconfiguration re-use between similar devices produced by different vendors. I.E. the vlans module should be implemented \nby any switch plugin that supports vlans, and the configuration should be identical (assuming the device supports the \nentire featureset of the vlans module.)\n\n###Topology Awareness\nOne important aspect of any kind of network automation is ensuring that bad automation runs are dealt with, and that \nyou stage your changes in a topology-aware manner. You wouldn\u2019t want a bad change to propagate to your entire core \nswitch fabric and take your network down. Runcible provides Schedulers that allow for intelligent automation runs allow \nyou to ensure that your automated changes are made intelligently, and also control rollback and failure behavior.\n\n###Protocol Agnosticism\nRuncible doesn\u2019t operate on a defined set of protocols. While most providers will go with a text based protocol \n(SSH, telnet, RS232), any protocol is supported. Runcible provides some sane default protocol modules based on paramiko \nfor SSH, and pyserial for RS232 terminals, but has loose shim classes that allow plugin writers to implement any \nprotocol they deem necessary without inhibiting any of Runcible\u2019s features. This allows users to use their same \nautomation repository for both bootstrapping devices via a serial connection, as well as making changes via SSH, \nTelnet, REST, or even protocols that haven\u2019t been invented yet.\n\n## Getting Started\n\nRead the getting started guide here: https://runcible.readthedocs.io/en/development/getting_started.html", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/graysonhead/runcible", "keywords": "", "license": "GPL V3", "maintainer": "", "maintainer_email": "", "name": "runcible", "package_url": "https://pypi.org/project/runcible/", "platform": "", "project_url": "https://pypi.org/project/runcible/", "project_urls": { "Documentation": "https://runcible.readthedocs.io/en/latest/index.html", "Gitter": "https://gitter.im/runcible_project/community", "Homepage": "https://github.com/graysonhead/runcible", "Repository": "https://github.com/graysonhead/runcible" }, "release_url": "https://pypi.org/project/runcible/0.2.0/", "requires_dist": null, "requires_python": ">=3.5, <4", "summary": "", "version": "0.2.0" }, "last_serial": 5784401, "releases": { "0.0.3": [ { "comment_text": "", "digests": { "md5": "701a883c9062fc417b08506410ebfb74", "sha256": "b64f7d585bdf630530a73cc3bc08e884a54cc8a2082cec11a39f8d7f237ac233" }, "downloads": -1, "filename": "runcible-0.0.3.tar.gz", "has_sig": false, "md5_digest": "701a883c9062fc417b08506410ebfb74", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30612, "upload_time": "2019-05-05T05:01:42", "url": "https://files.pythonhosted.org/packages/b8/ca/b520361f971aacc90d13b0e84ecefea2100c545ce6d6b912dd4dcab51bfe/runcible-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "d4a9cddcd28aeb44f25eb13a70588a41", "sha256": "0b89445764f81b760329ffe3ad7c6b7f661662daabcf4201b2805b2f16bc5a20" }, "downloads": -1, "filename": "runcible-0.0.4.tar.gz", "has_sig": false, "md5_digest": "d4a9cddcd28aeb44f25eb13a70588a41", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34011, "upload_time": "2019-05-31T06:18:50", "url": "https://files.pythonhosted.org/packages/c5/9e/ddcf8363169481d40237d375e8bd40eeb55909c1951ea49a73dea09140ab/runcible-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "8ce6739f5382c2adc4fff875b647bde1", "sha256": "67962fb3330ea99ab7bda5d882af596718a9c74ff16fab9d27be83c0963e6dd0" }, "downloads": -1, "filename": "runcible-0.0.5.tar.gz", "has_sig": false, "md5_digest": "8ce6739f5382c2adc4fff875b647bde1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35999, "upload_time": "2019-06-03T14:58:29", "url": "https://files.pythonhosted.org/packages/a6/b7/bed2a03708dfb0dd9832128ef777455fd50e9224971cd9540b6bdd753fd9/runcible-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "f4970c3a8c6f1f6ac21b6499a9d825ca", "sha256": "0e1b7ac69ee8759658dddf1b771fcdf5adf9a5e946a336798568c565fa7ef0cf" }, "downloads": -1, "filename": "runcible-0.0.6.tar.gz", "has_sig": false, "md5_digest": "f4970c3a8c6f1f6ac21b6499a9d825ca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76814, "upload_time": "2019-07-17T05:15:13", "url": "https://files.pythonhosted.org/packages/b5/38/249e82f8e4268908febd2b37a70b1a6840cc82c38b4a48b3b6d6e555cde0/runcible-0.0.6.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "9991c51ae62926c4db6b8e5c9946e2a2", "sha256": "d1c2e1d3b771b71ce594c73154d6301a5aeaafdfe97a4787ec11910760362713" }, "downloads": -1, "filename": "runcible-0.1.0.tar.gz", "has_sig": false, "md5_digest": "9991c51ae62926c4db6b8e5c9946e2a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 81324, "upload_time": "2019-08-01T03:57:47", "url": "https://files.pythonhosted.org/packages/de/1f/6d84d2aa21b19b1f39136edbd354b564396093367a1bd85f1d0043d4d3a6/runcible-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "132f427c5b4f78551ceaddc3ffaa6c21", "sha256": "848667dc81cc3d96f290eab9932d1bcd6f11fc8788c3f6b10430ae69798af49f" }, "downloads": -1, "filename": "runcible-0.2.0.tar.gz", "has_sig": false, "md5_digest": "132f427c5b4f78551ceaddc3ffaa6c21", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5, <4", "size": 89657, "upload_time": "2019-09-05T03:17:21", "url": "https://files.pythonhosted.org/packages/2e/a0/82b862242b24a8e7111adb28d7005d9c7ce3cdbf3b44a0ae75f371ae5ac5/runcible-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "132f427c5b4f78551ceaddc3ffaa6c21", "sha256": "848667dc81cc3d96f290eab9932d1bcd6f11fc8788c3f6b10430ae69798af49f" }, "downloads": -1, "filename": "runcible-0.2.0.tar.gz", "has_sig": false, "md5_digest": "132f427c5b4f78551ceaddc3ffaa6c21", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5, <4", "size": 89657, "upload_time": "2019-09-05T03:17:21", "url": "https://files.pythonhosted.org/packages/2e/a0/82b862242b24a8e7111adb28d7005d9c7ce3cdbf3b44a0ae75f371ae5ac5/runcible-0.2.0.tar.gz" } ] }