{ "info": { "author": "Juergen Brendel", "author_email": "jbrendel@paninetworks.com", "bugtrack_url": null, "classifiers": [ "Environment :: No Input/Output (Daemon)", "Intended Audience :: System Administrators", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Topic :: System :: Clustering", "Topic :: System :: Networking" ], "description": "# VPC-router\n\n## Introduction\n\n### Summary\n\nThe vpc-router implements automatic route failover and backup routes for Amazon\nVPC environments.\n\nvpc-router lets users avoid route table limitations and build large Kubernetes\nclusters with the performance and visibility of native VPC networking.\n\nIt can also be used independently of Kubernetes whenever you need to manage\nroutes, backup routes and route failover in VPC environments.\n\nIt provides a plugin architecture for the easy integration with other cloud\norchestration systems.\n\n### Details\n\nvpc-router is a utility for setting and deleting routes in Amazon EC2 VPC route\ntables and specifically for automatically managing route failover.\n\nEach route is specified by a destination CIDR as well as a list of IP addresses\nof EC2 instances, which are eligible to receive packets for the CIDR. An\ninstance from the list is chosen and a route is set. vpc-router continuously\nmonitors instance health and performs an immediate route failover to another\ninstance in the set in case of a detected instance failure.\n\nRoutes can be configured in different ways, but most commonly, vpc-router takes\nroute configs from storage (a config file, in the future also a KV store) or\nvia HTTP requests. It will make sure that routes in the VPC route table are\nupdated as needed with every detected change to the route config.\n\nBy default, it applies all route updates to all the route tables it can find\nwithin a specified VPC.\n\n### Project origin\n\nThis program was developed for the [Romana project](http://romana.io) to\novercome the limit imposed on VPC route table entries (50 by default), which\nconstricts the size of clusters. Avoiding this limit typically required running\nan overlay network, which does not offer the performance and visibility of\nnative VPC networking. \n\nSome users prefer to run CNI network providers that support more advance\nnetwork policy APIs. However, most CNI pod networks require an overlay when\nclusters are split across Availability Zones (AZs), preventing HA clusters from\ndelivering native VPC network performance. Romana, using vpc-router can build\nCNI pod networks across zones without an overlay.\n\nWhile vpc-router was specifically designed for use with Romana and to take\nadvantage of its topology aware IPAM in these Kubernetes deployment scenarios,\nit does not depend on either project and can also be used stand-alone.\n\nPlugins for integration with different environments are provided. For example,\na [plugin to integrate with Romana](https://github.com/romana/vpcrouter-romana-plugin).\n\nHealth-checks are also implemented via plugins. This means that vpc-router may\neither directly contact EC2 instances to check their health, or it may instead\nconnect to AWS status and alert information, or use the node status provided by\norchestration systems, such as Kubernetes.\n\n## Installation and running\n\nYou can either run vpc-router out of the source directory, or perform a full\ninstall, it can run outside of the VPC or within, on a cluster node or not.\n\n### Installation via pip\n\nThe vpc-router is in the Python Package Index (PyPi). Therefore, the simplest\nway to install it is just:\n\n pip install vpcrouter\n\n### Run vpc-router out of the source directory\n\nIf you wish to work with the vpc-router sources, or [contribute](#contributing)\nto the project, you might want to run vpc-router directly from the sources.\n\nAfter downloading the code, create a virtual environment, activate it and\ninstall the required libraries. You can then use the `vpcrouter-runner.py`\nhelper script to run vpc-router without a full install:\n\n $ git clone git@github.com:paninetworks/vpc-router.git\n $ virtualenv vpcrouter\n $ source vpcrouter/bin/activate\n $ cd vpc-router\n $ pip install -r requirements/deploy.txt\n $ ./vpcrouter-runner.py .....\n\n### Deploying in production environment\n\nPlease see our documentation on how to\n[deploy vpc-router in production](DEPLOY.md), which covers issues such as:\n\n* Performing a proper installation\n* IaM permissions for running on EC2 instances\n* Running vpc-router in a container\n\n## Contributing\n\n### Feedback, bug reports, issue tracker\n\nWe welcome any contributions, bug reports or feedback. Please use our\n[issue tracker](https://github.com/romana/vpc-router/issues) to file bugs or request\nadditional features.\n\n### Developing vpc-router\n\nIn order to develop or extend vpc-router, please read the [developer\ndocumentation](DEVELOPERS.md) for information that might be useful to get you\nstarted.\n\n## Built-in HTTP server to see internal state and config\n\nvpc-router comes with a built-in HTTP server. By default it listens on\n`localhost:33289`. Send a GET request (with a web-browser, curl or wget, or any\nclient you wish) to `http://localhost:33290/` to receive a JSON formatted\noutput with the current internal configuration of vpc-router.\n\nThe listen address and port can be modified with the `-a` (address) and `-p`\n(port) command line options.\n\n\n## Configuration\n\n### The route spec\n\nvpc-router requires a route spec configuration in JSON format. It looks\nsomething like this:\n\n {\n \"10.55.16.0/24\" : [ \"10.33.20.142\" ],\n \"10.66.17.0/24\" : [ \"10.33.20.93\", \"10.33.30.22\" ]\n }\n\nEach entry in the dictionary is keyed on the route's CIDR and then lists a\nnumber of eligible hosts, which can act as the target/router for this route.\nvpc-router randomly chooses an instance from a route's set of hosts.\n\nIf a route to a specified CIDR does not exist in the VPC's route tables, or if\nit does not specify a target that's contained in the specified host list,\nvpc-router creates or updates the route.\n\nThe health of those hosts is continuously monitored. If a host acting as router\nfails, vpc-router immediately switches the route to a different host from the\nset, if an alternative is available and healthy.\n\nNote that vpc-router takes control of the routing tables and removes any\nentries of this type (interfaces on instances as target) if they are not part\nof the route spec.\n\n## Modes of operation\n\nThe modes for the detection of configuration updates are implemented via\nplugins. It is therefore easy to extend vpc-router to integrate with\nvarious orchestration systems. [How to write plugins](PLUGINS.md) is documented\nseparately.\n\nA plugin may either accept a route spec in the format described above, or it\nmay be used to translate other information into the properly formatted\nroute spec.\n\n### Internal mode plugins\n\nOut of the box, plugins for three different configuration update modes are\nincluded in the vpc-router source:\n\n* configfile: Continuosly monitor a route spec configuration file for any\n changes. The config file should contain the route spec in exactly the format\n described above.\n* http: Receive updated route specs via HTTP POSTs. The POSTed data should be\n the route-spec in exactly the format described above.\n* fixedconf: With this a static config can be provided on the command line. It\n is mostly used as a simple example for plugin developers. It does work\n and might be useful in some cases, but is not commonly going to be used in\n production. It translates the command line parameters into a route spec of\n the required format.\n\n### External mode plugins\n\nIt is also possible to write external plugins, which live in their own\nrepository. There is currently one example of this:\n\n* romana: The\n [Romana plugin](https://github.com/romana/vpcrouter-romana-plugin) provides\n seamless integration with the [Romana project](http://romana.io/), for the\n creation of Kubernetes and OpenStack clusters without overlays, just\n natively routed network traffic. The vpc-router with the Romana plugin then\n allows those clusters to span multiple VPC Availability Zones, all while\n using native VPC networking and without being hindered by VPC's 50 route\n limit. The Romana plugin watches the network topology knowledge from Romana\n and translates it into the required route spec for vpc-router.\n\n### Mode 'configfile' \n\nThe following command starts vpc-router as a service daemon in 'configfile'\nmode:\n\n $ vpcrouter -m configfile -f route-spec.conf -r us-east-1 -v vpc-350d6a51\n\nThe used options are:\n\n* `-m configfile` tells vpc-router to take config changes from a specified\n route spec file.\n* `-f` specifies the name of the route spec config file.\n* `-r` specifies the AWS region to which vpc-router should connect. Note: This\n can be omitted if vpc-router is run on an instance in the region.\n* `-v` specifies the VPC for which vpc-router should perform route updates.\n Note: This can be omitted if vpc-router is run on an instance within the VPC.\n\nIn 'configfile' mode the `-f` option must be used to specify the route spec\nconfig file. It must exist when the server is started. The server then\ncontinuously monitors this file for changes.\n\nYou can see an example route spec file in `examples/route_spec_1.conf`.\n\n### Mode 'http'\n\nThe following command starts vpc-router as a service daemon in the 'http'\nmode. It utilizes the built-in HTTP server to listen for new route specs:\n\n $ vpcrouter -m http -r us-east-1 -v vpc-350d6a51\n\nThe used options are:\n\n* `-m http` tells vpc-router to start listening on a certain address and port\nfor HTTP POST requests containing new route specs.\n* `-r` specifies the AWS region to which vpc-router should connect. Note: This\ncan be omitted if vpc-router is run on an instance in the region.\n* `-v` specifies the VPC for which vpc-router should perform route updates.\nNote: This can be omitted if vpc-router is run on an instance within the VPC.\n\nA new route spec can be POSTed to the `/route_spec` URL. The current route spec\ncan be retrieved with a GET to that URL.\n\nFor example:\n\n $ curl -X \"POST\" -H \"Content-type:application/json\" \"http://localhost:33289/route_spec\" -d '{\"10.55.0.0/16\" : [ \"10.33.20.142\" ], \"10.66.17.0/24\" : [ \"10.33.20.93\", \"10.33.30.22\" ]}'\n\n### Mode 'romana'\n\nFor integration with the [Romana project](http://romana.io/), please see the\n[vpc-router Romana plugin](https://github.com/romana/vpcrouter-romana-plugin).\n\n## Continuous monitoring\n\nContinuos monitoring is performed for all hosts listed in the route spec. If an\ninstance does not appear healthy anymore and it is a current target for a route\nthen the route will be automatically updated to point to an alternate target,\nif a healthy one is available.\n\nThe health-check itself is implemented via plugins, which gives vpc-router the\nflexibility to use a wide variety of information to determine whether an EC2\nrouting instance is healthy. By default, it uses the 'icmpecho' plugin, which\nutilizes an ICMPecho ('ping') request to actively check the responsiveness of\ninstances. A 'tcp' plugin, which attempts TCP connection attempts on a\nspecified port, is also provided.\n\nUse the `--health` option to select the health monitor plugin, for example:\n\n $ vpcrouter --health tcp --tcp_check_port 22 --tcp_check_interval 5 ...\n\nor:\n\n $ vpcrouter --health icmpecho --icmp_check_interval 5 ...\n\n### The 'multi' plugin: Combining more than one health monitor plugin\n\nA `multi` plugin is also provided with vpc-router. This plugin allows the\ncombining of multiple, simpler health-monitoring plugins into complex or\nmulti-layered instance health monitoring. Use the `--health` option to select\nthe `multi` plugin. Then use the `--multi_plugins` option to specify the list\nof simple health plugins that should be used simultaneously (a list of column\nseparated health-monitor plugin names). Any additional command line options\nadded by those plugins can then also be specified.\n\nAs an example, let's configure vpc-router to use the `icmpecho` plugin (with a\nmonitoring interval of 2 seconds) as well as the `tcp` plugin, which should\nmonitor port 80.\n\n $ vpcrouter --health multi --multi_plugins icmpecho:tcp \\\n --icmp_check_interval 2 --tcp_check_port 80 ...\n\nAn instance is considered 'failed' if ANY of the specified sub-plugins reports\nthe instance as failed.\n\n### Considering an instance as 'healthy' again\n\nIf a health monitoring plugin reports an instance as 'failed', it will be\nconsidered 'failed' for some amount of time (the exact time depends on the\nplugin, but usually it's 10 times the selected monitoring interval, when using\nthe 'multi' plugin, it will be 20 times the largest interval of the specified\nsub-plugins).\n\nThe health monitoring occasionally attempts to re-check failed instances to see\nif they have recovered. If not, it will report them as failed again.\n\nIf there has not been a 'failed' report about an instance within that time\nwindow, the instance will automatically be considered as 'healthy' again. This\ndoes not mean that routes are failing back to that instance, it just means that\nthis instance becomes eligible to be a target for routes again.\n\n## TODO\n\nA 'todo' list is maintained in the\n[issue tracker](https://github.com/romana/vpc-router/issues) of the project.\n\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/romana/vpc-router/", "keywords": "", "license": "Apache Software License", "maintainer": "", "maintainer_email": "", "name": "vpcrouter", "package_url": "https://pypi.org/project/vpcrouter/", "platform": "", "project_url": "https://pypi.org/project/vpcrouter/", "project_urls": { "Homepage": "http://github.com/romana/vpc-router/" }, "release_url": "https://pypi.org/project/vpcrouter/1.8.11/", "requires_dist": [ "argparse (==1.2.1)", "boto (==2.47.0)", "bottle (==0.12.13)", "ipaddress (>=1.0.17)", "multiping (>=1.0.4)", "netaddr (==0.7.19)", "watchdog (==0.8.3)", "wsgiref (==0.1.2)" ], "requires_python": "", "summary": "Automated route management, backup routes and route failover for Amazon VPC environments", "version": "1.8.11" }, "last_serial": 3604143, "releases": { "1.0.0.post1": [ { "comment_text": "", "digests": { "md5": "446436f4b40f5d850aecad923ce17e51", "sha256": "373609643502e501d93d24446c9102b9faf2ba9cde5cdfc11fac98a7f2679844" }, "downloads": -1, "filename": "vpcrouter-1.0.0.post1-py2-none-any.whl", "has_sig": false, "md5_digest": "446436f4b40f5d850aecad923ce17e51", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 78621, "upload_time": "2018-01-08T20:41:47", "url": "https://files.pythonhosted.org/packages/86/d5/950229c0d6fbbc58e315fa49d921cb1ad9353c38b3301c83493fb73a7a91/vpcrouter-1.0.0.post1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "85ea7f65ea142b18b396d40d941e6991", "sha256": "ed0969421c075e67810a3a084a5bf064e3824277b4fde306afa56a3d915cdebc" }, "downloads": -1, "filename": "vpcrouter-1.0.0.post1.tar.gz", "has_sig": false, "md5_digest": "85ea7f65ea142b18b396d40d941e6991", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63092, "upload_time": "2018-01-08T20:41:49", "url": "https://files.pythonhosted.org/packages/70/19/b3c4f42e45edb34ae437223ccca274181e114e4875fb3155cea137012e81/vpcrouter-1.0.0.post1.tar.gz" } ], "1.6.3": [ { "comment_text": "", "digests": { "md5": "2a17096bb91d9249ce51394f10254f3b", "sha256": "7351e61d2a02fe0e0d4be957f030fcba425ce76b82e3c9e07e390f7ab80f4bc4" }, "downloads": -1, "filename": "vpcrouter-1.6.3-py2-none-any.whl", "has_sig": false, "md5_digest": "2a17096bb91d9249ce51394f10254f3b", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 63732, "upload_time": "2017-08-19T00:22:39", "url": "https://files.pythonhosted.org/packages/2c/7b/fa8d19322c1590e96786aee50ad4b2b9259d94fc8c0160ab8b6fc05e43d8/vpcrouter-1.6.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e5c23de824b105335176af6a0780715f", "sha256": "f44bd5cbe3114065423de5f5b2505f69a417db9214152afe3c73938c5e41a36e" }, "downloads": -1, "filename": "vpcrouter-1.6.3.tar.gz", "has_sig": false, "md5_digest": "e5c23de824b105335176af6a0780715f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44026, "upload_time": "2017-08-19T00:22:41", "url": "https://files.pythonhosted.org/packages/28/d8/785444830104eb66fb40f8705ce69f5a053f34a431d95134771a324d7f1d/vpcrouter-1.6.3.tar.gz" } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "65a7ede1adb792374d9b81543ed0bc94", "sha256": "1782354472e78b6d55e46b6546cbe026b76e272826138a69bfe69fee9b8919bc" }, "downloads": -1, "filename": "vpcrouter-1.7.0-py2-none-any.whl", "has_sig": false, "md5_digest": "65a7ede1adb792374d9b81543ed0bc94", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 69641, "upload_time": "2017-08-22T06:07:40", "url": "https://files.pythonhosted.org/packages/0d/53/285dfe541ef4cef91be80a6201f9f20aa130fe9a1e98d71f9f028687a290/vpcrouter-1.7.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "12cdc754829b16f2b0743ff259024266", "sha256": "d9eea17d5e85424e08060447385166933abe073c986d37802b9a14f3f1c3cd0d" }, "downloads": -1, "filename": "vpcrouter-1.7.0.tar.gz", "has_sig": false, "md5_digest": "12cdc754829b16f2b0743ff259024266", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48145, "upload_time": "2017-08-22T06:07:42", "url": "https://files.pythonhosted.org/packages/de/e3/4f590e3bd86087c9e1a0f7cd9e293870213cd6b598a74725ddba77c2064f/vpcrouter-1.7.0.tar.gz" } ], "1.7.1": [ { "comment_text": "", "digests": { "md5": "749b760068fbe10cfca7c474589d6506", "sha256": "c74017c3e9228f827b081f187d0b88008710a70a5966bc479c5460253cbeca2f" }, "downloads": -1, "filename": "vpcrouter-1.7.1-py2-none-any.whl", "has_sig": false, "md5_digest": "749b760068fbe10cfca7c474589d6506", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 70085, "upload_time": "2017-08-23T01:04:09", "url": "https://files.pythonhosted.org/packages/2a/16/9a3815bc6170ff627500a322f0a2c67466a123f7f44238b207c898e03e1f/vpcrouter-1.7.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e226f2713da208252d98c219cd69dd4b", "sha256": "86acf75c69e90e4eaed57488343d7e6e8d093803ec7749836cc8f63504a62e7d" }, "downloads": -1, "filename": "vpcrouter-1.7.1.tar.gz", "has_sig": false, "md5_digest": "e226f2713da208252d98c219cd69dd4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48568, "upload_time": "2017-08-23T01:04:11", "url": "https://files.pythonhosted.org/packages/83/4e/3edc5739d85baf829ad84c4fd6ed2b3aa870e42f08bb351521163713a919/vpcrouter-1.7.1.tar.gz" } ], "1.7.2": [ { "comment_text": "", "digests": { "md5": "59bb04b42f4ce6e229e19f46e00bf4e6", "sha256": "aa43c8f20b00224816f6a22e3c7e47c1edeebac36349b932f8eda1a7ffe2a697" }, "downloads": -1, "filename": "vpcrouter-1.7.2-py2-none-any.whl", "has_sig": false, "md5_digest": "59bb04b42f4ce6e229e19f46e00bf4e6", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 70204, "upload_time": "2017-08-29T21:53:07", "url": "https://files.pythonhosted.org/packages/43/59/bdfc947db997d83acfca29daec7d93a8a9c79c3b197852cbf8e30aba54e4/vpcrouter-1.7.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ca70ccbc0981b2cefcd0d92c03e42c05", "sha256": "b9f882c31655f9e4ef6d7638fd4d832f21deb722deef0c3d6316ce9eed6e8b98" }, "downloads": -1, "filename": "vpcrouter-1.7.2.tar.gz", "has_sig": false, "md5_digest": "ca70ccbc0981b2cefcd0d92c03e42c05", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48760, "upload_time": "2017-08-29T21:53:09", "url": "https://files.pythonhosted.org/packages/c2/5b/3068990f17dbf3eb984434f8ba16c0a39400d0b380a76e6cf369a38f6a40/vpcrouter-1.7.2.tar.gz" } ], "1.7.3": [ { "comment_text": "", "digests": { "md5": "db1eea278a82b8e6ce9ac802227e31c3", "sha256": "e7d221fb89f32c2bc16e4a2aaeb6ffba5f60e478fec1fcfa04f11a9c8f8d7951" }, "downloads": -1, "filename": "vpcrouter-1.7.3-py2-none-any.whl", "has_sig": false, "md5_digest": "db1eea278a82b8e6ce9ac802227e31c3", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 71719, "upload_time": "2017-08-31T23:38:23", "url": "https://files.pythonhosted.org/packages/e0/87/8638f6b30bf4062c3d355272b476a68446ccc8d4c3580e7b79fb68b72372/vpcrouter-1.7.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c2627bd0765721ad1c207691af1ff841", "sha256": "03b02d6b84f304d2d4e6f0d520109a182f2bb4c0691ae7b5e442b0a6841e8bf1" }, "downloads": -1, "filename": "vpcrouter-1.7.3.tar.gz", "has_sig": false, "md5_digest": "c2627bd0765721ad1c207691af1ff841", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50203, "upload_time": "2017-08-31T23:38:25", "url": "https://files.pythonhosted.org/packages/35/11/ad96c0b846c486d33d2e8ac9f3c6408a243647209d915bb3246c6a90c9cd/vpcrouter-1.7.3.tar.gz" } ], "1.7.4": [ { "comment_text": "", "digests": { "md5": "3a008516a6ea549f350664a9e191f89a", "sha256": "4c92830af632ae1106e1ea100f2b9d05038225e8e2cd8def1118e326bb94b4c7" }, "downloads": -1, "filename": "vpcrouter-1.7.4-py2-none-any.whl", "has_sig": false, "md5_digest": "3a008516a6ea549f350664a9e191f89a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 71723, "upload_time": "2017-08-31T23:57:26", "url": "https://files.pythonhosted.org/packages/fb/4d/62334abe898287ddc1a1731b39ecac33251fb4f8e8c243bdd530fd90df07/vpcrouter-1.7.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2b4a20dadfc8fc0f58aa11b5371439e7", "sha256": "e6f287e9a01d7040fe5f302069acca8c78d893612f86124c77c1497740a49033" }, "downloads": -1, "filename": "vpcrouter-1.7.4.tar.gz", "has_sig": false, "md5_digest": "2b4a20dadfc8fc0f58aa11b5371439e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57356, "upload_time": "2017-08-31T23:57:28", "url": "https://files.pythonhosted.org/packages/2c/14/fdd709d2a871a03395057bc013feb71681df0b2d2fe6edfc794235478e7f/vpcrouter-1.7.4.tar.gz" } ], "1.7.5": [ { "comment_text": "", "digests": { "md5": "6e4e43b85accbaa1e0e6bd2b27320803", "sha256": "b0d51af530f0c38ad70ebd190745f6f0321a7c5193da8f76bccb58b4da5989ce" }, "downloads": -1, "filename": "vpcrouter-1.7.5-py2-none-any.whl", "has_sig": false, "md5_digest": "6e4e43b85accbaa1e0e6bd2b27320803", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 71735, "upload_time": "2017-09-01T01:41:03", "url": "https://files.pythonhosted.org/packages/ca/ed/b8737d5625f06a7126b8804721758eb047c5f14a11beb4d3049cc5211f12/vpcrouter-1.7.5-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2d58f6c3d2b17bf8d47f053c8e7b2fb6", "sha256": "3035acb2a6395689178c22ef3df5d31fa234b27e5bcdef6385a0882cf8b8a67f" }, "downloads": -1, "filename": "vpcrouter-1.7.5.tar.gz", "has_sig": false, "md5_digest": "2d58f6c3d2b17bf8d47f053c8e7b2fb6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57374, "upload_time": "2017-09-01T01:41:05", "url": "https://files.pythonhosted.org/packages/6d/47/c85268e52ce3fc4392b63695ec67c1c9fa70f8a2a12423070c4cb88086c1/vpcrouter-1.7.5.tar.gz" } ], "1.7.6": [ { "comment_text": "", "digests": { "md5": "e1f21c2e566d1d0f46f66b5997fe2a22", "sha256": "e688230abe07b118a964300e4977a3059f8f3b1a45948dac97a044c075e59240" }, "downloads": -1, "filename": "vpcrouter-1.7.6-py2-none-any.whl", "has_sig": false, "md5_digest": "e1f21c2e566d1d0f46f66b5997fe2a22", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 72030, "upload_time": "2017-09-01T03:00:47", "url": "https://files.pythonhosted.org/packages/c1/e0/6581f01c7b92f2b0bd7987569d58dc10377aeb906fd67aa7a9daaabeb148/vpcrouter-1.7.6-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7208e1423e45086fc7009099ac02c483", "sha256": "59d2363bf1885a07712ffc1f7d56d318ab3e0c0493d35e3f2d3636ab6f42f7ee" }, "downloads": -1, "filename": "vpcrouter-1.7.6.tar.gz", "has_sig": false, "md5_digest": "7208e1423e45086fc7009099ac02c483", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57658, "upload_time": "2017-09-01T03:00:49", "url": "https://files.pythonhosted.org/packages/6f/2f/0e858c63e582bc9260457db8eb40ff863e59c82e7a45cba4e936ef7dd7d0/vpcrouter-1.7.6.tar.gz" } ], "1.7.7": [ { "comment_text": "", "digests": { "md5": "1c1748398232b10cdb82cecc170aa367", "sha256": "319376240cee3c0fda23147dd6350dd72abada6cab24cf14d69324815150fcb0" }, "downloads": -1, "filename": "vpcrouter-1.7.7-py2-none-any.whl", "has_sig": false, "md5_digest": "1c1748398232b10cdb82cecc170aa367", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 72036, "upload_time": "2017-09-01T03:12:51", "url": "https://files.pythonhosted.org/packages/48/cc/bdb6487f29c82f88bc2654d6b174f0b3ff3f382b07fef1d791db2e4e9a3b/vpcrouter-1.7.7-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8edb6e84e1f7acacadbb069e549a0f65", "sha256": "558c382d1db1d063c5de2426952464a08d3c9eb00c87f166a6b586e303f674b5" }, "downloads": -1, "filename": "vpcrouter-1.7.7.tar.gz", "has_sig": false, "md5_digest": "8edb6e84e1f7acacadbb069e549a0f65", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57669, "upload_time": "2017-09-01T03:12:55", "url": "https://files.pythonhosted.org/packages/d8/9e/15e9e108c254523a44e60c25e2fc741968c17c0c9cc78e379e5fbd1d2d1a/vpcrouter-1.7.7.tar.gz" } ], "1.8.1": [ { "comment_text": "", "digests": { "md5": "8c64a6d1d46595fed0079ba0c76e65ac", "sha256": "ae93ae6981071d425732148890a000cfcdf904c584147f75d0bb04cafed81b04" }, "downloads": -1, "filename": "vpcrouter-1.8.1-py2-none-any.whl", "has_sig": false, "md5_digest": "8c64a6d1d46595fed0079ba0c76e65ac", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 74049, "upload_time": "2017-09-05T06:30:02", "url": "https://files.pythonhosted.org/packages/58/dc/24834bf36352fd2f8b6928f0091bee7bf316bf765b6503fccd06ee6335c5/vpcrouter-1.8.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d25385d54578dc477647b3e65e85c5e0", "sha256": "e0cfdaa56cd6631b2d9649d4cc213362bac706c5863eda1d6ac60eac916aaf30" }, "downloads": -1, "filename": "vpcrouter-1.8.1.tar.gz", "has_sig": false, "md5_digest": "d25385d54578dc477647b3e65e85c5e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 59500, "upload_time": "2017-09-05T06:30:04", "url": "https://files.pythonhosted.org/packages/72/59/5ae0f4c64aabddfed71980948a33836d955fb3625c382bc0523120526c73/vpcrouter-1.8.1.tar.gz" } ], "1.8.10": [ { "comment_text": "", "digests": { "md5": "5c5393bcafea9df47095bc08fc8b5f5c", "sha256": "cbb8bba345cda3ed60c69179743fc3bae0f21a36467ffce0329a1b84a9ff18b6" }, "downloads": -1, "filename": "vpcrouter-1.8.10-py2-none-any.whl", "has_sig": false, "md5_digest": "5c5393bcafea9df47095bc08fc8b5f5c", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 78650, "upload_time": "2018-02-22T04:00:41", "url": "https://files.pythonhosted.org/packages/53/49/ce96fbf0879f5af36c4c91c089c60efa2e991d18946930be61839da6ddc3/vpcrouter-1.8.10-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f65c1632c7aa10dc96018d948f8e3a92", "sha256": "a62edf0a4f67b1754e0dab776f1a07fdb3bcaa29191d809fe00645c72dbf0d8b" }, "downloads": -1, "filename": "vpcrouter-1.8.10.tar.gz", "has_sig": false, "md5_digest": "f65c1632c7aa10dc96018d948f8e3a92", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63537, "upload_time": "2018-02-22T04:00:43", "url": "https://files.pythonhosted.org/packages/42/7e/0849496a7c4267b22ba8d851d1c8db5e4deb44ac1e1c8e41ebf4f93e2c07/vpcrouter-1.8.10.tar.gz" } ], "1.8.11": [ { "comment_text": "", "digests": { "md5": "a925e591b5ce17f33b05e24a03fc7bab", "sha256": "94d29c6869516790a34c7934f41d2b758f18379b100a251ef32cb83b91e35126" }, "downloads": -1, "filename": "vpcrouter-1.8.11-py2-none-any.whl", "has_sig": false, "md5_digest": "a925e591b5ce17f33b05e24a03fc7bab", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 78653, "upload_time": "2018-02-22T04:15:44", "url": "https://files.pythonhosted.org/packages/ef/4e/d4ad27528bb6050807be53eb6b52c744059ad10e48e791a06c58acb47ec7/vpcrouter-1.8.11-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1073434252754e46dbe3e5408dea2366", "sha256": "5d9d82491dd142aced98fd0aae79cc1266415ee6c6ce9cdcd82005f379ed29eb" }, "downloads": -1, "filename": "vpcrouter-1.8.11.tar.gz", "has_sig": false, "md5_digest": "1073434252754e46dbe3e5408dea2366", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63517, "upload_time": "2018-02-22T04:15:46", "url": "https://files.pythonhosted.org/packages/09/82/06feed8d35e17805478b545c78e14e7874197f8d7c22f78ba5e476f49160/vpcrouter-1.8.11.tar.gz" } ], "1.8.2": [ { "comment_text": "", "digests": { "md5": "beee639b44793cacc802943a8dd5c35e", "sha256": "2a367e76db7cab52c91872c9163fa642a561ff7d4008482f382fa6decc394bc2" }, "downloads": -1, "filename": "vpcrouter-1.8.2-py2-none-any.whl", "has_sig": false, "md5_digest": "beee639b44793cacc802943a8dd5c35e", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 74070, "upload_time": "2017-09-05T06:44:08", "url": "https://files.pythonhosted.org/packages/78/e0/a6c76a1b3077b03c209bdc3b027631743e69ab7132dca3e813a76e15f4d5/vpcrouter-1.8.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0fc520e4306776446dc86a88f51bcce4", "sha256": "78fcfd8d4b9faa53c15c706a12e30f4e9227feb866a1563834e6f4ba3efe9c2e" }, "downloads": -1, "filename": "vpcrouter-1.8.2.tar.gz", "has_sig": false, "md5_digest": "0fc520e4306776446dc86a88f51bcce4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 59502, "upload_time": "2017-09-05T06:44:10", "url": "https://files.pythonhosted.org/packages/42/89/bd1d0a321cee51402b44ec446116847ee36ad925acaa81130f9764052b70/vpcrouter-1.8.2.tar.gz" } ], "1.8.3": [ { "comment_text": "", "digests": { "md5": "0758f9ae432a243dc5a6bb6d3580a671", "sha256": "c78558e5e2ba2ab2bfff2cf5262d8a90fc62804ce0875f18f08460aea78218de" }, "downloads": -1, "filename": "vpcrouter-1.8.3-py2-none-any.whl", "has_sig": false, "md5_digest": "0758f9ae432a243dc5a6bb6d3580a671", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 76015, "upload_time": "2017-09-10T22:35:27", "url": "https://files.pythonhosted.org/packages/50/01/91cee409bbc4c617716fa0ca64424306e1ef2f91bb9c00946facf9758284/vpcrouter-1.8.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "66de6ef049053ac3d529ac5314fe10a7", "sha256": "72bef59a0966c21ed44b40efa43e551cb58c9122804cadec86a538911bd79ee8" }, "downloads": -1, "filename": "vpcrouter-1.8.3.tar.gz", "has_sig": false, "md5_digest": "66de6ef049053ac3d529ac5314fe10a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 61501, "upload_time": "2017-09-10T22:35:30", "url": "https://files.pythonhosted.org/packages/e0/45/13e3a3159f284734a1afdcf006d5a491c602baada2ea655f95f738672ca2/vpcrouter-1.8.3.tar.gz" } ], "1.8.4": [ { "comment_text": "", "digests": { "md5": "8c6fd42bd2004270951fe1dc13c74150", "sha256": "4e0ae8a9951ddee3fbe9704721a598a4db84d34ebc7ef1553e0a9c563759aff8" }, "downloads": -1, "filename": "vpcrouter-1.8.4-py2-none-any.whl", "has_sig": false, "md5_digest": "8c6fd42bd2004270951fe1dc13c74150", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 76153, "upload_time": "2017-09-11T04:10:51", "url": "https://files.pythonhosted.org/packages/1c/f7/fd5f111db3166caf132c6bb2d81a4c92b6e1fc63d01c07ceaa01229662d0/vpcrouter-1.8.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7e432466df2f6a9d54e8fd80c151e748", "sha256": "70344088f02e662d22986d5263fd3cd85911e8935fc7ccb57a2cfe270a9bb24d" }, "downloads": -1, "filename": "vpcrouter-1.8.4.tar.gz", "has_sig": false, "md5_digest": "7e432466df2f6a9d54e8fd80c151e748", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 61643, "upload_time": "2017-09-11T04:10:55", "url": "https://files.pythonhosted.org/packages/a9/0b/fbd2ba5a3a23ee7a4e345b9298ad07274e364f7b80ad9015810ad8184351/vpcrouter-1.8.4.tar.gz" } ], "1.8.5": [ { "comment_text": "", "digests": { "md5": "ef7b59d24ab07f94ebf3d0fe70eab4ee", "sha256": "5c510491379c842c5aa672d42c90ffeaa03b93fffcee6320bb100963d2ef3b48" }, "downloads": -1, "filename": "vpcrouter-1.8.5-py2-none-any.whl", "has_sig": false, "md5_digest": "ef7b59d24ab07f94ebf3d0fe70eab4ee", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 77626, "upload_time": "2017-12-14T01:12:39", "url": "https://files.pythonhosted.org/packages/b1/04/dd08435ebad1cea057747fa5f3206450ee4c6c519760fd2dcfb20756d999/vpcrouter-1.8.5-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "88bfac83d83197ec104841c2adc7c19b", "sha256": "bc5646b07d1f1a6bf351c74e1296a5ab81e8662e62883f53caa229da246bf261" }, "downloads": -1, "filename": "vpcrouter-1.8.5.tar.gz", "has_sig": false, "md5_digest": "88bfac83d83197ec104841c2adc7c19b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 62213, "upload_time": "2017-12-14T01:12:41", "url": "https://files.pythonhosted.org/packages/25/88/3171e0936b3502b435812ea09d755bef6ad30a645a25a5af63deeb9f09cc/vpcrouter-1.8.5.tar.gz" } ], "1.8.7": [ { "comment_text": "", "digests": { "md5": "67ab0ca82fd2b917af064595b7885f65", "sha256": "ff08ec71a8067496e549cf986c947e8970e2e0fa6f394699802b18de56e632a2" }, "downloads": -1, "filename": "vpcrouter-1.8.7-py2-none-any.whl", "has_sig": false, "md5_digest": "67ab0ca82fd2b917af064595b7885f65", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 78486, "upload_time": "2018-01-08T07:34:32", "url": "https://files.pythonhosted.org/packages/49/68/cba81ff0928bfae8b69b0a778a7c55c51e366d90d629d34d795dc3ab4e57/vpcrouter-1.8.7-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "db822dcef0f909dfa2c77c3303c028c1", "sha256": "1c54772c9322561517d2e5ac1fbb7d1c35312fc9785931cd640e9bcfe8304383" }, "downloads": -1, "filename": "vpcrouter-1.8.7.tar.gz", "has_sig": false, "md5_digest": "db822dcef0f909dfa2c77c3303c028c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63046, "upload_time": "2018-01-08T07:34:34", "url": "https://files.pythonhosted.org/packages/e2/47/d17aae28a27971e3dc51368c92b0696c5fc07d5e84db42f2192949aa30b3/vpcrouter-1.8.7.tar.gz" } ], "1.8.8": [ { "comment_text": "", "digests": { "md5": "9f348f630ce2693a39750a12ead5b34d", "sha256": "0c0b67a8d73fc76dd3b664e64240366e7dd25b5f5434f8156f46ee121c999341" }, "downloads": -1, "filename": "vpcrouter-1.8.8-py2-none-any.whl", "has_sig": false, "md5_digest": "9f348f630ce2693a39750a12ead5b34d", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 78491, "upload_time": "2018-01-08T20:58:06", "url": "https://files.pythonhosted.org/packages/0b/d1/4e96b7dcc8c9a13566845e03decb2f6aa9e3ca54b864badbd8193dd55fdf/vpcrouter-1.8.8-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9faa8d2f2bc2371d70e168660f042a82", "sha256": "9e711abfe755f61d53dca40953e50b1b56d6150d47a98296557429d946936c70" }, "downloads": -1, "filename": "vpcrouter-1.8.8.tar.gz", "has_sig": false, "md5_digest": "9faa8d2f2bc2371d70e168660f042a82", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63067, "upload_time": "2018-01-08T20:58:08", "url": "https://files.pythonhosted.org/packages/f8/a1/4aabb9609373791c35d8da9c2a187fa156f31666b8502a0f24c4cade9a81/vpcrouter-1.8.8.tar.gz" } ], "1.8.9": [ { "comment_text": "", "digests": { "md5": "eff830d1988d406f39554dd620d27a30", "sha256": "fec96051c7d62fbc06e5a6054d9b794371be4ee33a8198d6b9170a73b44a0405" }, "downloads": -1, "filename": "vpcrouter-1.8.9-py2-none-any.whl", "has_sig": false, "md5_digest": "eff830d1988d406f39554dd620d27a30", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 78509, "upload_time": "2018-01-08T22:44:01", "url": "https://files.pythonhosted.org/packages/05/ca/c7f17c3efd8a5c66e48c4e44b75bb060c0bd7861fed33de51420b193dc8d/vpcrouter-1.8.9-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ab519e437378221279c4d637c5d1517c", "sha256": "5e2acd660d2229eed86b1d2fa6146935b5037c625d2a39ff5667fb8202e4dc62" }, "downloads": -1, "filename": "vpcrouter-1.8.9.tar.gz", "has_sig": false, "md5_digest": "ab519e437378221279c4d637c5d1517c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63440, "upload_time": "2018-01-08T22:44:03", "url": "https://files.pythonhosted.org/packages/47/13/36564423939a1d1b1eca93d0e28654c8165baabc3a31f526afa8b843a26f/vpcrouter-1.8.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a925e591b5ce17f33b05e24a03fc7bab", "sha256": "94d29c6869516790a34c7934f41d2b758f18379b100a251ef32cb83b91e35126" }, "downloads": -1, "filename": "vpcrouter-1.8.11-py2-none-any.whl", "has_sig": false, "md5_digest": "a925e591b5ce17f33b05e24a03fc7bab", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 78653, "upload_time": "2018-02-22T04:15:44", "url": "https://files.pythonhosted.org/packages/ef/4e/d4ad27528bb6050807be53eb6b52c744059ad10e48e791a06c58acb47ec7/vpcrouter-1.8.11-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1073434252754e46dbe3e5408dea2366", "sha256": "5d9d82491dd142aced98fd0aae79cc1266415ee6c6ce9cdcd82005f379ed29eb" }, "downloads": -1, "filename": "vpcrouter-1.8.11.tar.gz", "has_sig": false, "md5_digest": "1073434252754e46dbe3e5408dea2366", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63517, "upload_time": "2018-02-22T04:15:46", "url": "https://files.pythonhosted.org/packages/09/82/06feed8d35e17805478b545c78e14e7874197f8d7c22f78ba5e476f49160/vpcrouter-1.8.11.tar.gz" } ] }