#!/usr/bin/env python3 from lxc_net import parse_network import signal import libvirt import argparse 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) conn = libvirt.open("lxc:///") topology = parse_network.YamlTopology(args.topology, conn) topology.net_start(verbose=True) topology.dom_start(verbose=True) print("Network running. Press ^C to terminate.") while not received_sigint: # Wait for SIGINT signal.pause() topology.dom_stop(verbose=True) topology.net_stop(verbose=True) if __name__ == "__main__": main()