diff --git a/README.md b/README.md index b04a961..8b23bce 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ import garage_admin_sdk (Not yet implemented) ```bash -./mknet scenario ./scenarios/garage-s3lat ./topo/single-dc.yml +./mknet scenario ./topo/single-dc.yml ./scenarios/garage-s3lat ``` ## Manual usage diff --git a/mknet b/mknet index 5c09a18..60f7f74 100755 --- a/mknet +++ b/mknet @@ -349,22 +349,31 @@ def destroy(): net.ns.forget("unconfined") os.remove(".current_state.yml") +def scenario(config, cmd): + create(config) + runall(cmd) + destroy() + if __name__ == "__main__": if len(sys.argv) < 2: progname = os.path.basename(sys.argv[0]) if len(sys.argv) > 0 else "mknet" print(f"""Usage: - {progname} create [config_path] # create a new network. config_path defailt to config.yml + {progname} scenario [args...] # all in one simulation: create a network, run the command on all nodes, destroy the network + + {progname} create [config_path] # create a new network. config_path defailt to topo/with-vdsl.yml {progname} run-all [args...] # run a command as each host. set the IP, NAME and ZONE environment variables {progname} run [cmd [args...]] # run command in host named . Use zonename:name if multiple zones hosts server with same name. If cmd is empty, run a shell {progname} destroy # destroy the current environment""") exit() cmd = sys.argv[1] if cmd == "create": - create(sys.argv[2] if len(sys.argv) > 2 else "config.yml") + create(sys.argv[2] if len(sys.argv) > 2 else "topo/with-vdsl.yml") elif cmd == "run": run(sys.argv[2], sys.argv[3:]) elif cmd == "run-all": runall(sys.argv[2:]) + elif cmd == "scenario": + scenario(sys.argv[2], sys.argv[3:]) elif cmd == "destroy": destroy() else: