Load config
[libremanage.git] / libremanage.py
index bab34b1974daf73547c4217b6a43b6cbac8b764a..88a7d6b729cd9e489715ed753d3170a8bea07daf 100644 (file)
@@ -18,6 +18,7 @@ along with this program.  If not, see <https://www.gnu.org/licenses/>.
 """
 
 import sys
+import json
 import functools
 
 USAGE = """
@@ -34,13 +35,21 @@ Server names are defined in the accompanying config.py.
 Valid commands are as follows:
 
     - shutdown, reboot, poweron: Power management
+    - tty: Open TTY in GNU Screen
 """
 
-if len(sys.argv) != 3:
-    print("Incorrect number of arguments")
+with open("config.json") as f:
+    CONFIG = json.load(f)
+print(CONFIG)
+
+def die_with_usage(message):
+    print(message)
     print(USAGE)
     sys.exit(1)
 
+if len(sys.argv) != 3:
+    die_with_usage("Incorrect number of arguments")
+
 def get_server_handle(name):
     # TODO: resolve based on config, SSH in, give self-contained handle?
     return name
@@ -49,13 +58,27 @@ def set_server_power(state, server):
     print("Setting server " + server + " to power state " + str(state))
 
 COMMANDS = {
-        "shutdown": functools.partial(set_server_power, 0),
-        "poweron": functools.partial(set_server_power, 1),
+        # Power managemment
+
+        "shutdown": (False, functools.partial(set_server_power, 0)),
+        "poweron": (False, functools.partial(set_server_power, 1)),
+        "reboot": (False, lambda s: (set_server_power(0, s), set_server_power(1, s))),
+
+        # TTY access (or keyboard if wired as such)
+
+        "tty": (True, lambda s: print("Screening on " + s))
 }
 
 def issue_command(server_name, command):
     server = get_server_handle(server_name)
     print(server_name, command)
-    COMMANDS[command](server_name)
+
+    try:
+        (visible_shell, callback) = COMMANDS[command]
+    except KeyError:
+        die_with_usage("Invalid command supplied")
+
+    print("Shell visible? " + str(visible_shell))
+    callback(server_name)
 
 issue_command(sys.argv[1], sys.argv[2])