lxc-network/README.md

71 lines
1.6 KiB
Markdown
Raw Normal View History

2020-03-08 15:12:28 +01:00
# lxc-network
2020-03-12 11:52:07 +01:00
A network of LXC containers, managed through libvirt
## Dependencies
This script will most probably break on any other system than Linux, and will
definitely break on anything non-UNIX.
It relies on `libvirt` and `overlayfs`.
## Setup
It is recommended to set up `lxc-network` within a *virtualenv*:
```bash
virtualenv -p python3 venv
source venv/bin/activate
pip install -r requirements.txt
```
Furthermore, you are expected to set up a system root tree within the directory
of your choice, and put its path in `lxc_net/settings.py`. This can be done eg.
in ArchLinux with
```bash
pacstrap [your_root_directory] base
```
or the equivalent `debootstrap` command on Debian.
This system is expected to use `systemd`, and to have enabled
`systemd-networkd` to setup its IP addresses.
## Usage
You can spawn a network using
```bash
./spawn_network.py topology_description.yml
```
where `topology_description.yml` is a valid topology description file (see
below).
## Topology description file
A topology is described in a [YAML](https://en.wikipedia.org/wiki/YAML) file
looking like this:
```yaml
---
links:
- domains: ['a', 'b']
- domains: ['b', 'c']
domains:
b:
enable_v4: false
```
The `links` element is mandatory, each link containing a mandatory `domains`
attribute, the list of domains (containers) connected to it. A domain is
described by an arbitrary name. Domains will be spawned (and indexed) in
alphabetical order.
A `domains` root element is optional, and may be used to specify
domain-specific options.
The valid options are:
* `enable_v4`: boolean, specifies whether the domain has an IPv4 address.