Repository navigation
Conversation
* feat: add image code resolution DMN table * Update imagecodes.dmn
* feat: let the DMN admin API address more than one table The DMN endpoints were fixed to credentials.dmn, so there was no way for a TRE Admin to view or edit the new image code table. They now take an optional table selector, and the tables themselves are described in one place rather than being hardcoded wherever they are needed. * feat: let TRE Admins choose which DMN table to edit Adds a decision table selector to the DMN rule manager, so the image code table can be managed alongside the environment variables one.
✒️ PR Title Commitlint - ✔️ Lint success! |
🛠️ 🐳 Build PR Container - agent-api-container - 🏷️ Commit: 4ca794f - ⚙️ Workflow: 41335757760 |
🛠️ 🐳 Build PR Container - agent-ui-container - 🏷️ Commit: 4ca794f - ⚙️ Workflow: 41335757760 |
🛠️ 🐳 Build PR Container - agent-web-container - 🏷️ Commit: 4ca794f - ⚙️ Workflow: 41335757760 |
| else | ||
| { | ||
| // Nothing read, so allow a later poll to try this path again. | ||
| fetchedPaths.Remove(record.VaultPath); |
There was a problem hiding this comment.
If we encounter an exception when calling _vaultService.GetCredentialAsync(record.VaultPath) on line 1237, we'll exit the try block and skip over this line, meaning this vault path doesn't get removed from fetchedPaths. Could the try catch be moved inside the loop so that the vault paths can be removed from the hash set in the catch block too?
There was a problem hiding this comment.
Thanks for the catch. Its fixed now
|
|
||
| /// <summary>Variables keyed by the image code they belong to.</summary> | ||
| public Dictionary<string, Dictionary<string, string>> ByImageCode { get; } = | ||
| new(StringComparer.Ordinal); |
There was a problem hiding this comment.
SharedByType uses OrdinalIgnoreCase, should ByImageCode also ignore case? In CreateTreCredentialsHandler line 40, case doesn't get changed, but in ImageCodeResolver lines 89 and 166, ToLowerInvariant is being used. If codes can end up in this dictionary from both those sources then there could be a mismatch in casing
There was a problem hiding this comment.
Thanks for the catch. Its fixed now
|

0 New Issues
0 Fixed Issues
0 Accepted Issues
No data about coverage (0.00% Estimated after merge)
🛠️ Pull Request
✨ Feature
Description:
Lets a researcher write
{{@imageCode}}in an executor'simagefield instead of a real container image, and have the TRE resolve it — along with the environment variables that image needs — at dispatch time.Resolves TREFX-673.
How it works
A submission's executors, as the researcher writes them:
What the TRE does with that:
Executor 1 not receiving
@sky-create's variables is the point of the feature:each executor gets only what belongs to the image it is about to run.
Two DMN tables:
imagecodes.dmn)credentials.dmn, extended)isSecretrowsAdmin UI
A decision table selector on the DMN rule manager (
treUI, port 8989). The page was already fully dynamic — it builds columns and form fields from whatever the table declares — so the new environment variable columns needed no change. Only the means to switch tables was missing. The table list comes from the API rather than being hardcoded, and failing to load it hides the selector and loads the default, so a partial deploy degrades rather than breaks.The DMN files sit on the
tre_process_modelsnamed volume, and Docker only seeds a named volume from the image when it is empty.imagecodes.dmnwill not appear on any environment that has already run the stack, soImageCodesDMNnever deploys and image resolution fails. The volume needs recreating, or the file copying in.Tested on the demo stack
{{@sky-create}}reaches TESK as the real imagevaultPathfails the submission, and writes no partial pathscredentials.dmnuntouchedFound while testing:
docker runline, values included, into itssystem_logs,which are returned through the TES API. This branch stops the Agent writing
credentials to Seq; Funnel writes the same ones a step later.
DELETE .../data/...), so an "ephemeral"credential stays recoverable with
vault kv undelete.📝 Pre-merge checklist
Ready to merge? Do not merge until all checks are satisfied.
requiredCI checks passed on the most recent commit?type(scope): summarybreaking changesdeclared in the PR title in conventional-commit style? ie.type!(scope): summary