#!/usr/bin/python
"""
 Simple CLI client to interact with a running emulator.

 (c) 2016 by Manuel Peuster <manuel.peuster@upb.de>

 The CLI offers different tools, e.g., compute, network, ...
 Each of these tools is implemented as an independent Python
 module.

 cli compute start dc1 my_name flavor_a
 cli network create dc1 11.0.0.0/24
"""

import sys
import compute
import network
import datacenter
import monitor

def main():
    if len(sys.argv) < 2:
        print "Usage: son-emu-cli <toolname> <arguments>"
        exit(0)
    if sys.argv[1] == "compute":
        compute.main(sys.argv[2:])
    elif sys.argv[1] == "network":
        network.main(sys.argv[2:])
    elif sys.argv[1] == "datacenter":
        datacenter.main(sys.argv[2:])
    elif sys.argv[1] == "monitor":
        monitor.main(sys.argv[2:])

if __name__ == '__main__':
    main()
