You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Giovanni Torres 26fa45ca8e Fixed typo 9 years ago
tests Added initial Bats tests 9 years ago
README.md More info about resolving guest hostnames in README 9 years ago
kvm-install-vm Fixed typo 9 years ago
test.sh Added initial Bats tests 9 years ago

README.md

kvm-install-vm

A bash wrapper around virt-install to build virtual machines on a local KVM hypervisor. You can run it as a normal user which will use qemu:///session to connect locally to your KVM domains.

Tested on Fedora 25/26.

Prerequisites

You need to have the KVM hypervisor installed, along with a few other packages:

  • genisoimage
  • virt-install
  • libguestfs-tools-c
  • qemu-img
  • libvirt-client

To install the dependencies, run:

sudo dnf -y install genisoimage virt-install libguestfs-tools-c qemu-img libvirt-client wget

If you want to resolve guests by their hostnames, install the libvirt-nss package:

sudo dnf -y install libvirt-nss

Then, add libvirt and libvirt_guest to list of hosts databases in /etc/nsswitch.conf. See here for more information.

Usage

NAME
    kvm-install-vm - Install virtual guests using cloud-init on a local KVM
    hypervisor.

SYNOPSIS
    ./kvm-install-vm [OPTIONS] -n|-r vmname

DESCRIPTION
    A bash wrapper around virt-install to build virtual machines on a local KVM
    hypervisor. You can run it as a normal user which will use qemu:///session
    to connect locally to your KVM domains.

MANDATORY ARGUMENTS
    You must specify one of the following arguments to either create or delete
    a VM:
        -n vmname   Name of VM to create
        -r vmname   Name of VM to delete

OPTIONS
    -b          Bridge              (default: virbr0)
    -c          Number of vCPUs     (default: 1)
    -d          Disk Size (GB)      (default: 10)
    -f          CPU Model / Feature (default: host)
    -h          Display help
    -i          Custom QCOW2 Image
    -k          SSH Public Key      (default: $HOME/.ssh/id_rsa.pub)
    -l          Location of Images  (default: $HOME/virt/images)
    -m          Memory Size (MB)    (default: 1024)
    -M mac      Mac address         (default: auto-assigned)
    -t          Linux Distribution  (default: centos7)
    -T          Timezone            (default: US/Eastern)


DISTRIBUTIONS
    NAME            DESCRIPTION                         LOGIN
    centos7         CentOS 7                            centos
    centos7-atomic  CentOS 7 Atomic Host                centos
    centos6         CentOS 6                            centos
    debian9         Debian 9 (Stretch)                  debian
    fedora26        Fedora 26                           fedora
    fedora26-atomic Fedora 26 Atomic Host               fedora
    ubuntu1604      Ubuntu 16.04 LTS (Xenial Xerus)     ubuntu

EXAMPLES
    ./kvm-install-vm -n foo
        Create VM with the default parameters: CentOS 7, 1 vCPU, 1GB RAM, 10GB
        disk capacity.

    ./kvm-install-vm -c 2 -m 2048 -d 20 -n foo
        Create VM with custom parameters: 2 vCPUs, 2GB RAM, and 20GB disk
        capacity.

    ./kvm-install-vm -t debian9 -n foo
        Create a Debian 9 VM with the default parameters.

    ./kvm-install-vm -r foo
        Remove (destroy and undefine) a VM.  WARNING: This will delete all
        customizations in the VM!

Example

asciicast

Notes

  1. This script will download a qcow2 cloud image from the respective distribution's download site. See script for URLs.

  2. If using libvirt-nss, keep in mind that DHCP leases take some time to expire, so if you create a VM, delete it, and recreate another VM with the same name in a short period of time, there will be two DHCP leases for the same host and its hostname will likely not resolve until the old lease expires.

Testing

Tests are written using Bats. To execute the tests, run ./test.sh in the root directory of the project.

Use Cases

If you don't need to use Docker or Vagrant, don't want to make changes to a production machine, or just want to spin up one or more VMs locally to test things like:

  • high availability
  • clustering
  • package installs
  • preparing for exams
  • checking for system defaults
  • anything else you would do with a VM

...then this wrapper could be useful for you.