clan-cli: upload.py -> Replace rsync with native ssh command
This commit is contained in:
@@ -5,3 +5,4 @@ MaxStartups 64:30:256
|
||||
AuthorizedKeysFile $host_key.pub
|
||||
AcceptEnv REALPATH
|
||||
PasswordAuthentication no
|
||||
Subsystem sftp $sftp_server
|
||||
@@ -38,7 +38,7 @@ def substitute(
|
||||
str(clan_core_flake),
|
||||
)
|
||||
line = line.replace("__CLAN_SOPS_KEY_PATH__", sops_key)
|
||||
line = line.replace("__CLAN_SOPS_KEY_DIR__", str(flake))
|
||||
line = line.replace("__CLAN_SOPS_KEY_DIR__", str(flake / "facts"))
|
||||
buf += line
|
||||
print(f"file: {file}")
|
||||
print(f"clan_core: {clan_core_flake}")
|
||||
|
||||
@@ -9,7 +9,7 @@ from sshd import Sshd
|
||||
@pytest.fixture
|
||||
def host_group(sshd: Sshd) -> HostGroup:
|
||||
login = pwd.getpwuid(os.getuid()).pw_name
|
||||
return HostGroup(
|
||||
group = HostGroup(
|
||||
[
|
||||
Host(
|
||||
"127.0.0.1",
|
||||
@@ -20,3 +20,4 @@ def host_group(sshd: Sshd) -> HostGroup:
|
||||
)
|
||||
]
|
||||
)
|
||||
return group
|
||||
|
||||
@@ -26,12 +26,13 @@ class Sshd:
|
||||
|
||||
class SshdConfig:
|
||||
def __init__(
|
||||
self, path: Path, login_shell: Path, key: str, preload_lib: Path
|
||||
self, path: Path, login_shell: Path, key: str, preload_lib: Path, log_file: Path
|
||||
) -> None:
|
||||
self.path = path
|
||||
self.login_shell = login_shell
|
||||
self.key = key
|
||||
self.preload_lib = preload_lib
|
||||
self.log_file = log_file
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
@@ -43,7 +44,14 @@ def sshd_config(test_root: Path) -> Iterator[SshdConfig]:
|
||||
host_key = test_root / "data" / "ssh_host_ed25519_key"
|
||||
host_key.chmod(0o600)
|
||||
template = (test_root / "data" / "sshd_config").read_text()
|
||||
content = string.Template(template).substitute({"host_key": host_key})
|
||||
sshd = shutil.which("sshd")
|
||||
assert sshd is not None
|
||||
sshdp = Path(sshd)
|
||||
sftp_server = sshdp.parent.parent / "libexec" / "sftp-server"
|
||||
assert sftp_server is not None
|
||||
content = string.Template(template).substitute(
|
||||
{"host_key": host_key, "sftp_server": sftp_server}
|
||||
)
|
||||
config = tmpdir / "sshd_config"
|
||||
config.write_text(content)
|
||||
login_shell = tmpdir / "shell"
|
||||
@@ -84,8 +92,8 @@ exec {bash} -l "${{@}}"
|
||||
],
|
||||
check=True,
|
||||
)
|
||||
|
||||
yield SshdConfig(config, login_shell, str(host_key), lib_path)
|
||||
log_file = tmpdir / "sshd.log"
|
||||
yield SshdConfig(config, login_shell, str(host_key), lib_path, log_file)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -106,7 +114,17 @@ def sshd(
|
||||
"LOGIN_SHELL": str(sshd_config.login_shell),
|
||||
}
|
||||
proc = command.run(
|
||||
[sshd, "-f", str(sshd_config.path), "-D", "-p", str(port)], extra_env=env
|
||||
[
|
||||
sshd,
|
||||
"-E",
|
||||
str(sshd_config.log_file),
|
||||
"-f",
|
||||
str(sshd_config.path),
|
||||
"-D",
|
||||
"-p",
|
||||
str(port),
|
||||
],
|
||||
extra_env=env,
|
||||
)
|
||||
monkeypatch.delenv("SSH_AUTH_SOCK", raising=False)
|
||||
while True:
|
||||
|
||||
@@ -53,9 +53,11 @@ def test_secrets_upload(
|
||||
new_text = flake.read_text().replace("__CLAN_TARGET_ADDRESS__", addr)
|
||||
|
||||
flake.write_text(new_text)
|
||||
|
||||
cli.run(["facts", "upload", "--flake", str(test_flake_with_core.path), "vm1"])
|
||||
|
||||
# the flake defines this path as the location where the sops key should be installed
|
||||
sops_key = test_flake_with_core.path.joinpath("key.txt")
|
||||
sops_key = test_flake_with_core.path / "facts" / "key.txt"
|
||||
# breakpoint()
|
||||
assert sops_key.exists()
|
||||
assert sops_key.read_text() == age_keys[0].privkey
|
||||
|
||||
Reference in New Issue
Block a user