lxc-network/spawn_network.py

52 lines
1.2 KiB
Python
Raw Normal View History

2020-03-12 11:40:17 +01:00
#!/usr/bin/env python3
2020-03-19 19:07:12 +01:00
from lxc_net import parse_network, libvirt_error
2020-03-12 11:40:17 +01:00
import signal
import libvirt
import argparse
2020-03-19 19:07:12 +01:00
import logging
2020-03-12 11:40:17 +01:00
def parse_args():
parser = argparse.ArgumentParser(description="Spawns a network of LXC containers.")
parser.add_argument("topology", help="A YAML file defining the network topology")
args = parser.parse_args()
return args
def main():
args = parse_args()
received_sigint = False
def handle_sigint(signum, frame):
""" Called upon SIGINT (^C) """
nonlocal received_sigint
print(" >> Received SIGINT, stopping network...")
received_sigint = True
signal.signal(signal.SIGINT, handle_sigint)
2020-03-19 19:07:12 +01:00
logging.basicConfig(level=logging.WARNING)
libvirt.registerErrorHandler(libvirt_error.libvirt_error_handler, None)
2020-03-12 11:40:17 +01:00
conn = libvirt.open("lxc:///")
topology = parse_network.YamlTopology(args.topology, conn)
2020-03-19 19:06:44 +01:00
topology.net_start(verbose=True)
topology.dom_start(verbose=True)
2020-03-12 11:40:17 +01:00
print("Network running. Press ^C to terminate.")
while not received_sigint: # Wait for SIGINT
signal.pause()
2020-03-19 19:06:44 +01:00
topology.dom_stop(verbose=True)
topology.net_stop(verbose=True)
2020-03-12 11:40:17 +01:00
if __name__ == "__main__":
main()