clan-cli: Fixup clan install which depends on ssh_parseargs.

clan-cli: Remove --ssh-option for now, as it can't work in current state

clan-cli: Remove nix_config from test as its impure
This commit is contained in:
Qubasa
2025-07-14 20:39:33 +07:00
parent 9630b6dbe4
commit e8b5e2c2c5
4 changed files with 22 additions and 17 deletions

View File

@@ -24,12 +24,14 @@ def install_command(args: argparse.Namespace) -> None:
# Only if the caller did not specify a target_host via args.target_host
# Find a suitable target_host that is reachable
target_host_str = args.target_host
deploy_info: DeployInfo | None = ssh_command_parse(args)
deploy_info: DeployInfo | None = (
ssh_command_parse(args) if target_host_str is None else None
)
use_tor = False
if deploy_info and not args.target_host:
if deploy_info:
host = find_reachable_host(deploy_info)
if host is None:
if host is None or host.tor_socks:
use_tor = True
target_host_str = deploy_info.tor.target
else:

View File

@@ -154,6 +154,7 @@ def ssh_shell_from_deploy(
def ssh_command_parse(args: argparse.Namespace) -> DeployInfo | None:
host_key_check = args.host_key_check
deploy = None
if args.json:
json_file = Path(args.json)
if json_file.is_file():
@@ -161,23 +162,25 @@ def ssh_command_parse(args: argparse.Namespace) -> DeployInfo | None:
return DeployInfo.from_json(data, host_key_check)
data = json.loads(args.json)
deploy = DeployInfo.from_json(data, host_key_check)
if args.png:
elif args.png:
deploy = DeployInfo.from_qr_code(Path(args.png), host_key_check)
if hasattr(args, "machine") and args.machine:
elif hasattr(args, "machine") and args.machine:
machine = Machine(args.machine, args.flake)
target = machine.target_host().override(
command_prefix=machine.name, host_key_check=host_key_check
)
deploy = DeployInfo(addrs=[target])
if deploy is None:
else:
return None
ssh_options = {}
for name, value in args.ssh_option or []:
ssh_options[name] = value
ssh_options = None
if hasattr(args, "ssh_option") and args.ssh_option:
for name, value in args.ssh_option:
ssh_options = {}
ssh_options[name] = value
deploy = deploy.overwrite_remotes(ssh_options=ssh_options)
return deploy

View File

@@ -9,8 +9,6 @@ from clan_lib.ssh.remote import Remote
from clan_cli.ssh.deploy_info import DeployInfo, find_reachable_host
from clan_cli.tests.fixtures_flakes import ClanFlake
from clan_cli.tests.helpers import cli
from clan_cli.tests.nix_config import ConfigItem
from clan_cli.tests.stdout import CaptureOutput
def test_qrcode_scan(temp_dir: Path) -> None:
@@ -90,13 +88,11 @@ def test_find_reachable_host(hosts: list[Remote]) -> None:
def test_ssh_shell_from_deploy(
hosts: list[Remote],
flake: ClanFlake,
nix_config: dict[str, ConfigItem],
capture_output: CaptureOutput,
) -> None:
host = hosts[0]
machine1_config = flake.machines["m1_machine"]
machine1_config["nixpkgs"]["hostPlatform"] = nix_config["system"].value
machine1_config["nixpkgs"]["hostPlatform"] = "x86_64-linux"
machine1_config["clan"]["networking"]["targetHost"] = host.ssh_url()
flake.refresh()

View File

@@ -454,7 +454,7 @@ class Remote:
@dataclass(frozen=True)
class ConnectionOptions:
timeout: int = 2
retries: int = 10
retries: int = 5
@dataclass
@@ -527,6 +527,10 @@ def check_machine_ssh_reachable(
if opts is None:
opts = ConnectionOptions()
cmdlog.debug(
f"Checking SSH reachability for {remote.target} on port {remote.port or 22}",
)
address_family = socket.AF_INET6 if ":" in remote.address else socket.AF_INET
for _ in range(opts.retries):
with socket.socket(address_family, socket.SOCK_STREAM) as sock: