Skip to content
/ virgo Public

Easily provision, instantiate and manage VMs

Notifications You must be signed in to change notification settings

anastop/virgo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

virgo

virgo allows you to quickly provision and spin VMs locally, leveraging cloud-init and Libvirt.

virgo

Features

  • Runs on Linux baremetal machines and leverages Libvirt
  • Allows easy VM provisioning based on user-provided provisioning scripts and simple configuration options (uses cloud-init under the hood)
  • Allows easy VM creation with flexible configuration options
  • Supports vhost-user network interfaces, to allow a VM to connect e.g. with a DPDK-based vswitch

Provisioning options:

  • cloud image used for provisioning (currently tested with Ubuntu 16.04 & 18.04)
  • user credentials
  • custom provisioning script to be used during VM creation
  • custom init.d script to be installed permanently

VM configuration options:

  • number and topology of vCPUs
  • guest memory
  • hugepage backing options
  • network interfaces: support for bridge-type and vhostuser-type interfaces

Installation

You can build virgo from source:

$ go get github.com/anastop/virgo
$ go install

Or download the latest binary from the "Releases" page.

Dependencies

virgo makes use of the following utilities:

  • wget
  • genisoimage

Usage

$ virgo init

Edit the created virgo.json according to your needs.

Optionally, create additional provision.sh and initd.sh files to be used as provisioning and initd scripts, respectively.

Provision a new VM called "foo":

$ sudo virgo provision foo --config virgo.json [--provision-script provision.sh] [--initd-script initd.sh]

"foo" will shutdown after provisioning.

Edit virgo.json to change VM's parameters (e.g. #vCPUs), and launch "foo":

$ sudo virgo launch foo --config virgo.json

To find out more, run virgo -h.