spawn_network: add basic REPL
This commit is contained in:
parent
b9f9e7d1b0
commit
ceee1908a4
|
@ -209,6 +209,7 @@ class Container(util.LibvirtObject):
|
||||||
if not str(exn).startswith("Domain not found:"):
|
if not str(exn).startswith("Domain not found:"):
|
||||||
raise exn
|
raise exn
|
||||||
# Else, the machine was already stopped: everything is fine
|
# Else, the machine was already stopped: everything is fine
|
||||||
|
self.lxc_container = None
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
self.create()
|
self.create()
|
||||||
|
|
|
@ -5,6 +5,7 @@ import signal
|
||||||
import libvirt
|
import libvirt
|
||||||
import argparse
|
import argparse
|
||||||
import logging
|
import logging
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
def parse_args():
|
def parse_args():
|
||||||
|
@ -15,6 +16,66 @@ def parse_args():
|
||||||
return args
|
return args
|
||||||
|
|
||||||
|
|
||||||
|
def handle_dom(topology, cmd):
|
||||||
|
if not cmd:
|
||||||
|
print("Missing argument.")
|
||||||
|
return
|
||||||
|
|
||||||
|
if cmd[0] in ["up", "down"]:
|
||||||
|
dom_id = None
|
||||||
|
if len(cmd) > 1:
|
||||||
|
try:
|
||||||
|
dom_id = [int(x) for x in cmd[1:]]
|
||||||
|
except ValueError:
|
||||||
|
print("Bad id: {}".format(cmd[1]))
|
||||||
|
return
|
||||||
|
state = cmd[0] == "up"
|
||||||
|
if dom_id:
|
||||||
|
for dom in dom_id:
|
||||||
|
topology.dom_setstate_single(dom, state, verbose=True)
|
||||||
|
else:
|
||||||
|
topology.dom_setstate(state, verbose=True)
|
||||||
|
elif cmd[0] == "restart":
|
||||||
|
handle_dom(topology, ["down"] + cmd[1:])
|
||||||
|
handle_dom(topology, ["up"] + cmd[1:])
|
||||||
|
elif cmd[0] == "help":
|
||||||
|
print("Available commands: up, down, restart, help")
|
||||||
|
else:
|
||||||
|
print("Bad command.")
|
||||||
|
|
||||||
|
|
||||||
|
def main_loop(topology):
|
||||||
|
actions = {
|
||||||
|
"dom": handle_dom,
|
||||||
|
"exit": "_exit",
|
||||||
|
"help": "_help",
|
||||||
|
}
|
||||||
|
|
||||||
|
while True:
|
||||||
|
print(">> ", end="")
|
||||||
|
sys.stdout.flush()
|
||||||
|
|
||||||
|
try:
|
||||||
|
line = input().strip().split()
|
||||||
|
if not line: # Empty line
|
||||||
|
continue
|
||||||
|
|
||||||
|
action = actions.get(line[0], "_bad")
|
||||||
|
if isinstance(action, str):
|
||||||
|
if action == "_bad":
|
||||||
|
print("Unknown command: {}.".format(line[0]))
|
||||||
|
if action in ["_help", "_bad"]:
|
||||||
|
print("Available commands: dom, exit, help")
|
||||||
|
elif action == "_exit":
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
print("Unknown action.")
|
||||||
|
else:
|
||||||
|
action(topology, line[1:])
|
||||||
|
except Exception as exn:
|
||||||
|
print(exn)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
args = parse_args()
|
args = parse_args()
|
||||||
|
|
||||||
|
@ -40,8 +101,8 @@ def main():
|
||||||
topology.dom_start(verbose=True)
|
topology.dom_start(verbose=True)
|
||||||
|
|
||||||
print("Network running. Press ^C to terminate.")
|
print("Network running. Press ^C to terminate.")
|
||||||
while not received_sigint: # Wait for SIGINT
|
|
||||||
signal.pause()
|
main_loop(topology)
|
||||||
|
|
||||||
topology.dom_stop(verbose=True)
|
topology.dom_stop(verbose=True)
|
||||||
topology.net_stop(verbose=True)
|
topology.net_stop(verbose=True)
|
||||||
|
|
Loading…
Reference in a new issue