diff --git a/dockge_cli/components/communicate.py b/dockge_cli/components/communicate.py index 19e29dd..be41384 100644 --- a/dockge_cli/components/communicate.py +++ b/dockge_cli/components/communicate.py @@ -104,6 +104,22 @@ class DockgeConnection: def restart(self, name): ret = self._sio.call("agent", ("", "restartStack", name), timeout=10) return ret + + def update(self, name): + ret = self._sio.call("agent", ("", "updateStack", name), timeout=10) + return ret + + def stop(self, name): + ret = self._sio.call("agent", ("", "stopStack", name), timeout=10) + return ret + + def start(self, name): + ret = self._sio.call("agent", ("", "startStack", name), timeout=10) + return ret + + def down(self, name): + ret = self._sio.call("agent", ("", "downStack", name), timeout=10) + return ret def disconnect(self): self._sio.emit("logout") diff --git a/dockge_cli/components/run.py b/dockge_cli/components/run.py index fb0bbfe..e1fc598 100644 --- a/dockge_cli/components/run.py +++ b/dockge_cli/components/run.py @@ -2,10 +2,15 @@ from getpass import getpass from urllib.parse import urlparse from . import storage -from .utils import display_help, stack_formatter, status_formatter, restart_formatter +from .utils import display_help, stack_formatter, status_formatter, generic_formatter from .parser import Credentials, credentialparser from .communicate import DockgeConnection +def setup(): + con = DockgeConnection() + con.connect_and_login() + return con + def exec_command(command, extra_args): match command: case "help": @@ -33,27 +38,47 @@ def exec_command(command, extra_args): case "exit": storage.clear() case "list": - con = DockgeConnection() - con.connect_and_login() + con = setup() stack_formatter(con.list_stacks()) con.disconnect() case "status": if extra_args is None: raise ValueError - con = DockgeConnection() - con.connect_and_login() + con = setup() status_formatter(con.list_stack(extra_args[0])) con.disconnect() case "restart": if extra_args is None: raise ValueError - con = DockgeConnection() - con.connect_and_login() - restart_formatter(con.restart(extra_args[0])) + con = setup() + generic_formatter(con.restart(extra_args[0])) + con.disconnect() + case "update": + if extra_args is None: + raise ValueError + con = setup() + generic_formatter(con.update(extra_args[0])) + con.disconnect() + case "stop": + if extra_args is None: + raise ValueError + con = setup() + generic_formatter(con.stop(extra_args[0])) + con.disconnect() + case "start": + if extra_args is None: + raise ValueError + con = setup() + generic_formatter(con.start(extra_args[0])) + con.disconnect() + case "down": + if extra_args is None: + raise ValueError + con = setup() + generic_formatter(con.down(extra_args[0])) con.disconnect() case "debug": - con = DockgeConnection() - con.connect_and_login() + con = setup() stack_formatter(con.list_stacks()) print("fgo-ta-com", con.list_stack("fgo-ta-com")) con.disconnect() diff --git a/dockge_cli/components/utils.py b/dockge_cli/components/utils.py index 067b459..f2e1f11 100644 --- a/dockge_cli/components/utils.py +++ b/dockge_cli/components/utils.py @@ -25,6 +25,6 @@ def status_formatter(status): table = [[k, v] for k, v in status["serviceStatusList"].items()] print(tabulate(table, headers=headers, tablefmt="github"), "\n") -def restart_formatter(status): +def generic_formatter(status): print(f"Is Ok? {'Yes' if status['ok'] else 'No'}") print(f"Stack status: {status['msg']}") diff --git a/dockge_cli/models/commands.py b/dockge_cli/models/commands.py index 1f2b887..67df462 100644 --- a/dockge_cli/models/commands.py +++ b/dockge_cli/models/commands.py @@ -34,6 +34,21 @@ cmd_restart = CommandListing( description="Restarts a given stack", ) +cmd_start = CommandListing( + command="start", + description="Starts a given stack", +) + +cmd_stop = CommandListing( + command="stop", + description="Stops a given stack", +) + +cmd_down = CommandListing( + command="down", + description="Stop & Downs a given stack", +) + cmd_update = CommandListing( command="update", description="Updates a stack", @@ -54,5 +69,5 @@ cmd_help = CommandListing( description="Displays helping hints for commands", ) -commandlist = [cmd_host, cmd_login, cmd_logout, cmd_list, cmd_restart, cmd_update, cmd_exit, cmd_debug, cmd_help, cmd_status] +commandlist = [cmd_host, cmd_login, cmd_logout, cmd_list, cmd_restart, cmd_update, cmd_exit, cmd_debug, cmd_help, cmd_status, cmd_start, cmd_stop, cmd_down] commands = { k.command: k for k in commandlist }