Merge pull request 'vars: fix shared dependency was not resolved correctly' (#2280) from DavHau/clan-core:DavHau-dave into main

This commit is contained in:
clan-bot
2024-10-23 13:49:23 +00:00
2 changed files with 36 additions and 2 deletions

View File

@@ -58,7 +58,6 @@ def decrypt_dependencies(
generator_name: str, generator_name: str,
secret_vars_store: SecretStoreBase, secret_vars_store: SecretStoreBase,
public_vars_store: FactStoreBase, public_vars_store: FactStoreBase,
shared: bool,
) -> dict[str, dict[str, bytes]]: ) -> dict[str, dict[str, bytes]]:
generator = machine.vars_generators[generator_name] generator = machine.vars_generators[generator_name]
dependencies = set(generator["dependencies"]) dependencies = set(generator["dependencies"])
@@ -66,6 +65,7 @@ def decrypt_dependencies(
for dep_generator in dependencies: for dep_generator in dependencies:
decrypted_dependencies[dep_generator] = {} decrypted_dependencies[dep_generator] = {}
dep_files = machine.vars_generators[dep_generator]["files"] dep_files = machine.vars_generators[dep_generator]["files"]
shared = machine.vars_generators[dep_generator]["share"]
for file_name, file in dep_files.items(): for file_name, file in dep_files.items():
if file["secret"]: if file["secret"]:
decrypted_dependencies[dep_generator][file_name] = ( decrypted_dependencies[dep_generator][file_name] = (
@@ -110,7 +110,10 @@ def execute_generator(
# build temporary file tree of dependencies # build temporary file tree of dependencies
decrypted_dependencies = decrypt_dependencies( decrypted_dependencies = decrypt_dependencies(
machine, generator_name, secret_vars_store, public_vars_store, shared=is_shared machine,
generator_name,
secret_vars_store,
public_vars_store,
) )
def get_prompt_value(prompt_name: str) -> str: def get_prompt_value(prompt_name: str) -> str:

View File

@@ -476,6 +476,37 @@ def test_share_flag(
assert json.loads(vars_eval) == "hello\n" assert json.loads(vars_eval) == "hello\n"
@pytest.mark.impure
def test_depending_on_shared_secret_succeeds(
monkeypatch: pytest.MonkeyPatch,
temporary_home: Path,
sops_setup: SopsSetup,
) -> None:
config = nested_dict()
shared_generator = config["clan"]["core"]["vars"]["generators"]["shared_generator"]
shared_generator["share"] = True
shared_generator["files"]["my_secret"]["secret"] = True
shared_generator["script"] = "echo hello > $out/my_secret"
dependent_generator = config["clan"]["core"]["vars"]["generators"][
"dependent_generator"
]
dependent_generator["share"] = False
dependent_generator["files"]["my_secret"]["secret"] = True
dependent_generator["dependencies"] = ["shared_generator"]
dependent_generator["script"] = (
"cat $in/shared_generator/my_secret > $out/my_secret"
)
flake = generate_flake(
temporary_home,
flake_template=CLAN_CORE / "templates" / "minimal",
monkeypatch=monkeypatch,
machine_configs={"my_machine": config},
)
monkeypatch.chdir(flake.path)
sops_setup.init()
cli.run(["vars", "generate", "--flake", str(flake.path), "my_machine"])
@pytest.mark.impure @pytest.mark.impure
def test_prompt_create_file( def test_prompt_create_file(
monkeypatch: pytest.MonkeyPatch, monkeypatch: pytest.MonkeyPatch,