Skip to content

docs: fill gaps of the Node Operators pages - #140

Open
uniqueg wants to merge 2 commits into
mainfrom
docs/81-node-operator-gaps
Open

uniqueg wants to merge 2 commits into
mainfrom
docs/81-node-operator-gaps

Conversation

@uniqueg

@uniqueg uniqueg commented Nov 13, 2026 •

Copy link
Copy Markdown
Member

Summary

Fills the gaps of #81 that the repositories and decision records can answer, on the pages outside the files of the data centre tutorial PR (#138):

  • Item 2, verification: using-cloud-registry.md gets "What the admins check" (the owner is known, URL, API type and organization right, https, live with public service info and sync on, not open to anyone; from generic-issues#51 and the existing policies) and "Who uses the verified entries" (proTES when it discovers TES services in a registry; Krini and the CLI don't show the label, as their pages already say; the deployment's proTES configuration is tracked in generic-issues#31).
  • Item 5, Poiesis: storage (S3 and HTTP(S), not FTP, from the Poiesis docs) and token support (one OIDC issuer, no group check yet: generic-issues#21). Which Nodes run it stays a note pointing to generic-issues#31.
  • Item 6, Funnel with OpenPBS: a section with the pbs backend config, a job template adapted to the OpenPBS select syntax, and a "Not tested here" warning: Funnel's reconciler parses Torque's XML qstat -x, which OpenPBS doesn't produce, so it stays off (Funnel's default). Services index lists OpenPBS for Funnel.
  • Item 4, proTES: the note now points to generic-issues#31.

Not in this PR

Edits to onboarding.md, node-onboarding-tutorial.md and data-centre-onboarding-tutorial.md were held back, because they were off limits while #138 was open. #138 is merged now, so a follow-up can do them:

  • onboarding.md: replace the verification note (lines 97-100) with a link to "What the admins check"; replace the vsftpd step "write to the service email for user name and password" (item 3) with: create an account for the tasks with access to their directories only, give its credentials to the TES service (TESK: the ftp values of its chart), share them with other Nodes' operators only as agreed with the admins, never by email to a list, an issue or a registry entry; add "Slurm, OpenPBS" to the Funnel row and the requirements list; note that Poiesis needs S3.
  • node-onboarding-tutorial.md step 6 and data-centre-onboarding-tutorial.md step 5: replace the "checks are not written down" notes with a link to "What the admins check".

Still open, needing the maintainers (#81 items 1 and 4, part of 5): the policies for joining (who, what a Node provides, how long verification takes), and the addresses and contents of the deployment's proTES, proWES, CWL-WES, DRS-Filer and TRS-Filer and which Nodes run Poiesis. Those notes stay.

Verification

  • python scripts/check_names.py: passes
  • mkdocs build --strict: passes, no warnings
  • pytest: 25 passed, 100% coverage
  • Rendered Funnel page checked: the Go template shows as a code block inside the list.
  • CI on the PR: all checks passed (CI passed, Docs, Test, PR title, CodeQL, Read the Docs preview).

Light lane: docs only, no logic, CI, secrets or workflows touched; reviewed the diff myself.

Declined review findings

None (light lane, no reviewer subagents).

Open questions

None for this PR. Whether to split #81 (the maintainer-only items into their own issue) is noted for the maintainers separately.

Closes #142 (part of #81)

🤖 Generated with Claude Code

Summary by Sourcery

Complete the Node Operator documentation gaps for service verification, Poiesis, OpenPBS-backed Funnel deployments, and proTES configuration tracking.

New Features:

  • Document OpenPBS support for Funnel, including configuration guidance and limitations.
  • Document Poiesis storage and OIDC token requirements.
  • Document Cloud Registry verification criteria and how verified entries are used.

Enhancements:

  • Clarify deployment notes for Funnel and proTES, including links to tracked deployment configuration gaps.

Documentation:

  • Expand Node Operator documentation for Cloud Registry verification, Poiesis, Funnel, and proTES.

Document what the registry admins check before they verify a service
and which services use the verified entries, Funnel with OpenPBS, the
storage and token support of Poiesis, and point the proTES note to
the issue that tracks its configuration.

Part of #81.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sourcery-ai

sourcery-ai Bot commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

Reviewer's Guide

Documentation

Document Funnel's OpenPBS deployment requirements and limitations, and list OpenPBS as a supported backend.

  • docs/operators/services/funnel.md L4-5, L20-25, L32-104
  • docs/operators/services/index.md L17

Explain what admins check before verifying Cloud Registry entries and who uses the verified entries.

  • docs/operators/using-cloud-registry.md L79-116, L197-198

Document Poiesis's storage and token requirements, and point to the issue tracking which Nodes run it.

  • docs/operators/services/poiesis.md L25-40

Point the outstanding proTES deployment details to the issue tracking its configuration.

  • docs/operators/services/protes.md L24-29

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@read-the-docs-community

read-the-docs-community Bot commented Nov 13, 2026 •

Copy link
Copy Markdown

@uniqueg
uniqueg marked this pull request as ready for review November 13, 2026 13:19

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've found 5 issues

Prompt for AI Agents
Please address the comments from this code review:

## Individual Comments

### Comment 1
<location path="docs/operators/using-cloud-registry.md" line_range="93-94" />
<code_context>
+- **The service is live:** it answers at its URL, and its service info is
+  public, with sync on (see above).
+- **The service isn't open to anyone:** it accepts requests only from the
+  users that the policy of the federation allows, e.g., for a TES service,
+  members of the LS Login group `ECP_CLN` (see [Enable LS Login and ECP_CLN
+  access](node-onboarding-tutorial.md#3-enable-ls-login-and-ecp_cln-access)),
+  and from the gateway.
</code_context>
<issue_to_address>
**Access checks are overstated**

When an operator evaluates a Poiesis or Funnel endpoint without an external membership gate, poiesis and Funnel accept any valid token from their configured issuer rather than checking `ECP_CLN`, while the checklist says the service accepts only federation-approved users. Operators and users can mistake verification for proof of membership enforcement.

Clarify that Poiesis and Funnel need an external membership gate to meet this check, or enforce the federation membership policy in the service.
</issue_to_address>

### Comment 2
<location path="docs/operators/services/funnel.md" line_range="23" />
<code_context>
+- The ELIXIR On-Cloud documents Funnel with Slurm and with OpenPBS (below).
+  For other backends, such as HTCondor or Grid Engine, see the Funnel docs.
+- Place the `funnel` binary on a server that can submit jobs to the
+  cluster: a login or submission node of Slurm or PBS.
+- Put the config file on the same server. For Slurm, [this
+  file][funnel-config-slurm] is a starting point.
</code_context>
<issue_to_address>
**PBS tasks cannot start**

When the compute hosts cannot access the Funnel binary or config file at the paths used by the job, `funnel worker run` executes on a compute host, where the binary or `/etc/funnel/funnel-config.yml` is unavailable, so the worker exits before running the task.

Ensure the binary and config file are available to compute hosts at the paths used in the job script, or update the script to use accessible paths.

Also at `docs/operators/services/funnel.md:53`, `docs/operators/services/funnel.md:71`.
</issue_to_address>

### Comment 3
<location path="docs/operators/services/funnel.md" line_range="51" />
<code_context>
+    #PBS -N {{.TaskId}}
+    #PBS -o {{.WorkDir}}/funnel-stdout
+    #PBS -e {{.WorkDir}}/funnel-stderr
+    #PBS -l select=1:ncpus={{if ne .Cpus 0}}{{.Cpus}}{{else}}1{{end}}{{if ne .RamGb 0.0}}{{printf ":mem=%.0fgb" .RamGb}}{{end}}
+
+    funnel worker run --config /etc/funnel/funnel-config.yml --taskID {{.TaskId}}
</code_context>
<issue_to_address>
**PBS jobs get too little memory**

When a task requests fractional `RamGb` that `printf "%.0f"` rounds down, the `.RamGb` formatting expression rounds down to a whole GB (and requests below 0.5 GB become `0gb`), so PBS allocates less memory than requested and the task is under-provisioned and subject to termination for exceeding its limit.

Round requested memory up to a whole GB or format it using a PBS-supported fractional unit so the allocation is never below `.RamGb`.
</issue_to_address>

### Comment 4
<location path="docs/operators/services/funnel.md" line_range="49-50" />
<code_context>
+    ```text
+    #!/bin/bash
+    #PBS -N {{.TaskId}}
+    #PBS -o {{.WorkDir}}/funnel-stdout
+    #PBS -e {{.WorkDir}}/funnel-stderr
+    #PBS -l select=1:ncpus={{if ne .Cpus 0}}{{.Cpus}}{{else}}1{{end}}{{if ne .RamGb 0.0}}{{printf ":mem=%.0fgb" .RamGb}}{{end}}
+
</code_context>
<issue_to_address>
**PBS workers cannot access task files**

When the Funnel server's work directory is on storage not mounted on PBS execution hosts, the PBS job uses Funnel's `WorkDir` for its output paths and worker task data. When that directory is local to the submission host rather than shared with execution hosts, the worker cannot access the task files and the job fails.

Explicitly require Funnel's work directory and PBS output paths to use storage accessible from the execution hosts.
</issue_to_address>

### Comment 5
<location path="docs/operators/services/funnel.md" line_range="51" />
<code_context>
+    #PBS -N {{.TaskId}}
+    #PBS -o {{.WorkDir}}/funnel-stdout
+    #PBS -e {{.WorkDir}}/funnel-stderr
+    #PBS -l select=1:ncpus={{if ne .Cpus 0}}{{.Cpus}}{{else}}1{{end}}{{if ne .RamGb 0.0}}{{printf ":mem=%.0fgb" .RamGb}}{{end}}
+
+    funnel worker run --config /etc/funnel/funnel-config.yml --taskID {{.TaskId}}
</code_context>
<issue_to_address>
**Tasks can run in the wrong zone**

When a TES task specifies a zone, the job template never uses `.Zone`, so PBS submits the task without that constraint and can run it in a different zone.

Apply `.Zone` in the PBS job request, or document that the backend ignores zone requests.

Also at `docs/operators/services/funnel.md:38`.
</issue_to_address>

Sourcery assessment

Approval pending. 5 findings to address first.

Blocking findings: docs/operators/using-cloud-registry.md:94, docs/operators/services/funnel.md:23, docs/operators/services/funnel.md:51, docs/operators/services/funnel.md:50, docs/operators/services/funnel.md:51


Sourcery is free for open source - if you like our reviews please consider sharing them ✨

Comment thread docs/operators/using-cloud-registry.md Resolved
Comment thread docs/operators/services/funnel.md Resolved
Comment thread docs/operators/services/funnel.md Resolved
Comment thread docs/operators/services/funnel.md Resolved
Comment thread docs/operators/services/funnel.md Resolved
Use Funnel's Args for the worker config, require a shared work
directory and the binary on the execution hosts, say what the PBS
template ignores or rounds, and say that a service without its own
group check meets the access check only behind the gateway.

Part of #81.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sourcery-ai

sourcery-ai Bot commented Nov 13, 2026

Copy link
Copy Markdown
Contributor

Linked issues

Checked at commit 367c9be

#142 docs: document service checks, Poiesis and OpenPBS · 5 of 5 met

# Requirement Status Notes
1 Document what admins check before verifying a service ✅ Met The page covers owner identity, entry values and HTTPS, service availability and public synced service info, and access restrictions.
2 Document who uses verified entries ✅ Met The page explains proTES discovery behavior and that Krini and the CLI show verified and unverified services alike.
3 Document Poiesis storage and token support ✅ Met The page lists S3 and HTTP(S), excludes FTP, and notes the single OIDC issuer and missing group check.
4 Document Funnel with OpenPBS and list OpenPBS in the services index ✅ Met The Funnel page includes a PBS configuration, an OpenPBS-style job template and an untested warning; the services index lists OpenPBS.
5 Point the proTES note to the issue tracking its configuration ✅ Met The proTES page links its deployment configuration note to generic-issues#31.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docs: document service checks, Poiesis and OpenPBS

1 participant