feat: add zerotier to network cli
This commit is contained in:
41
pkgs/clan-cli/clan_lib/network/zerotier/__init__.py
Normal file
41
pkgs/clan-cli/clan_lib/network/zerotier/__init__.py
Normal file
@@ -0,0 +1,41 @@
|
||||
import logging
|
||||
import time
|
||||
from collections.abc import Iterator
|
||||
from contextlib import contextmanager
|
||||
from dataclasses import dataclass
|
||||
|
||||
from clan_lib.errors import ClanError
|
||||
from clan_lib.network import Network, NetworkTechnologyBase, Peer
|
||||
from clan_lib.ssh.remote import Remote
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class NetworkTechnology(NetworkTechnologyBase):
|
||||
def is_running(self) -> bool:
|
||||
return True
|
||||
|
||||
def ping(self, remote: Remote) -> None | float:
|
||||
if self.is_running():
|
||||
try:
|
||||
# Use the existing SSH reachability check
|
||||
now = time.time()
|
||||
remote.check_machine_ssh_reachable()
|
||||
|
||||
return (time.time() - now) * 1000
|
||||
|
||||
except ClanError as e:
|
||||
log.debug(f"Error checking peer {remote}: {e}")
|
||||
return None
|
||||
return None
|
||||
|
||||
@contextmanager
|
||||
def connection(self, network: Network) -> Iterator[Network]:
|
||||
yield network
|
||||
|
||||
def remote(self, peer: Peer) -> "Remote":
|
||||
return Remote(
|
||||
address=peer.host,
|
||||
command_prefix=peer.name,
|
||||
)
|
||||
Reference in New Issue
Block a user