2 libremanage - Lightweight, free software for remote side-chanel server management
4 Copyright (C) 2018 Alyssa Rosenzweig
6 This program is free software: you can redistribute it and/or modify
7 it under the terms of the GNU Affero General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU Affero General Public License for more details.
16 You should have received a copy of the GNU Affero General Public License
17 along with this program. If not, see <https://www.gnu.org/licenses/>.
27 $ libremanage [server name] [command]
31 $ libremanage web2 reboot
33 Server names are defined in the accompanying config.py.
35 Valid commands are as follows:
37 - shutdown, reboot, poweron: Power management
38 - tty: Open TTY in GNU Screen
41 with
open("config.json") as f
:
45 def die_with_usage(message
):
50 if len(sys
.argv
) != 3:
51 die_with_usage("Incorrect number of arguments")
53 def get_server_handle(name
):
54 # TODO: resolve based on config, SSH in, give self-contained handle?
57 def set_server_power(state
, server
):
58 print("Setting server " + server
+ " to power state " + str(state
))
63 "shutdown": (False, functools
.partial(set_server_power
, 0)),
64 "poweron": (False, functools
.partial(set_server_power
, 1)),
65 "reboot": (False, lambda s
: (set_server_power(0, s
), set_server_power(1, s
))),
67 # TTY access (or keyboard if wired as such)
69 "tty": (True, lambda s
: print("Screening on " + s
))
72 def issue_command(server_name
, command
):
73 server
= get_server_handle(server_name
)
74 print(server_name
, command
)
77 (visible_shell
, callback
) = COMMANDS
[command
]
79 die_with_usage("Invalid command supplied")
81 print("Shell visible? " + str(visible_shell
))
84 issue_command(sys
.argv
[1], sys
.argv
[2])