{ "info": { "author": "Kevin Corbin", "author_email": "kecorbin@cisco.com", "bugtrack_url": null, "classifiers": [], "description": "virlutils\n=========\n\n|Build Status| |Coverage Status| |PyPI version|\n\nA collection of utilities for interacting with `Cisco\nVIRL `__\n\nvirl up\n-------\n\n``virl`` is a devops style cli which supports the most common VIRL\noperations. Adding new ones is easy\u2026\n\n::\n\nUsage: virl [OPTIONS] COMMAND [ARGS]...\n\nOptions:\n --help Show this message and exit.\n\nCommands:\n console console for node\n down stop a virl simulation\n flavors Manage VIRL Flavors Attributes\n generate generate inv file for various tools\n id gets sim id for local environment\n logs Retrieves log information for the provided...\n ls lists running simulations in the current...\n nodes get nodes for sim_name\n pull pull topology.virl from repo\n save save simulation to local virl file\n search lists virl topologies available via github\n ssh ssh to a node\n start start a node\n stop stop a node\n swagger manage local swagger ui server\n telnet telnet to a node\n up start a virl simulation\n use use virl simulation launched elsewhere\n uwm opens UWM for the sim\n version version information\n viz opens live visualization for the sim\n\n\n.. raw:: html\n\n \n\n- `Installation <#installation>`__\n- `Configuration <#configuration>`__\n- `Usage / Workflows <#usage--workflows>`__\n- `Development <#local-development>`__\n\n.. raw:: html\n\n \n\nInstallation\n------------\n\n1. Clone this repo\n\n::\n\n git clone https://github.com/CiscoDevNet/virlutils\n\n2. Install\n\nWith Pip\n~~~~~~~~\n\n::\n\n pip install virlutils\n\nClone & Install\n~~~~~~~~~~~~~~~\n\n::\n\n git clone https://github.com/CiscoDevNet/virlutils\n cd virlutils\n virtualenv venv && source venv/bin/activate\n python setup.py install\n\nConfiguration\n-------------\n\n| There really isn\u2019t much to configure, just set your VIRL credentials\n up.\n| There are a few different ways to accomplish this, pick whichever one\n works best for you, the options listed below are in the ``preferred``\n order.\n\n.virlrc in working directory\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nAdd a .virlrc to the working directory, this will always be checked\nfirst and is useful when you want to override one or more parameters for\na particular project directory.\n\nThe contents would look something like this.\n\n::\n\n VIRL_HOST=specialvirlserver.foo.com\n\nenvironment variables\n~~~~~~~~~~~~~~~~~~~~~\n\nYou can also add them as environment variables. This is useful if you\nwant to override the global VIRL settings.\n\n::\n\n export VIRL_HOST=1.1.1.1\n export VIRL_USERNAME=guest\n export VIRL_PASSWORD=guest\n\n.virlrc in your home directory\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nConfigure VIRL credentials globally by putting them in ~/.virlrc the\nformatting\n\n::\n\n VIRL_USERNAME=netadmins\n VIRL_PASSWORD=cancodetoo!\n\nWhy so many choices??!?!\n~~~~~~~~~~~~~~~~~~~~~~~~\n\nUnderstanding the precedence allows you to do some pretty cool things.\n\nAssume the following directory structure\u2026\n\n::\n\n .\n \u251c\u2500\u2500 dev\n \u2502\u00a0\u00a0 \u251c\u2500\u2500 .virlrc\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 topology.virl\n \u251c\u2500\u2500 prod\n \u2502\u00a0\u00a0 \u251c\u2500\u2500 .virlrc\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 topology.virl\n \u2514\u2500\u2500 test\n \u251c\u2500\u2500 .virlrc\n \u2514\u2500\u2500 topology.virl\n\nThis allows three major benefits.\n\n1. you can easily use different credentials/servers for various\n environments\n2. you can specify environment specific details into your .virl files if\n you need to. we find this most useful in the context of out-of-band\n management networks/gateways and such.\n3. you have a badass workflow..\n\n::\n\n (netdevops-demo) \u279c dev git:(test) \u2717 virl ls\n Running Simulations\n \u2552\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2555\n \u2502 Simulation \u2502 Status \u2502 Launched \u2502 Expires \u2502\n \u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n \u2558\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255b\n (netdevops-demo) \u279c dev git:(test) \u2717 cd ../test\n (netdevops-demo) \u279c test git:(test) \u2717 virl ls\n Running Simulations\n \u2552\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2555\n \u2502 Simulation \u2502 Status \u2502 Launched \u2502 Expires \u2502\n \u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n \u2502 test_default_hfMQHh \u2502 ACTIVE \u2502 2018-03-18T06:23:05.607199 \u2502 \u2502\n \u2558\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255b\n (netdevops-demo) \u279c test git:(test) \u2717 cd ../prod\n (netdevops-demo) \u279c prod git:(test) \u2717 virl ls\n Running Simulations\n \u2552\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2555\n \u2502 Simulation \u2502 Status \u2502 Launched \u2502 Expires \u2502\n \u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n \u2502 prod_default_jbdKOW \u2502 ACTIVE \u2502 2018-03-18T06:18:04.635601 \u2502 \u2502\n \u2558\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255b\n\nUsage / Workflows\n-----------------\n\nFind and import VIRL files\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nA collection of topologies is being maintained at\nhttps://github.com/virlfiles\n\nThese repos can be searched from the command line.\n\n::\n\n $ virl search ios\n Displaying 1 Results For ios\n \u2552\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2555\n \u2502 Name \u2502 Stars \u2502 Description \u2502\n \u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n \u2502 virlfiles/2-ios-router \u2502 0 \u2502 \u2502\n \u2558\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255b\n\nOnce you find an intersting topology, you can either ``pull`` the\ntopology into your current environment or launch it directly\n\npull topology to local directory (as topology.virl)\n\n::\n\n virl pull virlfiles/2-ios-router\n\nlaunch the topology directly using ``virl up``\n\n::\n\n virl up virlfiles/2-ios-router\n\nBasic Workflow\n~~~~~~~~~~~~~~\n\nin the absence of better documentation, here\u2019s a sample workflow\n\n::\n\n (venv) KECORBIN-M-90Y9:virl_cli kecorbin$ virl ls\n\n Here is a list of all the running nodes\n\n \u2552\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2555\n \u2502 Simulation \u2502 Status \u2502 Launched \u2502 Expires \u2502\n \u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n \u2502 topology-CoC73j \u2502 ACTIVE \u2502 2017-12-02T14:44:29.209647 \u2502 \u2502\n \u2558\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255b\n (venv) KECORBIN-M-90Y9:virl_cli kecorbin$ virl up\n Launching Simulation from topology.virl\n virl_cli-GnMIWY\n\n\n (venv) KECORBIN-M-90Y9:virl_cli kecorbin$ virl ls\n\n Here is a list of all the running nodes\n\n \u2552\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2555\n \u2502 Simulation \u2502 Status \u2502 Launched \u2502 Expires \u2502\n \u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n \u2502 topology-CoC73j \u2502 ACTIVE \u2502 2017-12-02T14:44:29.209647 \u2502 \u2502\n \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n \u2502 virl_cli-GnMIWY \u2502 ACTIVE \u2502 2017-12-08T07:35:46.444588 \u2502 \u2502\n \u2558\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255b\n\n\n (venv) KECORBIN-M-90Y9:virl_cli kecorbin$ virl nodes virl_cli-GnMIWY\n\n Here is a list of all the running nodes\n\n \u2552\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2555\n \u2502 Node \u2502 Type \u2502 State \u2502 Reachable \u2502 management-protocol \u2502\n \u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n \u2502 iosv-2 \u2502 IOSv \u2502 BUILDING \u2502 False \u2502 telnet \u2502\n \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n \u2502 ~mgmt-lxc \u2502 mgmt-lxc \u2502 ACTIVE \u2502 True \u2502 ssh \u2502\n \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n \u2502 iosv-1 \u2502 IOSv \u2502 ACTIVE \u2502 False \u2502 telnet \u2502\n \u2558\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255b\n\n\n (venv) KECORBIN-M-90Y9:virl_cli kecorbin$ virl console virl_cli-GnMIWY iosv-1\n iosv-1\n Attempting to connect to console of iosv-1\n Trying 10.94.140.41...\n Connected to mm-c1-6620.cisco.com.\n Escape character is '^]'.\n\n [OK] (elapsed time was 9 seconds)\n\n Building configuration...\n\n telnet> quit\n Connection closed.\n\n\n (venv) KECORBIN-M-90Y9:virl_cli kecorbin$ virl down virl_cli-GnMIWY\n Shutting Down Simulation virl_cli-GnMIWY.....SUCCESS\n (venv) KECORBIN-M-90Y9:virl_cli kecorbin$ virl ls\n\n Here is a list of all the running nodes\n\n \u2552\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2555\n \u2502 Simulation \u2502 Status \u2502 Launched \u2502 Expires \u2502\n \u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n \u2502 topology-CoC73j \u2502 ACTIVE \u2502 2017-12-02T14:44:29.209647 \u2502 \u2502\n \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n \u2502 virl_cli-GnMIWY \u2502 STOP \u2502 2017-12-08T07:35:46.444588 \u2502 \u2502\n \u2558\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255b\n\n (venv) KECORBIN-M-90Y9:virl_cli kecorbin$ virl ls\n\n Here is a list of all the running nodes\n\n \u2552\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2564\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2555\n \u2502 Simulation \u2502 Status \u2502 Launched \u2502 Expires \u2502\n \u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n \u2502 topology-CoC73j \u2502 ACTIVE \u2502 2017-12-02T14:44:29.209647 \u2502 \u2502\n \u2558\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2567\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255b\n\nLocalization\n~~~~~~~~~~~~\n\nvirlutils provides a handy way of maintaining portability across\nmultiple VIRL backend servers. Any configuration that is stored in your\n``topology.virl`` file can make use of some special tags which will be\nsubstituted at launch (``virl up``) for parameters unique to the virl\nhost.\n\nCurrently the following tags are supported:\n\n- {{ gateway }} - will be replaced with the default gateway of the\n ``flat`` network\n- {{ flat1_gateway }} - will be replaced with the gateway IP address of\n the ``flat1`` network\n- {{ dns_server }} - replaced with the dns_server configured on the\n VIRL host\n\n**NOTE:** these tags must be copied exactly (including surrounding\nbraces+spaces)\n\nInventory Generation\n~~~~~~~~~~~~~~~~~~~~\n\nvirlutils will generate inventories for various management systems\n\npyATS Testbed Generation\n^^^^^^^^^^^^^^^^^^^^^^^^\n\nquickly turn your simulations into a testbed file that can be used for\npyATS/Genie\n\n::\n\n virl generate pyats\n\nAnsible Inventory Generation\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nquickly turn your simulations into an inventory file that can be used to\nrun your playbooks against. Both INI and YAML(default) formats are\nsupported by the tool.\n\n::\n\n Usage: virl generate ansible [OPTIONS] [ENV]\n\n generate ansible inventory\n\n Options:\n -o, --output TEXT output File name\n --style [ini|yaml] output format (default is yaml)\n --help Show this message and exit.\n\nThe ansible group membership can be controlled by adding additional\nextensions to your VIRL files.\n\n::\n\n \n \n mygroup\n \n \n\nwould result in the following inventory entry\n\n::\n\n all:\n children:\n mygroup:\n hosts:\n router1:\n ansible_host: 172.16.252.6\n\n**NOTE:** if the ansible_group key is not specified for a node, that\nnode will not be included during inventory generation.\n\nCisco Network Services Orchestrator\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nYou can add/update Network Services Orchestrator with your VIRL\nsimulation.\n\nUsage\n\n::\n\n virl generate nso [OPTIONS] [ENV]\n\n generate nso inventory\n\n Options:\n -o, --output TEXT just dump the payload to file without sending\n --syncfrom / --no-syncfrom Perform sync-from after updating devices\n --syncto / --no-syncto Perform sync-to afgter updating devices\n --help Show this message and exit.\n\noutput\n\n::\n\n Updating NSO....\n Enter NSO IP/Hostname: localhost\n Enter NSO username: admin\n Enter NSO password:\n Successfully added VIRL devices to NSO\n\n**NOTE**: NSO environment is also attempted to be determined using the\nfollowing environment variables\n\n- NSO_HOST\n- NSO_USERNAME\n- NSO_PASSWORD\n\nNSO Configuration Example\n\n::\n\n export NSO_HOST=localhost\n export NSO_USERNAME=admin\n export NSO_PASSWORD=admin\n\nTab Completions\n^^^^^^^^^^^^^^^\n\n::\n\n \u279c test git:(test) virl l\n logs ls\n\nYou can activate VIRL autocompletions by executing the following command\n\n::\n\n eval \"$(_VIRL_COMPLETE=source virl)\"\n\nzsh users may need to run the following prior\n\n::\n\n autoload bashcompinit\n bashcompinit\n\nLocal Development\n-----------------\n\nIf you have an idea for a feature you would like to see, we gladly\naccept pull requests. To get started developing, simply run the\nfollowing..\n\n::\n\n git clone https://github.com/CiscoDevNet/virlutils\n cd virlutils\n python setup.py develop\n\nLinting\n~~~~~~~\n\nWe use flake 8 to lint our code. Please keep the repository clean by\nrunning:\n\n::\n\n flake8\n\nTesting\n~~~~~~~\n\nWe have some testing implemented, but would love to have better\ncoverage. If you add a feature, or just feel like writing tests please\nupdate the appropriate files in the ``tests`` folder.\n\nTo run the tests in the ``tests`` folder, you can simply run\n``make test`` from the project root.\n\n.. |Build Status| image:: https://travis-ci.org/CiscoDevNet/virlutils.svg?branch=master\n :target: https://travis-ci.org/CiscoDevNet/virlutils\n.. |Coverage Status| image:: https://coveralls.io/repos/github/CiscoDevNet/virlutils/badge.svg?branch=master\n :target: https://coveralls.io/github/CiscoDevNet/virlutils?branch=master\n.. |PyPI version| image:: https://badge.fury.io/py/virlutils.svg\n :target: https://badge.fury.io/py/virlutils\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/CiscoDevNet/virlutils", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "virlutils", "package_url": "https://pypi.org/project/virlutils/", "platform": "", "project_url": "https://pypi.org/project/virlutils/", "project_urls": { "Homepage": "https://github.com/CiscoDevNet/virlutils" }, "release_url": "https://pypi.org/project/virlutils/0.8.8/", "requires_dist": null, "requires_python": "", "summary": "A collection of utilities for interacting with Cisco VIRL", "version": "0.8.8" }, "last_serial": 5262503, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "06ad38b1ee732867fa5bcc53164a03a7", "sha256": "21428e518261c175cf3357af2265de43f1c68990479e8bfaeecd51413934e67c" }, "downloads": -1, "filename": "virlutils-0.1.tar.gz", "has_sig": false, "md5_digest": "06ad38b1ee732867fa5bcc53164a03a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11187, "upload_time": "2017-12-13T21:22:39", "url": "https://files.pythonhosted.org/packages/c7/2b/d3c1cbeb4d04640ec427dfe935f46e4333a058f974c45a0aea988d428e5e/virlutils-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "a1960dd2b1ab05748566012b10a9fd17", "sha256": "d91ccb00a629ecdc0a64c9719180d56297da6383f7dc3baf050ca44f391ea34d" }, "downloads": -1, "filename": "virlutils-0.2.tar.gz", "has_sig": false, "md5_digest": "a1960dd2b1ab05748566012b10a9fd17", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10690, "upload_time": "2017-12-13T22:59:27", "url": "https://files.pythonhosted.org/packages/4e/96/0d721be57c4182eceb554fbaa6b8f17ffbc8b3ab184f71fbef75cfa7ca80/virlutils-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "a7154a14170593908ee1622ed2062eb4", "sha256": "83498b123440398c080f42d180e5de22a463e5591e8bd59fd6cc822f10493ea9" }, "downloads": -1, "filename": "virlutils-0.3.tar.gz", "has_sig": false, "md5_digest": "a7154a14170593908ee1622ed2062eb4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11977, "upload_time": "2017-12-14T16:30:25", "url": "https://files.pythonhosted.org/packages/45/a5/b5af81293b17468c9c5f53a0a34cdce93ab612b179974144888a28af0733/virlutils-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "0698d71f282faf963f4e9c249af71ba3", "sha256": "5e4f0c1b15f78b115f3b1f7991e12d339100cc48b63c52739d0a543aba256c71" }, "downloads": -1, "filename": "virlutils-0.4.tar.gz", "has_sig": false, "md5_digest": "0698d71f282faf963f4e9c249af71ba3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15758, "upload_time": "2018-03-19T15:17:38", "url": "https://files.pythonhosted.org/packages/e0/a4/5fd4d1820dd5a12b3974255e17637997b6e781bdc6ac7c1a96465987326a/virlutils-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "1713be44baadb6843860987e1e71c3f0", "sha256": "36ac98d42bf7bce6b5e8c7dd638053a2dbc0ea89cc5f92acbcde264af5605b65" }, "downloads": -1, "filename": "virlutils-0.5.tar.gz", "has_sig": false, "md5_digest": "1713be44baadb6843860987e1e71c3f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16292, "upload_time": "2018-03-26T19:32:27", "url": "https://files.pythonhosted.org/packages/cd/4b/636c67f2c785544384cb4d703d4e9fc2ee585b4ba423863bdc20d90ca2f5/virlutils-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "f82957fa650021d137cc39424bd93a93", "sha256": "b838207583ec1a7d14418fd0f13c245b6bf2135bb5c14096339fd80e62d1a329" }, "downloads": -1, "filename": "virlutils-0.6.tar.gz", "has_sig": false, "md5_digest": "f82957fa650021d137cc39424bd93a93", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4576452, "upload_time": "2018-04-17T20:24:11", "url": "https://files.pythonhosted.org/packages/ce/78/7fddd0ab7590de3346f8ac220e1e0454044a63565a5caf33a06ae66e4252/virlutils-0.6.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "8739c6de4583f87f1481e5e5ea68565e", "sha256": "0285cbac567b868378c9dc131009b7b176be48091e34b73519696f64e9e29ba2" }, "downloads": -1, "filename": "virlutils-0.6.2.tar.gz", "has_sig": false, "md5_digest": "8739c6de4583f87f1481e5e5ea68565e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4576488, "upload_time": "2018-04-17T20:36:39", "url": "https://files.pythonhosted.org/packages/a3/a7/8d6fd75ce7830dd063ceb09d9b4da48b36e134e064becbb9b5ac6eee3caa/virlutils-0.6.2.tar.gz" } ], "0.6.3": [ { "comment_text": "", "digests": { "md5": "ae81034103e12d7923a534e6f0585787", "sha256": "4bc71696eafd2faf96afcab07386fdb18855f8a5272f9f89825a12ff2bb4f679" }, "downloads": -1, "filename": "virlutils-0.6.3.tar.gz", "has_sig": false, "md5_digest": "ae81034103e12d7923a534e6f0585787", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4583949, "upload_time": "2018-04-20T06:30:30", "url": "https://files.pythonhosted.org/packages/68/8b/cc1bdf58333e22c6f99d4a78b3f439695364402ecd5d3aea84ec5186ab46/virlutils-0.6.3.tar.gz" } ], "0.6.4": [ { "comment_text": "", "digests": { "md5": "2e683876caccd93daf5a7988997f84c7", "sha256": "a9523c0313a9666f263022c92b70a3dfde82c2dcdc489c92fc8cb3bc7bccf77a" }, "downloads": -1, "filename": "virlutils-0.6.4.tar.gz", "has_sig": false, "md5_digest": "2e683876caccd93daf5a7988997f84c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4583952, "upload_time": "2018-04-20T06:36:58", "url": "https://files.pythonhosted.org/packages/cc/d2/b3186aef43648774754deb952f37276dab23b62462d51036775405cc23a6/virlutils-0.6.4.tar.gz" } ], "0.6.5": [ { "comment_text": "", "digests": { "md5": "4b518930791c09bf5bd235f6e1fc641d", "sha256": "a2c9b4c818d2041431c56d938fa2643bc89ed9b1e19875258accf616eb85b5e2" }, "downloads": -1, "filename": "virlutils-0.6.5.tar.gz", "has_sig": false, "md5_digest": "4b518930791c09bf5bd235f6e1fc641d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4583948, "upload_time": "2018-04-27T04:44:35", "url": "https://files.pythonhosted.org/packages/fe/ed/d051633d8b68a95b5443a7301ec965b30f67cf23b5e4786b9ec02518445e/virlutils-0.6.5.tar.gz" } ], "0.6a0": [ { "comment_text": "", "digests": { "md5": "ec0574d0453822fb56f0851bea9523b3", "sha256": "6161c17204d161bc652b7fcc0e2708d9c72b236a8aee115c9e6fca81bff349e5" }, "downloads": -1, "filename": "virlutils-0.6a0.tar.gz", "has_sig": false, "md5_digest": "ec0574d0453822fb56f0851bea9523b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4576490, "upload_time": "2018-04-17T20:30:54", "url": "https://files.pythonhosted.org/packages/9c/23/23534ee660bf505d51a2f7446a1fa21bd0eb5a82a322d077137a14aa7ce3/virlutils-0.6a0.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "16bc257ba89a8624e6f21b7435d0f0b8", "sha256": "42c74ea49ac889ef1d088b828dc7b99aa272c773704e950aec800cae33917481" }, "downloads": -1, "filename": "virlutils-0.7.tar.gz", "has_sig": false, "md5_digest": "16bc257ba89a8624e6f21b7435d0f0b8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4584264, "upload_time": "2018-05-31T03:02:41", "url": "https://files.pythonhosted.org/packages/08/63/09907e5c9d01d46b12f4652557e34c1d698a0acf0b1518f502747990f50f/virlutils-0.7.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "19e45d75d0797073866c58d1ae7e326b", "sha256": "45829fc842c7826fb50005765fe9f966635012f2272f82de61164afdff8c0705" }, "downloads": -1, "filename": "virlutils-0.8.tar.gz", "has_sig": false, "md5_digest": "19e45d75d0797073866c58d1ae7e326b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4584720, "upload_time": "2018-05-31T03:05:35", "url": "https://files.pythonhosted.org/packages/83/b1/b90bf0c798ef1c3aaa6db4c7d0392a9dad5746ef1df469d3e39a370c9a81/virlutils-0.8.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "c765488db662380d9482b027556c79f5", "sha256": "d69b5d663a2a589dd55d145c74a33ef64c67d3030a259b4979440fba27bf5ea7" }, "downloads": -1, "filename": "virlutils-0.8.1.tar.gz", "has_sig": false, "md5_digest": "c765488db662380d9482b027556c79f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4584926, "upload_time": "2018-06-08T02:00:35", "url": "https://files.pythonhosted.org/packages/fd/18/8673b0f8e10847f4f233ad6eaf965616362703a3b256161b42aedfd17a80/virlutils-0.8.1.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "b35227cdec2d27a745eb3a326f9a73a5", "sha256": "e7d6d994e1a6d2289c0f5947e071a64cda36c0a17719458d978267889cf96eda" }, "downloads": -1, "filename": "virlutils-0.8.2.tar.gz", "has_sig": false, "md5_digest": "b35227cdec2d27a745eb3a326f9a73a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4584991, "upload_time": "2018-06-08T17:54:22", "url": "https://files.pythonhosted.org/packages/f6/9c/9cc7bfa1922eedecdb9b51dbd217ff9a39dfc18784f58aa55230b0856d34/virlutils-0.8.2.tar.gz" } ], "0.8.3": [ { "comment_text": "", "digests": { "md5": "4c12699db009e81d10efec78ae77065b", "sha256": "663ea624018f52f8cdd197107d1ffd968bce21179a8d00d0c5b7b2c4de5c65e1" }, "downloads": -1, "filename": "virlutils-0.8.3.tar.gz", "has_sig": false, "md5_digest": "4c12699db009e81d10efec78ae77065b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4586405, "upload_time": "2018-08-02T13:42:13", "url": "https://files.pythonhosted.org/packages/f3/e5/397943bdaa61d871cf1f5178c2b4453bdc91c1519a85b9804b0c8a2c673d/virlutils-0.8.3.tar.gz" } ], "0.8.4": [ { "comment_text": "", "digests": { "md5": "09e3a5977b3fbada26c2cacaf57ac90d", "sha256": "9814641708e3f0a45f801446637069c60ad53f0384a37dfcbeb8848870853d57" }, "downloads": -1, "filename": "virlutils-0.8.4.tar.gz", "has_sig": false, "md5_digest": "09e3a5977b3fbada26c2cacaf57ac90d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4586404, "upload_time": "2018-08-02T19:28:02", "url": "https://files.pythonhosted.org/packages/67/89/f340f6c51c8f40892b2e015fcacb02e68889b0a63e4132f8a6351e976a62/virlutils-0.8.4.tar.gz" } ], "0.8.7": [ { "comment_text": "", "digests": { "md5": "65dc35f8202c599d712f21a42f822d45", "sha256": "5e2bf696896535dbaa379e285956d93f12aa904f5032382d15722a531bc3c550" }, "downloads": -1, "filename": "virlutils-0.8.7.tar.gz", "has_sig": false, "md5_digest": "65dc35f8202c599d712f21a42f822d45", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4587973, "upload_time": "2019-04-04T17:28:22", "url": "https://files.pythonhosted.org/packages/18/e4/6fee60dc3211b4eac73a0802db5102088ce73262744a5440f0f4ecf7102e/virlutils-0.8.7.tar.gz" } ], "0.8.8": [ { "comment_text": "", "digests": { "md5": "84a16a56b4eebe3ae7d9a8ea1c482aca", "sha256": "648178c6deb4d5531cffdfb12bab88b842a19b4d1bb5c37dbbd0b6e3d0a2d135" }, "downloads": -1, "filename": "virlutils-0.8.8.tar.gz", "has_sig": false, "md5_digest": "84a16a56b4eebe3ae7d9a8ea1c482aca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4587852, "upload_time": "2019-04-04T17:53:45", "url": "https://files.pythonhosted.org/packages/48/57/9ba894110eafc48066c5ba01f0cdd3f54dfe0a59f286d727fdd5626f9a28/virlutils-0.8.8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "84a16a56b4eebe3ae7d9a8ea1c482aca", "sha256": "648178c6deb4d5531cffdfb12bab88b842a19b4d1bb5c37dbbd0b6e3d0a2d135" }, "downloads": -1, "filename": "virlutils-0.8.8.tar.gz", "has_sig": false, "md5_digest": "84a16a56b4eebe3ae7d9a8ea1c482aca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4587852, "upload_time": "2019-04-04T17:53:45", "url": "https://files.pythonhosted.org/packages/48/57/9ba894110eafc48066c5ba01f0cdd3f54dfe0a59f286d727fdd5626f9a28/virlutils-0.8.8.tar.gz" } ] }