feat: merge the manifest attribute sets better

* merge the arrays `fs.mounts` and `sgx.trusted_files`
  instead of replacing them.
* append `loader.env.LD_LIBRARY_PATH`
  instead of replacing it.

Signed-off-by: Harald Hoyer <harald@matterlabs.dev>
This commit is contained in:
Harald Hoyer 2024-06-06 13:48:40 +02:00
parent 9fc590adf9
commit 7050f3b049
Signed by: harald
GPG key ID: F519A1143B3FBE32

View file

@ -27,6 +27,22 @@ _:
}:
assert lib.assertMsg (!(isAzure && sgx_default_qcnl_conf != null)) "sgx_default_qcnl_conf can't be set for Azure";
let
manifestRecursiveMerge =
base: mod: with lib.attrsets; let
mergeByPathWithOp = path: action: setAttrByPath path (
if hasAttrByPath path mod
then action (getAttrFromPath path base) (getAttrFromPath path mod)
else getAttrFromPath path base
);
mergeListByPath = path: mergeByPathWithOp path (a: b: a ++ b);
mergeEnvPathByPath = path: mergeByPathWithOp path (a: b: a + ":" + b);
in
recursiveUpdate base (recursiveUpdate mod (
# manually merge the relevant lists / strings
mergeListByPath [ "fs" "mounts" ]
// mergeListByPath [ "sgx" "trusted_files" ]
// mergeEnvPathByPath [ "loader" "env" "LD_LIBRARY_PATH" ]
));
manifest_base = {
libos = { inherit entrypoint; };
fs = {
@ -77,7 +93,7 @@ _:
};
};
mergedManifest = (if customRecursiveMerge == null then lib.recursiveUpdate else customRecursiveMerge) manifest_base manifest;
mergedManifest = (if customRecursiveMerge == null then manifestRecursiveMerge else customRecursiveMerge) manifest_base manifest;
tomlFormat = pkgs.formats.toml { };
manifestFile = tomlFormat.generate "${name}.manifest.toml" mergedManifest;