{ "info": { "author": "Grayson Head", "author_email": "grayson@graysonhead.net", "bugtrack_url": null, "classifiers": [], "description": "# Etherweaver\n\n[![Build Status](https://travis-ci.com/graysonhead/etherweaver.svg?branch=master)](https://travis-ci.com/graysonhead/etherweaver)\n[![Docs Status](https://readthedocs.org/projects/netweaver/badge/?version=latest)](https://netweaver.readthedocs.io/en/latest/#)\n\nEtherweaver is an agentless configuration management system.\n\nSimilar to Ansible and Salt, the goal of Etherweaver is to abstract the task of managing large switch fabrics.\n\n## Core Design Concepts\n\n* ### Universal States for Different Platforms\n\n A switch switches packets, and a router routes them. If they follow standards, they will perform this job identically. While the featureset may be disimilar between two platforms from different vendors, the way they implement protocols are similar, as is the end result. \n\n The goal of Etherweaver is to allow the user to create a \"universal\" definition of their desired state (configuration), and disconnect the format of this configuration from the vendor-specific OS it is being applied to.\n\n\n* ### Idempotent and Self-recovering\n\n To reduce the chance of Etherweaver causing momentary outages, it should always compare the current state with the desired state, and avoid making changes if they are equivelant.\n \n When possible, Etherweaver should use clever config file management and rollback functionality on network appliances to reduce the risk of a bad statement causing a permanent management disconnection.\n \n \n* ### Agentless\n\n Closed source switching and routing platforms shouldn't be excluded from config management. Thus, Etherweaver is agentless by default. Each plugin will support a number of methods (ssh, telnet, RS232, etc.) to ensure that all networks can be maintained in an automated fashion.\n \n\n## Config Structure\n\n### Top Level objects\n```yaml\nroles: # A list of all roles\nfabrics: # A list of all fabrics\nappliances: # A list of all hardware\n```\n\n### Roles\n\nA Role describes the state and attributes that can describe a specific appliance, or group of appliances.\n\nRoles can be defined on a per device status (for example, you may have role objects for individual switches, or you may have a single template that describes the configuration of hundreds of switches.)\n\nHere is an example of a Role Object as defined in YAML:\n```yaml\nroles:\n spine1:\n fabric: network1\n hostname: spine1.net.testco.org\n protocols:\n dns:\n nameservers:\n - 10.5.5.115\n ntp:\n client:\n timezone: America/Chicago\n servers:\n - pool.ntp.org\n - 0.cumulusnetworks.pool.ntp.org\n - 1.cumulusnetworks.pool.ntp.org\n - 2.cumulusnetworks.pool.ntp.org\n interfaces:\n 1G:\n 1-5:\n tagged_vlans: [2-4]\n untagged_vlan: 7\n 6:\n untagged_vlan: 5\n```\n\n### Fabrics\n\nA fabric is a collection of common configuration items, usually representing a switch fabric in a single location. However, it can represent whatever you want. Its simply a logical construct.\n\nHere is an example of a fabric object:\n\n```yaml\nfabrics:\n network1:\n credentials:\n username: cumulus\n password: CumulusLinux!\n vlans:\n 1-5:\n 6:\n description: Data\n 30:\n description: Public\n 11-29:\n```\n## Appliances\n\nHere is an example Appliance object. \n\nAppliances are defined by a hyphen separated MAC address. On switches with multiple MAC addresses, the MAC of the out of band management port should be used. Or, if no management port exists, the lowest number switch port.\n\nThis file contains all hardware specific information.\n\n```yaml\nappliances:\n sw1:\n hostname: 10.5.5.33\n role: spine1\n plugin_package: cumulus\n sw2:\n hostname: 10.5.5.34\n role: spine2\n plugin_package: cumulus\n```\n\n## Usage\n\nEtherweaver uses a salt-like syntax:\n\n```bash\netherweaver 'sw1' role.apply --yaml=exampleconf.yaml\n```\n\nThis command will apply the role spine1 to any assigned hardware appliances.\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/graysonhead/etherweaver", "keywords": "", "license": "GPL V3", "maintainer": "", "maintainer_email": "", "name": "etherweaver", "package_url": "https://pypi.org/project/etherweaver/", "platform": "", "project_url": "https://pypi.org/project/etherweaver/", "project_urls": { "Homepage": "https://github.com/graysonhead/etherweaver" }, "release_url": "https://pypi.org/project/etherweaver/0.3.0/", "requires_dist": null, "requires_python": "", "summary": "", "version": "0.3.0" }, "last_serial": 4363042, "releases": { "0.1.1.dev0": [ { "comment_text": "", "digests": { "md5": "be7fff90db81dd023434113135f54b6c", "sha256": "eed36b9349314debb29c0f2c01f37d38f4adc81816e8494ac54dac1f6dfadc55" }, "downloads": -1, "filename": "etherweaver-0.1.1.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "be7fff90db81dd023434113135f54b6c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22111, "upload_time": "2018-08-31T07:58:11", "url": "https://files.pythonhosted.org/packages/a4/53/ac90bddf8006979c6e07190f7a32f41a2b10901600ad39882c6d622689c2/etherweaver-0.1.1.dev0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d52b7995575fc358149836e1451e8195", "sha256": "85c5d9e43459495d46506cdf1bfde5928aab3e7cddd7dfa121e4bd701a2c604f" }, "downloads": -1, "filename": "etherweaver-0.1.1.dev0.tar.gz", "has_sig": false, "md5_digest": "d52b7995575fc358149836e1451e8195", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15699, "upload_time": "2018-09-03T04:46:09", "url": "https://files.pythonhosted.org/packages/e7/f8/f39dccd3ec84d7df81adf398525281c9a431382600f5a1fe7554474fd778/etherweaver-0.1.1.dev0.tar.gz" } ], "0.2.0.dev0": [ { "comment_text": "", "digests": { "md5": "3d704f0fa0bda222d822f14a3fbceabe", "sha256": "42c6afa9ea6d1302c1c88cdccc925a2759bd242bcde8c57f7ee3655ab0aada38" }, "downloads": -1, "filename": "etherweaver-0.2.0.dev0.tar.gz", "has_sig": false, "md5_digest": "3d704f0fa0bda222d822f14a3fbceabe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23273, "upload_time": "2018-09-25T05:09:54", "url": "https://files.pythonhosted.org/packages/26/f1/db7ccb43f3848008442322cb9ad8197a97260d4c8e69d33fc056080079cd/etherweaver-0.2.0.dev0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "e6ea2d5ef09284fbfb060603928c38d3", "sha256": "775f50c7ed2f803ff0bddd7e6cd60824bb333fbb8af71d4a2882321365440b99" }, "downloads": -1, "filename": "etherweaver-0.2.1.tar.gz", "has_sig": false, "md5_digest": "e6ea2d5ef09284fbfb060603928c38d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 67559, "upload_time": "2018-09-27T02:56:36", "url": "https://files.pythonhosted.org/packages/ac/c7/196d40d82c13d04a58e261ebbb9529823833bb76591c8c3e524b77bfe76e/etherweaver-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "28fb046ca9e0090d3f5214e1af91466b", "sha256": "b26a785fb930a30881aa6f7ccede658a396ca769ef0c02553561b6af836cf0d9" }, "downloads": -1, "filename": "etherweaver-0.2.2.tar.gz", "has_sig": false, "md5_digest": "28fb046ca9e0090d3f5214e1af91466b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 70289, "upload_time": "2018-09-27T04:09:33", "url": "https://files.pythonhosted.org/packages/4e/d6/35aadd97327e0625e3afcffc7c1606ed457af056609513dc74bba836907f/etherweaver-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "f0b58d6acf8dc80094e01a36a06b8bc6", "sha256": "79b62855d6f808cc3a7ba3554439f52fc78ef7251d6c27294e19946105f46913" }, "downloads": -1, "filename": "etherweaver-0.2.3.tar.gz", "has_sig": false, "md5_digest": "f0b58d6acf8dc80094e01a36a06b8bc6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56871, "upload_time": "2018-09-29T04:28:46", "url": "https://files.pythonhosted.org/packages/2d/17/1f18ad323f91fd811d43f5b05bbc2a837a6f7b5188ffb4fb2387bac8ae33/etherweaver-0.2.3.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "ae5f83ca1021eb45baa827809fdc311c", "sha256": "0a398c3566bd0f80a1cc9b3eda57b093c1b9368b2da7fcf06d2465b769d126ca" }, "downloads": -1, "filename": "etherweaver-0.3.0.tar.gz", "has_sig": false, "md5_digest": "ae5f83ca1021eb45baa827809fdc311c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49615, "upload_time": "2018-10-11T06:15:53", "url": "https://files.pythonhosted.org/packages/49/a0/067b6e4c497c8ff9a9c88ba2698429d802ea39c828956ec2556602438ef6/etherweaver-0.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ae5f83ca1021eb45baa827809fdc311c", "sha256": "0a398c3566bd0f80a1cc9b3eda57b093c1b9368b2da7fcf06d2465b769d126ca" }, "downloads": -1, "filename": "etherweaver-0.3.0.tar.gz", "has_sig": false, "md5_digest": "ae5f83ca1021eb45baa827809fdc311c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49615, "upload_time": "2018-10-11T06:15:53", "url": "https://files.pythonhosted.org/packages/49/a0/067b6e4c497c8ff9a9c88ba2698429d802ea39c828956ec2556602438ef6/etherweaver-0.3.0.tar.gz" } ] }