Bombsquad-Ballistica-Modded.../dist/ba_data/python/efro/cloudshell.py

50 lines
1.3 KiB
Python
Raw Normal View History

2023-01-30 23:35:08 +05:30
# Released under the MIT License. See LICENSE for details.
#
"""My nifty ssh/mosh/rsync mishmash."""
from __future__ import annotations
from enum import Enum
from dataclasses import dataclass
from efro.dataclassio import ioprepped
class LockType(Enum):
"""Types of locks that can be acquired on a host."""
HOST = 'host'
WORKSPACE = 'workspace'
PYCHARM = 'pycharm'
CLION = 'clion'
@ioprepped
@dataclass
class HostConfig:
"""Config for a cloud machine to run commands on.
precommand, if set, will be run before the passed commands.
Note that it is not run in interactive mode (when no command is given).
"""
address: str | None = None
user: str = 'ubuntu'
port: int = 22
mosh_port: int | None = None
mosh_server_path: str | None = None
mosh_shell: str = 'sh'
workspaces_root: str = '/home/${USER}/cloudshell_workspaces'
sync_perms: bool = True
precommand: str | None = None
managed: bool = False
idle_minutes: int = 5
can_sudo_reboot: bool = False
2023-08-13 17:21:49 +05:30
max_sessions: int = 4
2023-01-30 23:35:08 +05:30
reboot_wait_seconds: int = 20
reboot_attempts: int = 1
def resolved_workspaces_root(self) -> str:
"""Returns workspaces_root with standard substitutions."""
return self.workspaces_root.replace('${USER}', self.user)