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
- QEMU
- OVMF for UEFI.
- picocom for
pmctl2
. - socat for
pmctl2
. - (Optional) swtpm for providing TPM of
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.