73 lines
2.0 KiB
Python
73 lines
2.0 KiB
Python
from typing import TYPE_CHECKING
|
|
|
|
import pytest
|
|
from clan_cli.ssh.host import Host
|
|
from fixtures_flakes import ClanFlake
|
|
from helpers import cli
|
|
|
|
if TYPE_CHECKING:
|
|
from age_keys import KeyPair
|
|
|
|
|
|
@pytest.mark.with_core
|
|
def test_secrets_upload(
|
|
monkeypatch: pytest.MonkeyPatch,
|
|
flake: ClanFlake,
|
|
hosts: list[Host],
|
|
age_keys: list["KeyPair"],
|
|
) -> None:
|
|
config = flake.machines["vm1"]
|
|
config["nixpkgs"]["hostPlatform"] = "x86_64-linux"
|
|
host = hosts[0]
|
|
addr = f"{host.user}@{host.host}:{host.port}?StrictHostKeyChecking=no&UserKnownHostsFile=/dev/null&IdentityFile={host.key}"
|
|
config["clan"]["networking"]["targetHost"] = addr
|
|
config["clan"]["core"]["facts"]["secretUploadDirectory"] = str(flake.path / "facts")
|
|
flake.refresh()
|
|
monkeypatch.chdir(str(flake.path))
|
|
monkeypatch.setenv("SOPS_AGE_KEY", age_keys[0].privkey)
|
|
|
|
sops_dir = flake.path / "facts"
|
|
|
|
# the flake defines this path as the location where the sops key should be installed
|
|
sops_key = sops_dir / "key.txt"
|
|
sops_key2 = sops_dir / "key2.txt"
|
|
|
|
# Create old state, which should be cleaned up
|
|
sops_dir.mkdir()
|
|
sops_key.write_text("OLD STATE")
|
|
sops_key2.write_text("OLD STATE2")
|
|
|
|
cli.run(
|
|
[
|
|
"secrets",
|
|
"users",
|
|
"add",
|
|
"--flake",
|
|
str(flake.path),
|
|
"user1",
|
|
age_keys[0].pubkey,
|
|
]
|
|
)
|
|
|
|
cli.run(
|
|
[
|
|
"secrets",
|
|
"machines",
|
|
"add",
|
|
"--flake",
|
|
str(flake.path),
|
|
"vm1",
|
|
age_keys[1].pubkey,
|
|
]
|
|
)
|
|
monkeypatch.setenv("SOPS_NIX_SECRET", age_keys[0].privkey)
|
|
cli.run(["secrets", "set", "--flake", str(flake.path), "vm1-age.key"])
|
|
|
|
flake_path = flake.path.joinpath("flake.nix")
|
|
|
|
cli.run(["facts", "upload", "--flake", str(flake_path), "vm1"])
|
|
|
|
assert sops_key.exists()
|
|
assert sops_key.read_text() == age_keys[0].privkey
|
|
assert not sops_key2.exists()
|