---
layout: docs
page_title: Client
description: Nomad client requirements, capabilities, and configuration options for the Virt task driver.
---

# Client

@include 'virt-beta-callout.mdx'

The `virt` task driver is not built into Nomad. You must [downloaded][releases] onto the client
host in the configured plugin directory. The client host must also be capable of running hardware
accelerated KVM virtual machines, which you can check by using [kvm-ok][] command.
Additional requirements:

- Linux
- Commands `bridge-utils`, `cloudinit`, `dnsmasq`, and `iptables`
- [libvirt daemon][] installed and running
- QEMU system packages installed
- Nomad client running as root

Use the following command to install the package requirements:

```console
$ sudo apt-get update && \
  sudo apt-get install -y \
  bridge-utils \
  cloud-init \
  dnsmasq \
  iptables \
  libvirt-daemon-system \
  qemu-system \
  qemu-system-x86 \
  qemu-utils
```

## Client capabilities

The `virt` task driver implements the following driver [capabilities][capabilities].

| Feature              | Implementation |
|----------------------|----------------|
| `nomad alloc signal` | false          |
| `nomad alloc exec`   | false          |
| filesystem isolation | image          |
| network isolation    | host           |
| volume mounting      | false          |

## Plugin configuration

This example shows the default plugin configuration.

```hcl
plugin "nomad-driver-driver" {
  config {
    data_dir     = "/var/lib/virt"
    image_paths  = ["/var/lib/virt", "${ALLOC_DIR}"]

    emulator {
      uri      = "qemu:///system"
      user     = ""
      password = ""
    }
  }
}
```

- `data_dir` - (default: `"/var/lib/virt"`) - the directory for storing VM configuration files and
  intermediate files.

- `image_paths` - (default: `["/var/lib/virt", "${ALLOC_DIR}"]`) - an allow-list of paths the driver
  is allowed to load an image from.

- `emulator` - (block)
  - `uri` - (default: `"qemu:///system"`) - The `uri` specifies which hypervisor to connect to.
  - `user` - (default: `""`) - the username to use for authentication.
  - `password` - (default: `""`) - the password to use for authentication.

## Client attributes

When installed, the `virt` plugin provides the following node attributes that you can use as
constraints when authoring jobs.

```
driver.virt                              = true
driver.virt.active                       = 0
driver.virt.emulator.version             = 8002002
driver.virt.inactive                     = 0bytes
driver.virt.libvirt.version              = 10000000
driver.virt.network.default.bridge_name  = virbr0
driver.virt.network.default.state        = active
```

[releases]: https://releases.hashicorp.com/nomad-driver-virt
[kvm-ok]: https://manpages.ubuntu.com/manpages/bionic/man1/kvm-ok.1.html
[libvirt daemon]: https://libvirt.org/daemons.html
[capabilities]: https://developer.hashicorp.com/nomad/docs/concepts/plugins/task-drivers#task-driver-plugin-api
