Virtual data center construction tool
Placemat is a tool to simulate data center networks and servers using QEMU/KVM virtual machines, and Linux networking stacks. Placemat can simulate virtually any kind of network topologies to help tests and experiments for software usually used in data centers.
No daemons
Placemat is a single binary executable. It just builds networks and virtual machines when it starts, and destroys them when it terminates. This simplicity makes placemat great for a continuous testing tool.
Declarative YAML
Networks, virtual machines, and other kind of resources are defined in YAML files in a declarative fashion. Users need not mind the order of creation and/or destruction of resources.
Virtual BMC
Power on/off/reset of VMs can be done by IPMI commands and Redfish API. See virtual BMC for details.
Automation
Placemat supports cloud-init and ignition to automate virtual machine initialization. Files on the host machine can be exported to guests as a 9pfs. QEMU disk images can be downloaded from remote HTTP servers.
All of these help implementation of fully-automated tests.
UEFI
Not only traditional BIOS, but placemat VMs can be booted in UEFI mode if OVMF is available.
This project provides these commands:
placemat2
is the main tool to build networks and virtual machines.pmctl2
is a utility tool to control VMs and Pods.placemat2
reads all YAML files specified in command-line arguments,
then creates resources defined in YAML. To destroy, just kill the
process (by sending a signal or Control-C).
$ placemat2 [OPTIONS] YAML [YAML ...]
Options:
--cache-dir string
directory for cache data
--data-dir string
directory to store data (default "/var/scratch/placemat")
--debug
show QEMU's stdout and stderr
--force
force run with removal of garbage
--graphic
run QEMU with graphical console
--listen-addr string
listen address (default "127.0.0.1:10808")
--run-dir string
run directory (default "/tmp")
If --cache-dir
is not specified, the default will be /home/${SUDO_USER}/placemat_data
if sudo
is used for placemat
. If sudo
is not used, cache directory will be
the same as --data-dir
.
--force
is used for forced run. Remaining garbage, for example virtual networks, mounts, socket files will be removed.
pmctl2
is a command line tool to control VMs and Networks.
See pmctl
pmctl2
.pmctl2
.Node
resource.For Ubuntu or Debian, you can install them as follows:
$ sudo apt-get update
$ sudo apt-get install qemu-system-x86 qemu-utils ovmf picocom socat cloud-utils
You can choose go get
or debian package for installation.
Install placemat2
and pmctl2
:
$ go install github.com/cybozu-go/placemat/v2/cmd/placemat2@latest
$ go install github.com/cybozu-go/placemat/v2/cmd/pmctl2@latest
or
$ wget https://github.com/cybozu-go/placemat/releases/download/v${VERSION}/placemat2_${VERSION}_amd64.deb
$ sudo dpkg -i placemat2_${VERSION}_amd64.deb
See examples how to write YAML files.
To launch placemat from YAML files, run it with sudo
as follows:
$ sudo $GOPATH/bin/placemat2 cluster.yml
To connect to a serial console of a VM, use pmctl2 node enter
:
$ sudo $GOPATH/bin/pmctl2 node enter VM
This will launch picocom
. To exit, type Ctrl-Q
, then Ctrl-X
.
See specifications under docs directory.
placemat is licensed under the Apache License, Version 2.0.